1
1
import { Messenger } from '@metamask/base-controller' ;
2
- import { InfuraNetworkType } from '@metamask/controller-utils' ;
3
2
import type {
4
3
AccountAssetListUpdatedEventPayload ,
5
4
AccountBalancesUpdatedEventPayload ,
6
5
AccountTransactionsUpdatedEventPayload ,
6
+ EntropySourceId ,
7
7
} from '@metamask/keyring-api' ;
8
8
import {
9
9
BtcAccountType ,
10
10
BtcScope ,
11
11
EthAccountType ,
12
12
EthScope ,
13
+ KeyringAccountEntropyTypeOption ,
13
14
} from '@metamask/keyring-api' ;
14
15
import { KeyringTypes } from '@metamask/keyring-controller' ;
15
16
import type { InternalAccount } from '@metamask/keyring-internal-api' ;
@@ -158,49 +159,60 @@ function mockUUIDWithNormalAccounts(accounts: InternalAccount[]) {
158
159
mockUUID . mockImplementation ( mockAccountUUIDs . mock . bind ( mockAccountUUIDs ) ) ;
159
160
}
160
161
161
- /**
162
- * Sets the `lastSelected` property of the given `account` to `expect.any(Number)`.
163
- *
164
- * @param account - The account to modify.
165
- * @returns The modified account.
166
- */
167
- function setLastSelectedAsAny ( account : InternalAccount ) : InternalAccount {
168
- const deepClonedAccount = JSON . parse (
169
- JSON . stringify ( {
170
- ...account ,
171
- metadata : {
172
- ...account . metadata ,
173
- lastSelected : expect . any ( Number ) ,
162
+ class MockExpectedInternalAccountBuilder {
163
+ readonly #account: InternalAccount ;
164
+
165
+ constructor ( account : InternalAccount ) {
166
+ this . #account = JSON . parse ( JSON . stringify ( account ) ) as InternalAccount ;
167
+ }
168
+
169
+ static from ( account : InternalAccount ) {
170
+ return new MockExpectedInternalAccountBuilder ( account ) ;
171
+ }
172
+
173
+ setExpectedLastSelectedAsAny ( ) : MockExpectedInternalAccountBuilder {
174
+ this . #account. metadata . lastSelected = expect . any ( Number ) ;
175
+ this . #account. metadata . importTime = expect . any ( Number ) ;
176
+
177
+ return this ;
178
+ }
179
+
180
+ setExpectedEntropyOptions (
181
+ keyringId : EntropySourceId ,
182
+ ) : MockExpectedInternalAccountBuilder {
183
+ this . #account. options = {
184
+ ...this . #account. options ,
185
+ entropySource : keyringId ,
186
+ groupIndex : expect . any ( Number ) ,
187
+ derivationPath : expect . any ( String ) ,
188
+ // New type `KeyringAccount` options.
189
+ entropy : {
190
+ type : KeyringAccountEntropyTypeOption . Mnemonic ,
191
+ id : keyringId ,
192
+ groupIndex : expect . any ( Number ) ,
193
+ derivationPath : expect . any ( String ) ,
174
194
} ,
175
- } ) ,
176
- ) as InternalAccount ;
195
+ } ;
196
+ return this ;
197
+ }
177
198
178
- deepClonedAccount . metadata . lastSelected = expect . any ( Number ) ;
179
- deepClonedAccount . metadata . importTime = expect . any ( Number ) ;
180
- return deepClonedAccount ;
199
+ get ( ) : InternalAccount {
200
+ return this . #account ;
201
+ }
181
202
}
182
203
183
204
/**
184
- * Sets the `entropySource` property of the given `account` to the specified
185
- * keyringId value.
205
+ * Sets the `lastSelected` property of the given `account` to `expect.any(Number)`.
186
206
*
187
207
* @param account - The account to modify.
188
- * @param keyringId - The keyring ID to set as entropySource.
189
208
* @returns The modified account.
190
209
*/
191
- function populateEntropySource (
210
+ function setExpectedLastSelectedAsAny (
192
211
account : InternalAccount ,
193
- keyringId : string ,
194
212
) : InternalAccount {
195
- return JSON . parse (
196
- JSON . stringify ( {
197
- ...account ,
198
- options : {
199
- ...account . options ,
200
- entropySource : keyringId ,
201
- } ,
202
- } ) ,
203
- ) as InternalAccount ;
213
+ return MockExpectedInternalAccountBuilder . from ( account )
214
+ . setExpectedLastSelectedAsAny ( )
215
+ . get ( ) ;
204
216
}
205
217
206
218
/**
@@ -678,7 +690,10 @@ describe('AccountsController', () => {
678
690
679
691
expect ( accounts ) . toStrictEqual ( [
680
692
mockAccount ,
681
- setLastSelectedAsAny ( populateEntropySource ( mockAccount2 , 'mock-id' ) ) ,
693
+ MockExpectedInternalAccountBuilder . from ( mockAccount2 )
694
+ . setExpectedLastSelectedAsAny ( )
695
+ . setExpectedEntropyOptions ( 'mock-id' )
696
+ . get ( ) ,
682
697
] ) ;
683
698
} ) ;
684
699
@@ -744,8 +759,8 @@ describe('AccountsController', () => {
744
759
745
760
expect ( accounts ) . toStrictEqual ( [
746
761
mockAccount ,
747
- setLastSelectedAsAny ( mockAccount4 ) ,
748
- setLastSelectedAsAny (
762
+ setExpectedLastSelectedAsAny ( mockAccount4 ) ,
763
+ setExpectedLastSelectedAsAny (
749
764
createExpectedInternalAccount ( {
750
765
id : 'mock-id3' ,
751
766
name : 'Snap Account 2' ,
@@ -819,7 +834,7 @@ describe('AccountsController', () => {
819
834
820
835
expect ( accounts ) . toStrictEqual ( [
821
836
mockAccount ,
822
- setLastSelectedAsAny ( mockAccount4 ) ,
837
+ setExpectedLastSelectedAsAny ( mockAccount4 ) ,
823
838
] ) ;
824
839
} ) ;
825
840
@@ -878,7 +893,9 @@ describe('AccountsController', () => {
878
893
879
894
const accounts = accountsController . listMultichainAccounts ( ) ;
880
895
881
- expect ( accounts ) . toStrictEqual ( [ setLastSelectedAsAny ( mockAccount ) ] ) ;
896
+ expect ( accounts ) . toStrictEqual ( [
897
+ setExpectedLastSelectedAsAny ( mockAccount ) ,
898
+ ] ) ;
882
899
} ) ;
883
900
884
901
it ( 'increment the default account number when adding an account' , async ( ) => {
@@ -927,17 +944,17 @@ describe('AccountsController', () => {
927
944
expect ( accounts ) . toStrictEqual ( [
928
945
mockAccount ,
929
946
mockAccount2 ,
930
- setLastSelectedAsAny (
947
+ MockExpectedInternalAccountBuilder . from (
931
948
createExpectedInternalAccount ( {
932
949
id : 'mock-id3' ,
933
950
name : 'Account 3' ,
934
951
address : mockAccount3 . address ,
935
952
keyringType : KeyringTypes . hd ,
936
- options : {
937
- entropySource : 'mock-id' ,
938
- } ,
939
953
} ) ,
940
- ) ,
954
+ )
955
+ . setExpectedLastSelectedAsAny ( )
956
+ . setExpectedEntropyOptions ( 'mock-id' )
957
+ . get ( ) ,
941
958
] ) ;
942
959
} ) ;
943
960
@@ -993,18 +1010,20 @@ describe('AccountsController', () => {
993
1010
994
1011
const accounts = accountsController . listMultichainAccounts ( ) ;
995
1012
996
- expect ( accounts . map ( setLastSelectedAsAny ) ) . toStrictEqual ( [
1013
+ expect ( accounts . map ( setExpectedLastSelectedAsAny ) ) . toStrictEqual ( [
997
1014
mockAccount ,
998
1015
mockAccount2WithCustomName ,
999
- createExpectedInternalAccount ( {
1000
- id : 'mock-id3' ,
1001
- name : 'Account 3' ,
1002
- address : mockAccount3 . address ,
1003
- keyringType : KeyringTypes . hd ,
1004
- options : {
1005
- entropySource : 'mock-id' ,
1006
- } ,
1007
- } ) ,
1016
+ MockExpectedInternalAccountBuilder . from (
1017
+ createExpectedInternalAccount ( {
1018
+ id : 'mock-id3' ,
1019
+ name : 'Account 3' ,
1020
+ address : mockAccount3 . address ,
1021
+ keyringType : KeyringTypes . hd ,
1022
+ } ) ,
1023
+ )
1024
+ . setExpectedLastSelectedAsAny ( )
1025
+ . setExpectedEntropyOptions ( 'mock-id' )
1026
+ . get ( ) ,
1008
1027
] ) ;
1009
1028
} ) ;
1010
1029
@@ -1106,7 +1125,10 @@ describe('AccountsController', () => {
1106
1125
1107
1126
expect ( accounts ) . toStrictEqual ( [
1108
1127
mockAccount ,
1109
- setLastSelectedAsAny ( populateEntropySource ( mockAccount2 , 'mock-id' ) ) ,
1128
+ MockExpectedInternalAccountBuilder . from ( mockAccount2 )
1129
+ . setExpectedLastSelectedAsAny ( )
1130
+ . setExpectedEntropyOptions ( 'mock-id' )
1131
+ . get ( ) ,
1110
1132
] ) ;
1111
1133
expect ( accountsController . getSelectedAccount ( ) . id ) . toBe ( mockAccount . id ) ;
1112
1134
} ) ;
@@ -1155,7 +1177,10 @@ describe('AccountsController', () => {
1155
1177
// 2. AccountsController:stateChange
1156
1178
3 ,
1157
1179
'AccountsController:accountAdded' ,
1158
- setLastSelectedAsAny ( populateEntropySource ( mockAccount2 , 'mock-id' ) ) ,
1180
+ MockExpectedInternalAccountBuilder . from ( mockAccount2 )
1181
+ . setExpectedLastSelectedAsAny ( )
1182
+ . setExpectedEntropyOptions ( 'mock-id' )
1183
+ . get ( ) ,
1159
1184
) ;
1160
1185
} ) ;
1161
1186
} ) ;
@@ -1200,9 +1225,11 @@ describe('AccountsController', () => {
1200
1225
1201
1226
const accounts = accountsController . listMultichainAccounts ( ) ;
1202
1227
1203
- expect ( accounts ) . toStrictEqual ( [ setLastSelectedAsAny ( mockAccount2 ) ] ) ;
1228
+ expect ( accounts ) . toStrictEqual ( [
1229
+ setExpectedLastSelectedAsAny ( mockAccount2 ) ,
1230
+ ] ) ;
1204
1231
expect ( accountsController . getSelectedAccount ( ) ) . toStrictEqual (
1205
- setLastSelectedAsAny ( mockAccount2 ) ,
1232
+ setExpectedLastSelectedAsAny ( mockAccount2 ) ,
1206
1233
) ;
1207
1234
} ) ;
1208
1235
@@ -1255,11 +1282,11 @@ describe('AccountsController', () => {
1255
1282
const accounts = accountsController . listMultichainAccounts ( ) ;
1256
1283
1257
1284
expect ( accounts ) . toStrictEqual ( [
1258
- setLastSelectedAsAny ( mockAccount ) ,
1259
- setLastSelectedAsAny ( mockAccount2 ) ,
1285
+ setExpectedLastSelectedAsAny ( mockAccount ) ,
1286
+ setExpectedLastSelectedAsAny ( mockAccount2 ) ,
1260
1287
] ) ;
1261
1288
expect ( accountsController . getSelectedAccount ( ) ) . toStrictEqual (
1262
- setLastSelectedAsAny ( mockAccount2 ) ,
1289
+ setExpectedLastSelectedAsAny ( mockAccount2 ) ,
1263
1290
) ;
1264
1291
} ) ;
1265
1292
@@ -1319,11 +1346,11 @@ describe('AccountsController', () => {
1319
1346
const accounts = accountsController . listMultichainAccounts ( ) ;
1320
1347
1321
1348
expect ( accounts ) . toStrictEqual ( [
1322
- setLastSelectedAsAny ( mockAccount ) ,
1349
+ setExpectedLastSelectedAsAny ( mockAccount ) ,
1323
1350
mockAccount2WithoutLastSelected ,
1324
1351
] ) ;
1325
1352
expect ( accountsController . getSelectedAccount ( ) ) . toStrictEqual (
1326
- setLastSelectedAsAny ( mockAccount ) ,
1353
+ setExpectedLastSelectedAsAny ( mockAccount ) ,
1327
1354
) ;
1328
1355
} ) ;
1329
1356
@@ -1469,9 +1496,7 @@ describe('AccountsController', () => {
1469
1496
name : 'Account 1' ,
1470
1497
address : '0x456' ,
1471
1498
keyringType : KeyringTypes . hd ,
1472
- options : {
1473
- entropySource : 'mock-id' ,
1474
- } ,
1499
+ // Entropy options are added automatically by the controller.
1475
1500
} ) ;
1476
1501
1477
1502
mockUUIDWithNormalAccounts ( [
@@ -1512,7 +1537,12 @@ describe('AccountsController', () => {
1512
1537
1513
1538
const selectedAccount = accountsController . getSelectedAccount ( ) ;
1514
1539
const accounts = accountsController . listMultichainAccounts ( ) ;
1515
- const expectedAccount = setLastSelectedAsAny ( mockReinitialisedAccount ) ;
1540
+ const expectedAccount = MockExpectedInternalAccountBuilder . from (
1541
+ mockReinitialisedAccount ,
1542
+ )
1543
+ . setExpectedLastSelectedAsAny ( )
1544
+ . setExpectedEntropyOptions ( 'mock-id' )
1545
+ . get ( ) ;
1516
1546
1517
1547
expect ( selectedAccount ) . toStrictEqual ( expectedAccount ) ;
1518
1548
expect ( accounts ) . toStrictEqual ( [ expectedAccount ] ) ;
@@ -1947,7 +1977,9 @@ describe('AccountsController', () => {
1947
1977
await accountsController . updateAccounts ( ) ;
1948
1978
1949
1979
expect (
1950
- accountsController . listMultichainAccounts ( ) . map ( setLastSelectedAsAny ) ,
1980
+ accountsController
1981
+ . listMultichainAccounts ( )
1982
+ . map ( setExpectedLastSelectedAsAny ) ,
1951
1983
) . toStrictEqual ( expectedAccounts ) ;
1952
1984
} ) ;
1953
1985
@@ -2251,7 +2283,9 @@ describe('AccountsController', () => {
2251
2283
await accountsController . updateAccounts ( ) ;
2252
2284
2253
2285
expect (
2254
- accountsController . listMultichainAccounts ( ) . map ( setLastSelectedAsAny ) ,
2286
+ accountsController
2287
+ . listMultichainAccounts ( )
2288
+ . map ( setExpectedLastSelectedAsAny ) ,
2255
2289
) . toStrictEqual ( expectedAccounts ) ;
2256
2290
} ) ;
2257
2291
@@ -2465,7 +2499,7 @@ describe('AccountsController', () => {
2465
2499
2466
2500
const result = accountsController . getAccount ( mockAccount . id ) ;
2467
2501
2468
- expect ( result ) . toStrictEqual ( setLastSelectedAsAny ( mockAccount ) ) ;
2502
+ expect ( result ) . toStrictEqual ( setExpectedLastSelectedAsAny ( mockAccount ) ) ;
2469
2503
} ) ;
2470
2504
it ( 'return undefined for an unknown account ID' , ( ) => {
2471
2505
const { accountsController } = setupAccountsController ( {
@@ -2793,7 +2827,7 @@ describe('AccountsController', () => {
2793
2827
} ) ;
2794
2828
const result = accountsController . getAccountExpect ( mockAccount . id ) ;
2795
2829
2796
- expect ( result ) . toStrictEqual ( setLastSelectedAsAny ( mockAccount ) ) ;
2830
+ expect ( result ) . toStrictEqual ( setExpectedLastSelectedAsAny ( mockAccount ) ) ;
2797
2831
} ) ;
2798
2832
2799
2833
it ( 'throw an error for an unknown account ID' , ( ) => {
@@ -2866,7 +2900,6 @@ describe('AccountsController', () => {
2866
2900
expect (
2867
2901
accountsController . state . internalAccounts . selectedAccount ,
2868
2902
) . toStrictEqual ( mockNonEvmAccount . id ) ;
2869
- console . log ( accountsController . state . internalAccounts . selectedAccount ) ;
2870
2903
2871
2904
expect ( messengerSpy . mock . calls ) . toHaveLength ( 2 ) ; // state change and then selectedAccountChange
2872
2905
@@ -2877,7 +2910,7 @@ describe('AccountsController', () => {
2877
2910
2878
2911
expect ( messengerSpy ) . toHaveBeenLastCalledWith (
2879
2912
'AccountsController:selectedAccountChange' ,
2880
- setLastSelectedAsAny ( mockNonEvmAccount ) ,
2913
+ setExpectedLastSelectedAsAny ( mockNonEvmAccount ) ,
2881
2914
) ;
2882
2915
} ) ;
2883
2916
} ) ;
@@ -3170,8 +3203,8 @@ describe('AccountsController', () => {
3170
3203
const accounts = accountsController . listMultichainAccounts ( ) ;
3171
3204
expect ( accounts ) . toStrictEqual ( [
3172
3205
mockAccount ,
3173
- setLastSelectedAsAny ( mockSimpleKeyring1 ) ,
3174
- setLastSelectedAsAny ( mockSimpleKeyring2 ) ,
3206
+ setExpectedLastSelectedAsAny ( mockSimpleKeyring1 ) ,
3207
+ setExpectedLastSelectedAsAny ( mockSimpleKeyring2 ) ,
3175
3208
] ) ;
3176
3209
} ) ;
3177
3210
@@ -3227,8 +3260,8 @@ describe('AccountsController', () => {
3227
3260
const accounts = accountsController . listMultichainAccounts ( ) ;
3228
3261
expect ( accounts ) . toStrictEqual ( [
3229
3262
mockAccount ,
3230
- setLastSelectedAsAny ( mockSimpleKeyring2 ) ,
3231
- setLastSelectedAsAny ( mockSimpleKeyring3 ) ,
3263
+ setExpectedLastSelectedAsAny ( mockSimpleKeyring2 ) ,
3264
+ setExpectedLastSelectedAsAny ( mockSimpleKeyring3 ) ,
3232
3265
] ) ;
3233
3266
} ) ;
3234
3267
} ) ;
0 commit comments