Skip to content

Commit b758d93

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

File tree

1 file changed

+64
-38
lines changed

1 file changed

+64
-38
lines changed

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

Lines changed: 64 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,7 +150,13 @@ 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
158+
* @param args.addApprovalRequest - Used to construct mock versions of the
159+
* `ApprovalController:addRequest` action.
150160
* @returns A collection of test controllers and mocks.
151161
*/
152162
function setupController({
@@ -157,6 +167,8 @@ function setupController({
157167
getERC721OwnerOf,
158168
getERC1155BalanceOf,
159169
getERC1155TokenURI,
170+
getAccount,
171+
getSelectedAccount,
160172
mockNetworkClientConfigurationsByNetworkClientId = {},
161173
defaultSelectedAccount = OWNER_ACCOUNT,
162174
}: {
@@ -185,6 +197,14 @@ function setupController({
185197
ReturnType<AssetsContractControllerGetERC1155TokenURIAction['handler']>,
186198
Parameters<AssetsContractControllerGetERC1155TokenURIAction['handler']>
187199
>;
200+
getAccount?: jest.Mock<
201+
ReturnType<AccountsControllerGetAccountAction['handler']>,
202+
Parameters<AccountsControllerGetAccountAction['handler']> | [null]
203+
>;
204+
getSelectedAccount?: jest.Mock<
205+
ReturnType<AccountsControllerGetSelectedAccountAction['handler']>,
206+
Parameters<AccountsControllerGetSelectedAccountAction['handler']>
207+
>;
188208
mockNetworkClientConfigurationsByNetworkClientId?: Record<
189209
NetworkClientId,
190210
NetworkClientConfiguration
@@ -209,19 +229,15 @@ function setupController({
209229
getNetworkClientById,
210230
);
211231

212-
const mockGetAccount = jest
213-
.fn()
214-
.mockReturnValue(defaultSelectedAccount ?? OWNER_ACCOUNT);
215-
232+
const mockGetAccount =
233+
getAccount ?? jest.fn().mockReturnValue(defaultSelectedAccount);
216234
messenger.registerActionHandler(
217235
'AccountsController:getAccount',
218236
mockGetAccount,
219237
);
220238

221-
const mockGetSelectedAccount = jest
222-
.fn()
223-
.mockReturnValue(defaultSelectedAccount ?? OWNER_ACCOUNT);
224-
239+
const mockGetSelectedAccount =
240+
getSelectedAccount ?? jest.fn().mockReturnValue(defaultSelectedAccount);
225241
messenger.registerActionHandler(
226242
'AccountsController:getSelectedAccount',
227243
mockGetSelectedAccount,
@@ -637,10 +653,13 @@ describe('NftController', () => {
637653
triggerPreferencesStateChange,
638654
triggerSelectedAccountChange,
639655
} = setupController({
656+
getAccount: jest.fn().mockReturnValue(OWNER_ACCOUNT),
657+
getERC721OwnerOf: jest.fn().mockResolvedValue(OWNER_ADDRESS),
640658
getERC721TokenURI: jest
641659
.fn()
642-
.mockImplementation(() => 'https://testtokenuri.com'),
643-
getERC721OwnerOf: jest.fn().mockImplementation(() => OWNER_ADDRESS),
660+
.mockResolvedValue('https://testtokenuri.com'),
661+
getERC721AssetName: jest.fn().mockResolvedValue('testERC721Name'),
662+
getERC721AssetSymbol: jest.fn().mockResolvedValue('testERC721Symbol'),
644663
});
645664
triggerSelectedAccountChange(OWNER_ACCOUNT);
646665
triggerPreferencesStateChange({
@@ -716,10 +735,13 @@ describe('NftController', () => {
716735
triggerPreferencesStateChange,
717736
triggerSelectedAccountChange,
718737
} = setupController({
738+
getAccount: jest.fn().mockReturnValue(OWNER_ACCOUNT),
739+
getERC721OwnerOf: jest.fn().mockResolvedValue(OWNER_ADDRESS),
719740
getERC721TokenURI: jest
720741
.fn()
721-
.mockImplementation(() => 'https://testtokenuri.com'),
722-
getERC721OwnerOf: jest.fn().mockImplementation(() => OWNER_ADDRESS),
742+
.mockResolvedValue('https://testtokenuri.com'),
743+
getERC721AssetName: jest.fn().mockResolvedValue('testERC721Name'),
744+
getERC721AssetSymbol: jest.fn().mockResolvedValue('testERC721Symbol'),
723745
});
724746
triggerSelectedAccountChange(OWNER_ACCOUNT);
725747
triggerPreferencesStateChange({
@@ -795,10 +817,13 @@ describe('NftController', () => {
795817
triggerPreferencesStateChange,
796818
triggerSelectedAccountChange,
797819
} = setupController({
820+
getAccount: jest.fn().mockReturnValue(OWNER_ACCOUNT),
821+
getERC721OwnerOf: jest.fn().mockResolvedValue(OWNER_ADDRESS),
798822
getERC721TokenURI: jest
799823
.fn()
800-
.mockImplementation(() => 'ipfs://testtokenuri.com'),
801-
getERC721OwnerOf: jest.fn().mockImplementation(() => OWNER_ADDRESS),
824+
.mockResolvedValue('https://testtokenuri.com'),
825+
getERC721AssetName: jest.fn().mockResolvedValue('testERC721Name'),
826+
getERC721AssetSymbol: jest.fn().mockResolvedValue('testERC721Symbol'),
802827
});
803828
triggerSelectedAccountChange(OWNER_ACCOUNT);
804829
triggerPreferencesStateChange({
@@ -874,10 +899,13 @@ describe('NftController', () => {
874899
triggerPreferencesStateChange,
875900
triggerSelectedAccountChange,
876901
} = setupController({
902+
getAccount: jest.fn().mockReturnValue(OWNER_ACCOUNT),
903+
getERC721OwnerOf: jest.fn().mockResolvedValue(OWNER_ADDRESS),
877904
getERC721TokenURI: jest
878905
.fn()
879-
.mockImplementation(() => 'ipfs://testtokenuri.com'),
880-
getERC721OwnerOf: jest.fn().mockImplementation(() => OWNER_ADDRESS),
906+
.mockResolvedValue('https://testtokenuri.com'),
907+
getERC721AssetName: jest.fn().mockResolvedValue('testERC721Name'),
908+
getERC721AssetSymbol: jest.fn().mockResolvedValue('testERC721Symbol'),
881909
});
882910

883911
triggerSelectedAccountChange(OWNER_ACCOUNT);
@@ -955,13 +983,17 @@ describe('NftController', () => {
955983
triggerPreferencesStateChange,
956984
triggerSelectedAccountChange,
957985
} = setupController({
986+
getAccount: jest.fn().mockReturnValue(OWNER_ACCOUNT),
987+
getERC721OwnerOf: jest
988+
.fn()
989+
.mockRejectedValue(new Error('Not an ERC721 contract')),
990+
getERC1155BalanceOf: jest.fn().mockResolvedValue(new BN(1)),
958991
getERC721TokenURI: jest
959992
.fn()
960993
.mockRejectedValue(new Error('Not an ERC721 contract')),
961994
getERC1155TokenURI: jest
962995
.fn()
963-
.mockImplementation(() => 'https://testtokenuri.com'),
964-
getERC1155BalanceOf: jest.fn().mockImplementation(() => new BN(1)),
996+
.mockResolvedValue('https://testtokenuri.com'),
965997
});
966998

967999
triggerSelectedAccountChange(OWNER_ACCOUNT);
@@ -1042,13 +1074,17 @@ describe('NftController', () => {
10421074

10431075
const { nftController, messenger, triggerPreferencesStateChange } =
10441076
setupController({
1077+
getAccount: jest.fn().mockReturnValue(OWNER_ACCOUNT),
1078+
getERC721OwnerOf: jest
1079+
.fn()
1080+
.mockRejectedValue(new Error('Not an ERC721 contract')),
1081+
getERC1155BalanceOf: jest.fn().mockResolvedValue(new BN(1)),
10451082
getERC721TokenURI: jest
10461083
.fn()
10471084
.mockRejectedValue(new Error('Not an ERC721 contract')),
10481085
getERC1155TokenURI: jest
10491086
.fn()
1050-
.mockImplementation(() => 'https://testtokenuri.com'),
1051-
getERC1155BalanceOf: jest.fn().mockImplementation(() => new BN(1)),
1087+
.mockResolvedValue('https://testtokenuri.com'),
10521088
});
10531089
triggerPreferencesStateChange({
10541090
...getDefaultPreferencesState(),
@@ -1134,18 +1170,12 @@ describe('NftController', () => {
11341170
triggerPreferencesStateChange,
11351171
triggerSelectedAccountChange,
11361172
} = setupController({
1137-
getERC721OwnerOf: jest
1138-
.fn()
1139-
.mockImplementation(() => SECOND_OWNER_ADDRESS),
1173+
getERC721OwnerOf: jest.fn().mockResolvedValue(SECOND_OWNER_ADDRESS),
11401174
getERC721TokenURI: jest
11411175
.fn()
1142-
.mockImplementation(() => 'https://testtokenuri.com'),
1143-
getERC721AssetName: jest
1144-
.fn()
1145-
.mockImplementation(() => 'testERC721Name'),
1146-
getERC721AssetSymbol: jest
1147-
.fn()
1148-
.mockImplementation(() => 'testERC721Symbol'),
1176+
.mockResolvedValue('https://testtokenuri.com'),
1177+
getERC721AssetName: jest.fn().mockResolvedValue('testERC721Name'),
1178+
getERC721AssetSymbol: jest.fn().mockResolvedValue('testERC721Symbol'),
11491179
});
11501180

11511181
const requestId = 'approval-request-id-1';
@@ -1241,13 +1271,9 @@ describe('NftController', () => {
12411271
getERC721OwnerOf: jest.fn().mockImplementation(() => OWNER_ADDRESS),
12421272
getERC721TokenURI: jest
12431273
.fn()
1244-
.mockImplementation(() => 'https://testtokenuri.com'),
1245-
getERC721AssetName: jest
1246-
.fn()
1247-
.mockImplementation(() => 'testERC721Name'),
1248-
getERC721AssetSymbol: jest
1249-
.fn()
1250-
.mockImplementation(() => 'testERC721Symbol'),
1274+
.mockResolvedValue('https://testtokenuri.com'),
1275+
getERC721AssetName: jest.fn().mockResolvedValue('testERC721Name'),
1276+
getERC721AssetSymbol: jest.fn().mockResolvedValue('testERC721Symbol'),
12511277
});
12521278

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

0 commit comments

Comments
 (0)