Skip to content

Commit fd1e1d1

Browse files
committed
test(nft-controller): expose mock constructors for accounts-controller allowedActions
1 parent 236844a commit fd1e1d1

File tree

1 file changed

+62
-38
lines changed

1 file changed

+62
-38
lines changed

packages/assets-controllers/src/NftController.test.ts

Lines changed: 62 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
import type { Network } from '@ethersproject/providers';
2-
import type { AccountsControllerSelectedAccountChangeEvent } from '@metamask/accounts-controller';
2+
import type {
3+
AccountsControllerGetAccountAction,
4+
AccountsControllerGetSelectedAccountAction,
5+
AccountsControllerSelectedAccountChangeEvent,
6+
} from '@metamask/accounts-controller';
37
import type { ApprovalControllerMessenger } from '@metamask/approval-controller';
48
import { ApprovalController } from '@metamask/approval-controller';
59
import { ControllerMessenger } from '@metamask/base-controller';
@@ -146,6 +150,10 @@ jest.mock('uuid', () => {
146150
* @param args.mockNetworkClientConfigurationsByNetworkClientId - Used to construct
147151
* mock versions of network clients and ultimately mock the
148152
* `NetworkController:getNetworkClientById` action.
153+
* @param args.getAccount - Used to construct mock versions of the
154+
* `AccountsController:getAccount` action.
155+
* @param args.getSelectedAccount - Used to construct mock versions of the
156+
* `AccountsController:getSelectedAccount` action.
149157
* @param args.defaultSelectedAccount - The default selected account to use in
150158
* @returns A collection of test controllers and mocks.
151159
*/
@@ -157,6 +165,8 @@ function setupController({
157165
getERC721OwnerOf,
158166
getERC1155BalanceOf,
159167
getERC1155TokenURI,
168+
getAccount,
169+
getSelectedAccount,
160170
mockNetworkClientConfigurationsByNetworkClientId = {},
161171
defaultSelectedAccount = OWNER_ACCOUNT,
162172
}: {
@@ -185,6 +195,14 @@ function setupController({
185195
ReturnType<AssetsContractControllerGetERC1155TokenURIAction['handler']>,
186196
Parameters<AssetsContractControllerGetERC1155TokenURIAction['handler']>
187197
>;
198+
getAccount?: jest.Mock<
199+
ReturnType<AccountsControllerGetAccountAction['handler']>,
200+
Parameters<AccountsControllerGetAccountAction['handler']> | [null]
201+
>;
202+
getSelectedAccount?: jest.Mock<
203+
ReturnType<AccountsControllerGetSelectedAccountAction['handler']>,
204+
Parameters<AccountsControllerGetSelectedAccountAction['handler']>
205+
>;
188206
mockNetworkClientConfigurationsByNetworkClientId?: Record<
189207
NetworkClientId,
190208
NetworkClientConfiguration
@@ -209,19 +227,15 @@ function setupController({
209227
getNetworkClientById,
210228
);
211229

212-
const mockGetAccount = jest
213-
.fn()
214-
.mockReturnValue(defaultSelectedAccount ?? OWNER_ACCOUNT);
215-
230+
const mockGetAccount =
231+
getAccount ?? jest.fn().mockReturnValue(defaultSelectedAccount);
216232
messenger.registerActionHandler(
217233
'AccountsController:getAccount',
218234
mockGetAccount,
219235
);
220236

221-
const mockGetSelectedAccount = jest
222-
.fn()
223-
.mockReturnValue(defaultSelectedAccount ?? OWNER_ACCOUNT);
224-
237+
const mockGetSelectedAccount =
238+
getSelectedAccount ?? jest.fn().mockReturnValue(defaultSelectedAccount);
225239
messenger.registerActionHandler(
226240
'AccountsController:getSelectedAccount',
227241
mockGetSelectedAccount,
@@ -637,10 +651,13 @@ describe('NftController', () => {
637651
triggerPreferencesStateChange,
638652
triggerSelectedAccountChange,
639653
} = setupController({
654+
getAccount: jest.fn().mockReturnValue(OWNER_ACCOUNT),
655+
getERC721OwnerOf: jest.fn().mockResolvedValue(OWNER_ADDRESS),
640656
getERC721TokenURI: jest
641657
.fn()
642-
.mockImplementation(() => 'https://testtokenuri.com'),
643-
getERC721OwnerOf: jest.fn().mockImplementation(() => OWNER_ADDRESS),
658+
.mockResolvedValue('https://testtokenuri.com'),
659+
getERC721AssetName: jest.fn().mockResolvedValue('testERC721Name'),
660+
getERC721AssetSymbol: jest.fn().mockResolvedValue('testERC721Symbol'),
644661
});
645662
triggerSelectedAccountChange(OWNER_ACCOUNT);
646663
triggerPreferencesStateChange({
@@ -716,10 +733,13 @@ describe('NftController', () => {
716733
triggerPreferencesStateChange,
717734
triggerSelectedAccountChange,
718735
} = setupController({
736+
getAccount: jest.fn().mockReturnValue(OWNER_ACCOUNT),
737+
getERC721OwnerOf: jest.fn().mockResolvedValue(OWNER_ADDRESS),
719738
getERC721TokenURI: jest
720739
.fn()
721-
.mockImplementation(() => 'https://testtokenuri.com'),
722-
getERC721OwnerOf: jest.fn().mockImplementation(() => OWNER_ADDRESS),
740+
.mockResolvedValue('https://testtokenuri.com'),
741+
getERC721AssetName: jest.fn().mockResolvedValue('testERC721Name'),
742+
getERC721AssetSymbol: jest.fn().mockResolvedValue('testERC721Symbol'),
723743
});
724744
triggerSelectedAccountChange(OWNER_ACCOUNT);
725745
triggerPreferencesStateChange({
@@ -795,10 +815,13 @@ describe('NftController', () => {
795815
triggerPreferencesStateChange,
796816
triggerSelectedAccountChange,
797817
} = setupController({
818+
getAccount: jest.fn().mockReturnValue(OWNER_ACCOUNT),
819+
getERC721OwnerOf: jest.fn().mockResolvedValue(OWNER_ADDRESS),
798820
getERC721TokenURI: jest
799821
.fn()
800-
.mockImplementation(() => 'ipfs://testtokenuri.com'),
801-
getERC721OwnerOf: jest.fn().mockImplementation(() => OWNER_ADDRESS),
822+
.mockResolvedValue('https://testtokenuri.com'),
823+
getERC721AssetName: jest.fn().mockResolvedValue('testERC721Name'),
824+
getERC721AssetSymbol: jest.fn().mockResolvedValue('testERC721Symbol'),
802825
});
803826
triggerSelectedAccountChange(OWNER_ACCOUNT);
804827
triggerPreferencesStateChange({
@@ -874,10 +897,13 @@ describe('NftController', () => {
874897
triggerPreferencesStateChange,
875898
triggerSelectedAccountChange,
876899
} = setupController({
900+
getAccount: jest.fn().mockReturnValue(OWNER_ACCOUNT),
901+
getERC721OwnerOf: jest.fn().mockResolvedValue(OWNER_ADDRESS),
877902
getERC721TokenURI: jest
878903
.fn()
879-
.mockImplementation(() => 'ipfs://testtokenuri.com'),
880-
getERC721OwnerOf: jest.fn().mockImplementation(() => OWNER_ADDRESS),
904+
.mockResolvedValue('https://testtokenuri.com'),
905+
getERC721AssetName: jest.fn().mockResolvedValue('testERC721Name'),
906+
getERC721AssetSymbol: jest.fn().mockResolvedValue('testERC721Symbol'),
881907
});
882908

883909
triggerSelectedAccountChange(OWNER_ACCOUNT);
@@ -955,13 +981,17 @@ describe('NftController', () => {
955981
triggerPreferencesStateChange,
956982
triggerSelectedAccountChange,
957983
} = setupController({
984+
getAccount: jest.fn().mockReturnValue(OWNER_ACCOUNT),
985+
getERC721OwnerOf: jest
986+
.fn()
987+
.mockRejectedValue(new Error('Not an ERC721 contract')),
988+
getERC1155BalanceOf: jest.fn().mockResolvedValue(new BN(1)),
958989
getERC721TokenURI: jest
959990
.fn()
960991
.mockRejectedValue(new Error('Not an ERC721 contract')),
961992
getERC1155TokenURI: jest
962993
.fn()
963-
.mockImplementation(() => 'https://testtokenuri.com'),
964-
getERC1155BalanceOf: jest.fn().mockImplementation(() => new BN(1)),
994+
.mockResolvedValue('https://testtokenuri.com'),
965995
});
966996

967997
triggerSelectedAccountChange(OWNER_ACCOUNT);
@@ -1042,13 +1072,17 @@ describe('NftController', () => {
10421072

10431073
const { nftController, messenger, triggerPreferencesStateChange } =
10441074
setupController({
1075+
getAccount: jest.fn().mockReturnValue(OWNER_ACCOUNT),
1076+
getERC721OwnerOf: jest
1077+
.fn()
1078+
.mockRejectedValue(new Error('Not an ERC721 contract')),
1079+
getERC1155BalanceOf: jest.fn().mockResolvedValue(new BN(1)),
10451080
getERC721TokenURI: jest
10461081
.fn()
10471082
.mockRejectedValue(new Error('Not an ERC721 contract')),
10481083
getERC1155TokenURI: jest
10491084
.fn()
1050-
.mockImplementation(() => 'https://testtokenuri.com'),
1051-
getERC1155BalanceOf: jest.fn().mockImplementation(() => new BN(1)),
1085+
.mockResolvedValue('https://testtokenuri.com'),
10521086
});
10531087
triggerPreferencesStateChange({
10541088
...getDefaultPreferencesState(),
@@ -1134,18 +1168,12 @@ describe('NftController', () => {
11341168
triggerPreferencesStateChange,
11351169
triggerSelectedAccountChange,
11361170
} = setupController({
1137-
getERC721OwnerOf: jest
1138-
.fn()
1139-
.mockImplementation(() => SECOND_OWNER_ADDRESS),
1171+
getERC721OwnerOf: jest.fn().mockResolvedValue(SECOND_OWNER_ADDRESS),
11401172
getERC721TokenURI: jest
11411173
.fn()
1142-
.mockImplementation(() => 'https://testtokenuri.com'),
1143-
getERC721AssetName: jest
1144-
.fn()
1145-
.mockImplementation(() => 'testERC721Name'),
1146-
getERC721AssetSymbol: jest
1147-
.fn()
1148-
.mockImplementation(() => 'testERC721Symbol'),
1174+
.mockResolvedValue('https://testtokenuri.com'),
1175+
getERC721AssetName: jest.fn().mockResolvedValue('testERC721Name'),
1176+
getERC721AssetSymbol: jest.fn().mockResolvedValue('testERC721Symbol'),
11491177
});
11501178

11511179
const requestId = 'approval-request-id-1';
@@ -1241,13 +1269,9 @@ describe('NftController', () => {
12411269
getERC721OwnerOf: jest.fn().mockImplementation(() => OWNER_ADDRESS),
12421270
getERC721TokenURI: jest
12431271
.fn()
1244-
.mockImplementation(() => 'https://testtokenuri.com'),
1245-
getERC721AssetName: jest
1246-
.fn()
1247-
.mockImplementation(() => 'testERC721Name'),
1248-
getERC721AssetSymbol: jest
1249-
.fn()
1250-
.mockImplementation(() => 'testERC721Symbol'),
1272+
.mockResolvedValue('https://testtokenuri.com'),
1273+
getERC721AssetName: jest.fn().mockResolvedValue('testERC721Name'),
1274+
getERC721AssetSymbol: jest.fn().mockResolvedValue('testERC721Symbol'),
12511275
});
12521276

12531277
const requestId = 'approval-request-id-1';

0 commit comments

Comments
 (0)