Skip to content

Commit 9d30de1

Browse files
committed
stash
1 parent e1a71e5 commit 9d30de1

File tree

6 files changed

+158
-176
lines changed

6 files changed

+158
-176
lines changed

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

Lines changed: 69 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,20 @@ import {
99
} from '@metamask/controller-utils';
1010
import HttpProvider from '@metamask/ethjs-provider-http';
1111
import type {
12-
NetworkClientId,
13-
NetworkControllerMessenger,
1412
Provider,
13+
NetworkControllerEvents,
14+
NetworkControllerActions,
1515
} from '@metamask/network-controller';
1616
import {
1717
NetworkController,
1818
NetworkClientType,
1919
} from '@metamask/network-controller';
20-
import {
21-
getDefaultPreferencesState,
22-
type PreferencesState,
23-
} from '@metamask/preferences-controller';
20+
import { getDefaultPreferencesState } from '@metamask/preferences-controller';
2421
import assert from 'assert';
2522

2623
import { mockNetwork } from '../../../tests/mock-network';
2724
import { buildInfuraNetworkClientConfiguration } from '../../network-controller/tests/helpers';
25+
import type { AllowedActions, AllowedEvents } from './AssetsContractController';
2826
import {
2927
AssetsContractController,
3028
MISSING_PROVIDER_ERROR,
@@ -65,22 +63,25 @@ async function setupAssetContractControllers({
6563
} = {}) {
6664
const networkClientConfiguration = {
6765
type: NetworkClientType.Infura,
68-
network: 'mainnet',
66+
network: NetworkType.mainnet,
6967
infuraProjectId,
7068
chainId: BUILT_IN_NETWORKS.mainnet.chainId,
7169
ticker: BUILT_IN_NETWORKS.mainnet.ticker,
7270
} as const;
7371
let provider: Provider;
7472

75-
const messenger: NetworkControllerMessenger =
76-
new ControllerMessenger().getRestricted({
77-
name: 'NetworkController',
78-
allowedActions: [],
79-
allowedEvents: [],
80-
});
73+
const controllerMessenger = new ControllerMessenger<
74+
NetworkControllerActions | AllowedActions,
75+
NetworkControllerEvents | AllowedEvents
76+
>();
77+
const networkMessenger = controllerMessenger.getRestricted({
78+
name: 'NetworkController',
79+
allowedActions: [],
80+
allowedEvents: [],
81+
});
8182
const networkController = new NetworkController({
8283
infuraProjectId,
83-
messenger,
84+
messenger: networkMessenger,
8485
trackMetaMetricsEvent: jest.fn(),
8586
});
8687
if (useNetworkControllerProvider) {
@@ -94,41 +95,27 @@ async function setupAssetContractControllers({
9495
);
9596
}
9697

97-
const getNetworkClientById = useNetworkControllerProvider
98-
? networkController.getNetworkClientById.bind(networkController)
99-
: (networkClientId: NetworkClientId) =>
100-
({
101-
...networkController.getNetworkClientById(networkClientId),
102-
provider,
103-
// TODO: Replace `any` with type
104-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
105-
} as any);
106-
107-
const preferencesStateChangeListeners: ((state: PreferencesState) => void)[] =
108-
[];
98+
const assetsContractMessenger = controllerMessenger.getRestricted({
99+
name: 'AssetsContractController',
100+
allowedActions: ['NetworkController:getNetworkClientById'],
101+
allowedEvents: [
102+
'PreferencesController:stateChange',
103+
'NetworkController:networkDidChange',
104+
],
105+
});
109106
const assetsContract = new AssetsContractController({
110107
chainId: ChainId.mainnet,
111-
onPreferencesStateChange: (listener) => {
112-
preferencesStateChangeListeners.push(listener);
113-
},
114-
onNetworkDidChange: (listener) =>
115-
messenger.subscribe('NetworkController:networkDidChange', listener),
116-
getNetworkClientById,
108+
messenger: assetsContractMessenger,
117109
...options,
118110
});
119111

120112
return {
121-
messenger,
113+
messenger: controllerMessenger,
122114
network: networkController,
123115
assetsContract,
124116
provider,
125117
networkClientConfiguration,
126118
infuraProjectId,
127-
triggerPreferencesStateChange: (state: PreferencesState) => {
128-
for (const listener of preferencesStateChangeListeners) {
129-
listener(state);
130-
}
131-
},
132119
};
133120
}
134121

@@ -170,32 +157,41 @@ export { setupAssetContractControllers, mockNetworkWithDefaultChainId };
170157
describe('AssetsContractController', () => {
171158
it('should set default config', async () => {
172159
const { assetsContract, messenger } = await setupAssetContractControllers();
173-
expect(assetsContract.config).toStrictEqual({
160+
expect({
161+
chainId: assetsContract.chainId,
162+
ipfsGateway: assetsContract.ipfsGateway,
163+
}).toStrictEqual({
174164
chainId: SupportedTokenDetectionNetworks.mainnet,
175165
ipfsGateway: IPFS_DEFAULT_GATEWAY_URL,
176-
provider: undefined,
177166
});
178167
messenger.clearEventSubscriptions('NetworkController:networkDidChange');
179168
});
180169

181170
it('should update the ipfsGateWay config value when this value is changed in the preferences controller', async () => {
182-
const { assetsContract, messenger, triggerPreferencesStateChange } =
183-
await setupAssetContractControllers();
184-
expect(assetsContract.config).toStrictEqual({
171+
const { assetsContract, messenger } = await setupAssetContractControllers();
172+
expect({
173+
chainId: assetsContract.chainId,
174+
ipfsGateway: assetsContract.ipfsGateway,
175+
}).toStrictEqual({
185176
chainId: SupportedTokenDetectionNetworks.mainnet,
186177
ipfsGateway: IPFS_DEFAULT_GATEWAY_URL,
187-
provider: undefined,
188178
});
189179

190-
triggerPreferencesStateChange({
191-
...getDefaultPreferencesState(),
192-
ipfsGateway: 'newIPFSGateWay',
193-
});
180+
messenger.publish(
181+
'PreferencesController:stateChange',
182+
{
183+
...getDefaultPreferencesState(),
184+
ipfsGateway: 'newIPFSGateWay',
185+
},
186+
[],
187+
);
194188

195-
expect(assetsContract.config).toStrictEqual({
189+
expect({
190+
chainId: assetsContract.chainId,
191+
ipfsGateway: assetsContract.ipfsGateway,
192+
}).toStrictEqual({
196193
ipfsGateway: 'newIPFSGateWay',
197194
chainId: SupportedTokenDetectionNetworks.mainnet,
198-
provider: undefined,
199195
});
200196

201197
messenger.clearEventSubscriptions('NetworkController:networkDidChange');
@@ -211,7 +207,7 @@ describe('AssetsContractController', () => {
211207

212208
it('should throw missing provider error when getting ERC-20 token balance when missing provider', async () => {
213209
const { assetsContract, messenger } = await setupAssetContractControllers();
214-
assetsContract.configure({ provider: undefined });
210+
assetsContract.provider = undefined;
215211
await expect(
216212
assetsContract.getERC20BalanceOf(
217213
ERC20_UNI_ADDRESS,
@@ -223,7 +219,7 @@ describe('AssetsContractController', () => {
223219

224220
it('should throw missing provider error when getting ERC-20 token decimal when missing provider', async () => {
225221
const { assetsContract, messenger } = await setupAssetContractControllers();
226-
assetsContract.configure({ provider: undefined });
222+
assetsContract.provider = undefined;
227223
await expect(
228224
assetsContract.getERC20TokenDecimals(ERC20_UNI_ADDRESS),
229225
).rejects.toThrow(MISSING_PROVIDER_ERROR);
@@ -233,7 +229,7 @@ describe('AssetsContractController', () => {
233229
it('should get balance of ERC-20 token contract correctly', async () => {
234230
const { assetsContract, messenger, provider, networkClientConfiguration } =
235231
await setupAssetContractControllers();
236-
assetsContract.configure({ provider });
232+
assetsContract.provider = provider;
237233
mockNetworkWithDefaultChainId({
238234
networkClientConfiguration,
239235
mocks: [
@@ -287,7 +283,7 @@ describe('AssetsContractController', () => {
287283
it('should get ERC-721 NFT tokenId correctly', async () => {
288284
const { assetsContract, messenger, provider, networkClientConfiguration } =
289285
await setupAssetContractControllers();
290-
assetsContract.configure({ provider });
286+
assetsContract.provider = provider;
291287
mockNetworkWithDefaultChainId({
292288
networkClientConfiguration,
293289
mocks: [
@@ -320,7 +316,7 @@ describe('AssetsContractController', () => {
320316

321317
it('should throw missing provider error when getting ERC-721 token standard and details when missing provider', async () => {
322318
const { assetsContract, messenger } = await setupAssetContractControllers();
323-
assetsContract.configure({ provider: undefined });
319+
assetsContract.provider = undefined;
324320
await expect(
325321
assetsContract.getTokenStandardAndDetails(
326322
ERC20_UNI_ADDRESS,
@@ -333,7 +329,7 @@ describe('AssetsContractController', () => {
333329
it('should throw contract standard error when getting ERC-20 token standard and details when provided with invalid ERC-20 address', async () => {
334330
const { assetsContract, messenger, provider } =
335331
await setupAssetContractControllers();
336-
assetsContract.configure({ provider });
332+
assetsContract.provider = provider;
337333
const error = 'Unable to determine contract standard';
338334
await expect(
339335
assetsContract.getTokenStandardAndDetails(
@@ -347,7 +343,7 @@ describe('AssetsContractController', () => {
347343
it('should get ERC-721 token standard and details', async () => {
348344
const { assetsContract, messenger, provider, networkClientConfiguration } =
349345
await setupAssetContractControllers();
350-
assetsContract.configure({ provider });
346+
assetsContract.provider = provider;
351347
mockNetworkWithDefaultChainId({
352348
networkClientConfiguration,
353349
mocks: [
@@ -412,7 +408,7 @@ describe('AssetsContractController', () => {
412408
it('should get ERC-1155 token standard and details', async () => {
413409
const { assetsContract, messenger, provider, networkClientConfiguration } =
414410
await setupAssetContractControllers();
415-
assetsContract.configure({ provider });
411+
assetsContract.provider = provider;
416412
mockNetworkWithDefaultChainId({
417413
networkClientConfiguration,
418414
mocks: [
@@ -497,7 +493,7 @@ describe('AssetsContractController', () => {
497493
it('should get ERC-20 token standard and details', async () => {
498494
const { assetsContract, messenger, provider, networkClientConfiguration } =
499495
await setupAssetContractControllers();
500-
assetsContract.configure({ provider });
496+
assetsContract.provider = provider;
501497
mockNetworkWithDefaultChainId({
502498
networkClientConfiguration,
503499
mocks: [
@@ -594,7 +590,7 @@ describe('AssetsContractController', () => {
594590
it('should get ERC-721 NFT tokenURI correctly', async () => {
595591
const { assetsContract, messenger, provider, networkClientConfiguration } =
596592
await setupAssetContractControllers();
597-
assetsContract.configure({ provider });
593+
assetsContract.provider = provider;
598594
mockNetworkWithDefaultChainId({
599595
networkClientConfiguration,
600596
mocks: [
@@ -643,7 +639,7 @@ describe('AssetsContractController', () => {
643639
it('should not throw an error when address given does not support NFT Metadata interface', async () => {
644640
const { assetsContract, messenger, provider, networkClientConfiguration } =
645641
await setupAssetContractControllers();
646-
assetsContract.configure({ provider });
642+
assetsContract.provider = provider;
647643
const errorLogSpy = jest
648644
.spyOn(console, 'error')
649645
.mockImplementationOnce(() => {
@@ -701,7 +697,7 @@ describe('AssetsContractController', () => {
701697
it('should get ERC-721 NFT name', async () => {
702698
const { assetsContract, messenger, provider, networkClientConfiguration } =
703699
await setupAssetContractControllers();
704-
assetsContract.configure({ provider });
700+
assetsContract.provider = provider;
705701
mockNetworkWithDefaultChainId({
706702
networkClientConfiguration,
707703
mocks: [
@@ -731,7 +727,7 @@ describe('AssetsContractController', () => {
731727
it('should get ERC-721 NFT symbol', async () => {
732728
const { assetsContract, messenger, provider, networkClientConfiguration } =
733729
await setupAssetContractControllers();
734-
assetsContract.configure({ provider });
730+
assetsContract.provider = provider;
735731
mockNetworkWithDefaultChainId({
736732
networkClientConfiguration,
737733
mocks: [
@@ -771,7 +767,7 @@ describe('AssetsContractController', () => {
771767
it('should get ERC-20 token decimals', async () => {
772768
const { assetsContract, messenger, provider, networkClientConfiguration } =
773769
await setupAssetContractControllers();
774-
assetsContract.configure({ provider });
770+
assetsContract.provider = provider;
775771
mockNetworkWithDefaultChainId({
776772
networkClientConfiguration,
777773
mocks: [
@@ -803,7 +799,7 @@ describe('AssetsContractController', () => {
803799
it('should get ERC-20 token name', async () => {
804800
const { assetsContract, messenger, provider, networkClientConfiguration } =
805801
await setupAssetContractControllers();
806-
assetsContract.configure({ provider });
802+
assetsContract.provider = provider;
807803
mockNetworkWithDefaultChainId({
808804
networkClientConfiguration,
809805
mocks: [
@@ -835,7 +831,7 @@ describe('AssetsContractController', () => {
835831
it('should get ERC-721 NFT ownership', async () => {
836832
const { assetsContract, messenger, provider, networkClientConfiguration } =
837833
await setupAssetContractControllers();
838-
assetsContract.configure({ provider });
834+
assetsContract.provider = provider;
839835
mockNetworkWithDefaultChainId({
840836
networkClientConfiguration,
841837
mocks: [
@@ -876,7 +872,7 @@ describe('AssetsContractController', () => {
876872
it('should get balance of ERC-20 token in a single call on network with token detection support', async () => {
877873
const { assetsContract, messenger, provider, networkClientConfiguration } =
878874
await setupAssetContractControllers();
879-
assetsContract.configure({ provider });
875+
assetsContract.provider = provider;
880876
mockNetworkWithDefaultChainId({
881877
networkClientConfiguration,
882878
mocks: [
@@ -982,7 +978,7 @@ describe('AssetsContractController', () => {
982978
useNetworkControllerProvider: true,
983979
infuraProjectId,
984980
});
985-
assetsContract.configure({ provider });
981+
assetsContract.provider = provider;
986982

987983
const balancesOnMainnet = await assetsContract.getBalancesInSingleCall(
988984
ERC20_SAI_ADDRESS,
@@ -1011,7 +1007,7 @@ describe('AssetsContractController', () => {
10111007
provider,
10121008
networkClientConfiguration,
10131009
} = await setupAssetContractControllers();
1014-
assetsContract.configure({ provider });
1010+
assetsContract.provider = provider;
10151011
mockNetworkWithDefaultChainId({
10161012
networkClientConfiguration,
10171013
mocks: [
@@ -1082,7 +1078,7 @@ describe('AssetsContractController', () => {
10821078

10831079
it('should throw missing provider error when transferring single ERC-1155 when missing provider', async () => {
10841080
const { assetsContract, messenger } = await setupAssetContractControllers();
1085-
assetsContract.configure({ provider: undefined });
1081+
assetsContract.provider = undefined;
10861082
await expect(
10871083
assetsContract.transferSingleERC1155(
10881084
ERC1155_ADDRESS,
@@ -1098,7 +1094,7 @@ describe('AssetsContractController', () => {
10981094
it('should throw when ERC1155 function transferSingle is not defined', async () => {
10991095
const { assetsContract, messenger, provider, networkClientConfiguration } =
11001096
await setupAssetContractControllers();
1101-
assetsContract.configure({ provider });
1097+
assetsContract.provider = provider;
11021098
mockNetworkWithDefaultChainId({
11031099
networkClientConfiguration,
11041100
mocks: [
@@ -1135,7 +1131,7 @@ describe('AssetsContractController', () => {
11351131
it('should get the balance of a ERC-1155 NFT for a given address', async () => {
11361132
const { assetsContract, messenger, provider, networkClientConfiguration } =
11371133
await setupAssetContractControllers();
1138-
assetsContract.configure({ provider });
1134+
assetsContract.provider = provider;
11391135
mockNetworkWithDefaultChainId({
11401136
networkClientConfiguration,
11411137
mocks: [
@@ -1181,7 +1177,7 @@ describe('AssetsContractController', () => {
11811177
it('should get the URI of a ERC-1155 NFT', async () => {
11821178
const { assetsContract, messenger, provider, networkClientConfiguration } =
11831179
await setupAssetContractControllers();
1184-
assetsContract.configure({ provider });
1180+
assetsContract.provider = provider;
11851181
mockNetworkWithDefaultChainId({
11861182
networkClientConfiguration,
11871183
mocks: [

0 commit comments

Comments
 (0)