diff --git a/test/shared/namespace_utils_test.dart b/test/shared/namespace_utils_test.dart index 0fa7141e..ba767e89 100644 --- a/test/shared/namespace_utils_test.dart +++ b/test/shared/namespace_utils_test.dart @@ -312,6 +312,39 @@ void main() { ); }); + test('constructs namespaces with required and optional namespaces', () { + Map namespaces = NamespaceUtils.constructNamespaces( + availableAccounts: availableAccounts3, + availableMethods: availableMethods3, + availableEvents: availableEvents3, + requiredNamespaces: requiredNamespacesInAvailable3, + optionalNamespaces: optionalNamespacesInAvailable3, + ); + + expect(namespaces.length, 1); + expect( + namespaces['eip155']!.accounts, + availableAccounts3.toList(), + ); + expect( + namespaces['eip155']!.methods, + availableMethods3.map((m) => m.split(':').last).toList(), + ); + expect( + namespaces['eip155']!.events, + availableEvents3.map((m) => m.split(':').last).toList(), + ); + + expect( + SignApiValidatorUtils.isConformingNamespaces( + requiredNamespaces: requiredNamespacesInAvailable3, + namespaces: namespaces, + context: '', + ), + true, + ); + }); + test('constructNamespaces trims off unrequested', () { final reqNamespace = { 'eip155': const RequiredNamespace( @@ -449,7 +482,7 @@ void main() { Errors.getSdkError( Errors.UNSUPPORTED_METHODS, context: - " namespaces methods don't satisfy requiredNamespaces methods for namespace2. Requested: [method3, method4], Supported: [method3]", + " namespaces methods don't satisfy requiredNamespaces methods for namespace1:chain1. Requested: [method1, method2, method3], Supported: [method1, method2]", ).message, Errors.getSdkError( Errors.UNSUPPORTED_EVENTS, @@ -459,13 +492,12 @@ void main() { Errors.getSdkError( Errors.UNSUPPORTED_EVENTS, context: - " namespaces events don't satisfy requiredNamespaces events for namespace2. Requested: [event3, event4], Supported: [event3]", + " namespaces events don't satisfy requiredNamespaces events for namespace1:chain1. Requested: [event1, event2, event3], Supported: [event1, event2]", ).message, ]; for (int i = 0; i < nonconforming.length; i++) { - Map namespaces = - NamespaceUtils.constructNamespaces( + final namespaces = NamespaceUtils.constructNamespaces( availableAccounts: availableAccounts, availableMethods: availableMethods, availableEvents: availableEvents, diff --git a/test/shared/shared_test_values.dart b/test/shared/shared_test_values.dart index 616594bd..67bcfcc1 100644 --- a/test/shared/shared_test_values.dart +++ b/test/shared/shared_test_values.dart @@ -135,7 +135,7 @@ final Map requiredNamespacesNonconformingMethods1 = { final Map requiredNamespacesNonconformingMethods2 = { 'namespace1:chain1': const RequiredNamespace( - methods: ['method1', 'method2'], + methods: ['method1', 'method2', 'method3'], events: ['event1', 'event2'], ), 'namespace2': const RequiredNamespace( @@ -160,7 +160,7 @@ final Map requiredNamespacesNonconformingEvents1 = { final Map requiredNamespacesNonconformingEvents2 = { 'namespace1:chain1': const RequiredNamespace( methods: ['method1', 'method2'], - events: ['event1', 'event2'], + events: ['event1', 'event2', 'event3'], ), 'namespace2': const RequiredNamespace( chains: ['namespace2:chain1', 'namespace2:chain2'], @@ -175,3 +175,61 @@ Map optionalNamespaces = { events: ['event5', 'event2'], ), }; + +const sepolia = 'eip155:11155111'; + +final Set availableAccounts3 = { + '$sepolia:0x99999999999999999999999999', +}; + +final Set availableMethods3 = { + '$sepolia:eth_sendTransaction', + '$sepolia:personal_sign', + '$sepolia:eth_signTypedData', + '$sepolia:eth_signTypedData_v4', + '$sepolia:eth_sign', +}; + +final Set availableEvents3 = { + '$sepolia:chainChanged', + '$sepolia:accountsChanged', +}; + +final Map requiredNamespacesInAvailable3 = { + 'eip155': const RequiredNamespace( + chains: [sepolia], + methods: ['eth_sendTransaction', 'personal_sign'], + events: ['chainChanged', 'accountsChanged'], + ), +}; + +final Map optionalNamespacesInAvailable3 = { + 'eip155': const RequiredNamespace(chains: [ + 'eip155:1', + 'eip155:5', + sepolia, + 'eip155:137', + 'eip155:80001', + 'eip155:42220', + 'eip155:44787', + 'eip155:56', + 'eip155:43114', + 'eip155:42161', + 'eip155:421613', + 'eip155:10', + 'eip155:420', + 'eip155:8453' + ], methods: [ + 'eth_sendTransaction', + 'personal_sign', + 'eth_signTypedData', + 'eth_signTypedData_v4', + 'eth_sign' + ], events: [ + 'chainChanged', + 'accountsChanged', + 'message', + 'disconnect', + 'connect' + ]), +};