@@ -6,6 +6,7 @@ import type { KeyringAccount } from '@metamask/keyring-api';
6
6
import { EthAccountType , SolAccountType } from '@metamask/keyring-api' ;
7
7
import { KeyringTypes , type KeyringObject } from '@metamask/keyring-controller' ;
8
8
9
+ import type { MultichainAccountServiceOptions } from './MultichainAccountService' ;
9
10
import { MultichainAccountService } from './MultichainAccountService' ;
10
11
import { AccountProviderWrapper } from './providers/AccountProviderWrapper' ;
11
12
import { EvmAccountProvider } from './providers/EvmAccountProvider' ;
@@ -72,9 +73,10 @@ function mockAccountProvider<Provider>(
72
73
accounts : KeyringAccount [ ] ,
73
74
type : KeyringAccount [ 'type' ] ,
74
75
) {
75
- jest
76
- . mocked ( providerClass )
77
- . mockImplementation ( ( ) => mocks as unknown as Provider ) ;
76
+ jest . mocked ( providerClass ) . mockImplementation ( ( ...args ) => {
77
+ mocks . constructor ( ...args ) ;
78
+ return mocks as unknown as Provider ;
79
+ } ) ;
78
80
79
81
setupNamedAccountProvider ( {
80
82
mocks,
@@ -87,13 +89,15 @@ function setup({
87
89
messenger = getRootMessenger ( ) ,
88
90
keyrings = [ MOCK_HD_KEYRING_1 , MOCK_HD_KEYRING_2 ] ,
89
91
accounts,
92
+ providersConfigs,
90
93
} : {
91
94
messenger ?: Messenger <
92
95
MultichainAccountServiceActions | AllowedActions ,
93
96
MultichainAccountServiceEvents | AllowedEvents
94
97
> ;
95
98
keyrings ?: KeyringObject [ ] ;
96
99
accounts ?: KeyringAccount [ ] ;
100
+ providersConfigs ?: MultichainAccountServiceOptions [ 'providersConfigs' ] ;
97
101
} = { } ) : {
98
102
service : MultichainAccountService ;
99
103
messenger : Messenger <
@@ -116,8 +120,12 @@ function setup({
116
120
SolAccountProvider : makeMockAccountProvider ( ) ,
117
121
} ;
118
122
// Default provider names can be overridden per test using mockImplementation
119
- mocks . EvmAccountProvider . getName . mockImplementation ( ( ) => 'EVM' ) ;
120
- mocks . SolAccountProvider . getName . mockImplementation ( ( ) => 'Solana' ) ;
123
+ mocks . EvmAccountProvider . getName . mockImplementation (
124
+ ( ) => EvmAccountProvider . NAME ,
125
+ ) ;
126
+ mocks . SolAccountProvider . getName . mockImplementation (
127
+ ( ) => SolAccountProvider . NAME ,
128
+ ) ;
121
129
122
130
mocks . KeyringController . getState . mockImplementation ( ( ) => ( {
123
131
isUnlocked : true ,
@@ -165,13 +173,48 @@ function setup({
165
173
166
174
const service = new MultichainAccountService ( {
167
175
messenger : getMultichainAccountServiceMessenger ( messenger ) ,
176
+ providersConfigs,
168
177
} ) ;
169
178
service . init ( ) ;
170
179
171
180
return { service, messenger, mocks } ;
172
181
}
173
182
174
183
describe ( 'MultichainAccountService' , ( ) => {
184
+ describe ( 'constructor' , ( ) => {
185
+ it ( 'forwards conflicts to each providers' , ( ) => {
186
+ const providersConfigs : MultichainAccountServiceOptions [ 'providersConfigs' ] =
187
+ {
188
+ [ EvmAccountProvider . NAME ] : {
189
+ discovery : {
190
+ timeoutMs : 1000 ,
191
+ maxAttempts : 2 ,
192
+ backOffMs : 1000 ,
193
+ } ,
194
+ } ,
195
+ [ SolAccountProvider . NAME ] : {
196
+ discovery : {
197
+ timeoutMs : 1000 ,
198
+ } ,
199
+ } ,
200
+ } ;
201
+
202
+ const { mocks, messenger } = setup ( {
203
+ accounts : [ MOCK_HD_ACCOUNT_1 , MOCK_SOL_ACCOUNT_1 ] ,
204
+ providersConfigs,
205
+ } ) ;
206
+
207
+ expect ( mocks . EvmAccountProvider . constructor ) . toHaveBeenCalledWith (
208
+ messenger ,
209
+ providersConfigs [ EvmAccountProvider . NAME ] ,
210
+ ) ;
211
+ expect ( mocks . SolAccountProvider . constructor ) . toHaveBeenCalledWith (
212
+ messenger ,
213
+ providersConfigs [ SolAccountProvider . NAME ] ,
214
+ ) ;
215
+ } ) ;
216
+ } ) ;
217
+
175
218
describe ( 'getMultichainAccountGroups' , ( ) => {
176
219
it ( 'gets multichain accounts' , ( ) => {
177
220
const { service } = setup ( {
0 commit comments