Skip to content

Commit

Permalink
stash
Browse files Browse the repository at this point in the history
  • Loading branch information
MajorLift committed Jun 10, 2024
1 parent e1a71e5 commit ad69fb3
Show file tree
Hide file tree
Showing 5 changed files with 174 additions and 176 deletions.
158 changes: 85 additions & 73 deletions packages/assets-controllers/src/AssetsContractController.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,22 +9,24 @@ import {
} from '@metamask/controller-utils';
import HttpProvider from '@metamask/ethjs-provider-http';
import type {
NetworkClientId,
NetworkControllerMessenger,
Provider,
NetworkClientId,
NetworkControllerEvents,
NetworkControllerActions,
} from '@metamask/network-controller';
import {
NetworkController,
NetworkClientType,
} from '@metamask/network-controller';
import {
getDefaultPreferencesState,
type PreferencesState,
} from '@metamask/preferences-controller';
import { getDefaultPreferencesState } from '@metamask/preferences-controller';
import assert from 'assert';

import { mockNetwork } from '../../../tests/mock-network';
import { buildInfuraNetworkClientConfiguration } from '../../network-controller/tests/helpers';
import type {
AllowedActions as AssetsContractAllowedActions,
AllowedEvents as AssetsContractAllowedEvents

Check failure on line 28 in packages/assets-controllers/src/AssetsContractController.test.ts

View workflow job for this annotation

GitHub Actions / Lint, build, and test / Lint (20.x)

Insert `,`
} from './AssetsContractController';
import {
AssetsContractController,
MISSING_PROVIDER_ERROR,
Expand Down Expand Up @@ -65,70 +67,71 @@ async function setupAssetContractControllers({
} = {}) {
const networkClientConfiguration = {
type: NetworkClientType.Infura,
network: 'mainnet',
network: NetworkType.mainnet,
infuraProjectId,
chainId: BUILT_IN_NETWORKS.mainnet.chainId,
ticker: BUILT_IN_NETWORKS.mainnet.ticker,
} as const;
let provider: Provider;

const messenger: NetworkControllerMessenger =
new ControllerMessenger().getRestricted({
name: 'NetworkController',
allowedActions: [],
allowedEvents: [],
});
const controllerMessenger = new ControllerMessenger<
NetworkControllerActions | AssetsContractAllowedActions,
NetworkControllerEvents | AssetsContractAllowedEvents
>();
const networkMessenger = controllerMessenger.getRestricted({
name: 'NetworkController',
allowedActions: [],
allowedEvents: [],
});
const networkController = new NetworkController({
infuraProjectId,
messenger,
messenger: networkMessenger,
trackMetaMetricsEvent: jest.fn(),
});
if (useNetworkControllerProvider) {
await networkController.initializeProvider();
const selectedNetworkClient = networkController.getSelectedNetworkClient();
assert(selectedNetworkClient, 'No network is selected');
provider = selectedNetworkClient.provider;

controllerMessenger.unregisterActionHandler('NetworkController:getNetworkClientById');

Check failure on line 97 in packages/assets-controllers/src/AssetsContractController.test.ts

View workflow job for this annotation

GitHub Actions / Lint, build, and test / Lint (20.x)

Replace `'NetworkController:getNetworkClientById'` with `⏎······'NetworkController:getNetworkClientById',⏎····`
controllerMessenger.registerActionHandler(
'NetworkController:getNetworkClientById',

Check failure on line 99 in packages/assets-controllers/src/AssetsContractController.test.ts

View workflow job for this annotation

GitHub Actions / Lint, build, and test / Lint (20.x)

Delete `·`
// @ts-expect-error TODO: remove this annotation once the `Eip1193Provider` class is released
(networkClientId: NetworkClientId) => {
return {
...networkController.getNetworkClientById(networkClientId),
provider,
}

Check failure on line 105 in packages/assets-controllers/src/AssetsContractController.test.ts

View workflow job for this annotation

GitHub Actions / Lint, build, and test / Lint (20.x)

Insert `;`
}

Check failure on line 106 in packages/assets-controllers/src/AssetsContractController.test.ts

View workflow job for this annotation

GitHub Actions / Lint, build, and test / Lint (20.x)

Insert `,`
);
} else {
provider = new HttpProvider(
`https://mainnet.infura.io/v3/${infuraProjectId}`,
);
}

const getNetworkClientById = useNetworkControllerProvider
? networkController.getNetworkClientById.bind(networkController)
: (networkClientId: NetworkClientId) =>
({
...networkController.getNetworkClientById(networkClientId),
provider,
// TODO: Replace `any` with type
// eslint-disable-next-line @typescript-eslint/no-explicit-any
} as any);

const preferencesStateChangeListeners: ((state: PreferencesState) => void)[] =
[];
const assetsContractMessenger = controllerMessenger.getRestricted({
name: 'AssetsContractController',
allowedActions: ['NetworkController:getNetworkClientById'],
allowedEvents: [
'PreferencesController:stateChange',
'NetworkController:networkDidChange',
],
});
const assetsContract = new AssetsContractController({
chainId: ChainId.mainnet,
onPreferencesStateChange: (listener) => {
preferencesStateChangeListeners.push(listener);
},
onNetworkDidChange: (listener) =>
messenger.subscribe('NetworkController:networkDidChange', listener),
getNetworkClientById,
messenger: assetsContractMessenger,
...options,
});

return {
messenger,
messenger: controllerMessenger,
network: networkController,
assetsContract,
provider,
networkClientConfiguration,
infuraProjectId,
triggerPreferencesStateChange: (state: PreferencesState) => {
for (const listener of preferencesStateChangeListeners) {
listener(state);
}
},
};
}

Expand Down Expand Up @@ -170,32 +173,41 @@ export { setupAssetContractControllers, mockNetworkWithDefaultChainId };
describe('AssetsContractController', () => {
it('should set default config', async () => {
const { assetsContract, messenger } = await setupAssetContractControllers();
expect(assetsContract.config).toStrictEqual({
expect({
chainId: assetsContract.chainId,
ipfsGateway: assetsContract.ipfsGateway,
}).toStrictEqual({
chainId: SupportedTokenDetectionNetworks.mainnet,
ipfsGateway: IPFS_DEFAULT_GATEWAY_URL,
provider: undefined,
});
messenger.clearEventSubscriptions('NetworkController:networkDidChange');
});

it('should update the ipfsGateWay config value when this value is changed in the preferences controller', async () => {
const { assetsContract, messenger, triggerPreferencesStateChange } =
await setupAssetContractControllers();
expect(assetsContract.config).toStrictEqual({
const { assetsContract, messenger } = await setupAssetContractControllers();
expect({
chainId: assetsContract.chainId,
ipfsGateway: assetsContract.ipfsGateway,
}).toStrictEqual({
chainId: SupportedTokenDetectionNetworks.mainnet,
ipfsGateway: IPFS_DEFAULT_GATEWAY_URL,
provider: undefined,
});

triggerPreferencesStateChange({
...getDefaultPreferencesState(),
ipfsGateway: 'newIPFSGateWay',
});
messenger.publish(
'PreferencesController:stateChange',
{
...getDefaultPreferencesState(),
ipfsGateway: 'newIPFSGateWay',
},
[],
);

expect(assetsContract.config).toStrictEqual({
expect({
chainId: assetsContract.chainId,
ipfsGateway: assetsContract.ipfsGateway,
}).toStrictEqual({
ipfsGateway: 'newIPFSGateWay',
chainId: SupportedTokenDetectionNetworks.mainnet,
provider: undefined,
});

messenger.clearEventSubscriptions('NetworkController:networkDidChange');
Expand All @@ -211,7 +223,7 @@ describe('AssetsContractController', () => {

it('should throw missing provider error when getting ERC-20 token balance when missing provider', async () => {
const { assetsContract, messenger } = await setupAssetContractControllers();
assetsContract.configure({ provider: undefined });
assetsContract.provider = undefined;
await expect(
assetsContract.getERC20BalanceOf(
ERC20_UNI_ADDRESS,
Expand All @@ -223,7 +235,7 @@ describe('AssetsContractController', () => {

it('should throw missing provider error when getting ERC-20 token decimal when missing provider', async () => {
const { assetsContract, messenger } = await setupAssetContractControllers();
assetsContract.configure({ provider: undefined });
assetsContract.provider = undefined;
await expect(
assetsContract.getERC20TokenDecimals(ERC20_UNI_ADDRESS),
).rejects.toThrow(MISSING_PROVIDER_ERROR);
Expand All @@ -233,7 +245,7 @@ describe('AssetsContractController', () => {
it('should get balance of ERC-20 token contract correctly', async () => {
const { assetsContract, messenger, provider, networkClientConfiguration } =
await setupAssetContractControllers();
assetsContract.configure({ provider });
assetsContract.provider = provider;
mockNetworkWithDefaultChainId({
networkClientConfiguration,
mocks: [
Expand Down Expand Up @@ -287,7 +299,7 @@ describe('AssetsContractController', () => {
it('should get ERC-721 NFT tokenId correctly', async () => {
const { assetsContract, messenger, provider, networkClientConfiguration } =
await setupAssetContractControllers();
assetsContract.configure({ provider });
assetsContract.provider = provider;
mockNetworkWithDefaultChainId({
networkClientConfiguration,
mocks: [
Expand Down Expand Up @@ -320,7 +332,7 @@ describe('AssetsContractController', () => {

it('should throw missing provider error when getting ERC-721 token standard and details when missing provider', async () => {
const { assetsContract, messenger } = await setupAssetContractControllers();
assetsContract.configure({ provider: undefined });
assetsContract.provider = undefined;
await expect(
assetsContract.getTokenStandardAndDetails(
ERC20_UNI_ADDRESS,
Expand All @@ -333,7 +345,7 @@ describe('AssetsContractController', () => {
it('should throw contract standard error when getting ERC-20 token standard and details when provided with invalid ERC-20 address', async () => {
const { assetsContract, messenger, provider } =
await setupAssetContractControllers();
assetsContract.configure({ provider });
assetsContract.provider = provider;
const error = 'Unable to determine contract standard';
await expect(
assetsContract.getTokenStandardAndDetails(
Expand All @@ -347,7 +359,7 @@ describe('AssetsContractController', () => {
it('should get ERC-721 token standard and details', async () => {
const { assetsContract, messenger, provider, networkClientConfiguration } =
await setupAssetContractControllers();
assetsContract.configure({ provider });
assetsContract.provider = provider;
mockNetworkWithDefaultChainId({
networkClientConfiguration,
mocks: [
Expand Down Expand Up @@ -412,7 +424,7 @@ describe('AssetsContractController', () => {
it('should get ERC-1155 token standard and details', async () => {
const { assetsContract, messenger, provider, networkClientConfiguration } =
await setupAssetContractControllers();
assetsContract.configure({ provider });
assetsContract.provider = provider;
mockNetworkWithDefaultChainId({
networkClientConfiguration,
mocks: [
Expand Down Expand Up @@ -497,7 +509,7 @@ describe('AssetsContractController', () => {
it('should get ERC-20 token standard and details', async () => {
const { assetsContract, messenger, provider, networkClientConfiguration } =
await setupAssetContractControllers();
assetsContract.configure({ provider });
assetsContract.provider = provider;
mockNetworkWithDefaultChainId({
networkClientConfiguration,
mocks: [
Expand Down Expand Up @@ -594,7 +606,7 @@ describe('AssetsContractController', () => {
it('should get ERC-721 NFT tokenURI correctly', async () => {
const { assetsContract, messenger, provider, networkClientConfiguration } =
await setupAssetContractControllers();
assetsContract.configure({ provider });
assetsContract.provider = provider;
mockNetworkWithDefaultChainId({
networkClientConfiguration,
mocks: [
Expand Down Expand Up @@ -643,7 +655,7 @@ describe('AssetsContractController', () => {
it('should not throw an error when address given does not support NFT Metadata interface', async () => {
const { assetsContract, messenger, provider, networkClientConfiguration } =
await setupAssetContractControllers();
assetsContract.configure({ provider });
assetsContract.provider = provider;
const errorLogSpy = jest
.spyOn(console, 'error')
.mockImplementationOnce(() => {
Expand Down Expand Up @@ -701,7 +713,7 @@ describe('AssetsContractController', () => {
it('should get ERC-721 NFT name', async () => {
const { assetsContract, messenger, provider, networkClientConfiguration } =
await setupAssetContractControllers();
assetsContract.configure({ provider });
assetsContract.provider = provider;
mockNetworkWithDefaultChainId({
networkClientConfiguration,
mocks: [
Expand Down Expand Up @@ -731,7 +743,7 @@ describe('AssetsContractController', () => {
it('should get ERC-721 NFT symbol', async () => {
const { assetsContract, messenger, provider, networkClientConfiguration } =
await setupAssetContractControllers();
assetsContract.configure({ provider });
assetsContract.provider = provider;
mockNetworkWithDefaultChainId({
networkClientConfiguration,
mocks: [
Expand Down Expand Up @@ -771,7 +783,7 @@ describe('AssetsContractController', () => {
it('should get ERC-20 token decimals', async () => {
const { assetsContract, messenger, provider, networkClientConfiguration } =
await setupAssetContractControllers();
assetsContract.configure({ provider });
assetsContract.provider = provider;
mockNetworkWithDefaultChainId({
networkClientConfiguration,
mocks: [
Expand Down Expand Up @@ -803,7 +815,7 @@ describe('AssetsContractController', () => {
it('should get ERC-20 token name', async () => {
const { assetsContract, messenger, provider, networkClientConfiguration } =
await setupAssetContractControllers();
assetsContract.configure({ provider });
assetsContract.provider = provider;
mockNetworkWithDefaultChainId({
networkClientConfiguration,
mocks: [
Expand Down Expand Up @@ -835,7 +847,7 @@ describe('AssetsContractController', () => {
it('should get ERC-721 NFT ownership', async () => {
const { assetsContract, messenger, provider, networkClientConfiguration } =
await setupAssetContractControllers();
assetsContract.configure({ provider });
assetsContract.provider = provider;
mockNetworkWithDefaultChainId({
networkClientConfiguration,
mocks: [
Expand Down Expand Up @@ -876,7 +888,7 @@ describe('AssetsContractController', () => {
it('should get balance of ERC-20 token in a single call on network with token detection support', async () => {
const { assetsContract, messenger, provider, networkClientConfiguration } =
await setupAssetContractControllers();
assetsContract.configure({ provider });
assetsContract.provider = provider;
mockNetworkWithDefaultChainId({
networkClientConfiguration,
mocks: [
Expand Down Expand Up @@ -982,7 +994,7 @@ describe('AssetsContractController', () => {
useNetworkControllerProvider: true,
infuraProjectId,
});
assetsContract.configure({ provider });
assetsContract.provider = provider;

const balancesOnMainnet = await assetsContract.getBalancesInSingleCall(
ERC20_SAI_ADDRESS,
Expand Down Expand Up @@ -1011,7 +1023,7 @@ describe('AssetsContractController', () => {
provider,
networkClientConfiguration,
} = await setupAssetContractControllers();
assetsContract.configure({ provider });
assetsContract.provider = provider;
mockNetworkWithDefaultChainId({
networkClientConfiguration,
mocks: [
Expand Down Expand Up @@ -1082,7 +1094,7 @@ describe('AssetsContractController', () => {

it('should throw missing provider error when transferring single ERC-1155 when missing provider', async () => {
const { assetsContract, messenger } = await setupAssetContractControllers();
assetsContract.configure({ provider: undefined });
assetsContract.provider = undefined;
await expect(
assetsContract.transferSingleERC1155(
ERC1155_ADDRESS,
Expand All @@ -1098,7 +1110,7 @@ describe('AssetsContractController', () => {
it('should throw when ERC1155 function transferSingle is not defined', async () => {
const { assetsContract, messenger, provider, networkClientConfiguration } =
await setupAssetContractControllers();
assetsContract.configure({ provider });
assetsContract.provider = provider;
mockNetworkWithDefaultChainId({
networkClientConfiguration,
mocks: [
Expand Down Expand Up @@ -1135,7 +1147,7 @@ describe('AssetsContractController', () => {
it('should get the balance of a ERC-1155 NFT for a given address', async () => {
const { assetsContract, messenger, provider, networkClientConfiguration } =
await setupAssetContractControllers();
assetsContract.configure({ provider });
assetsContract.provider = provider;
mockNetworkWithDefaultChainId({
networkClientConfiguration,
mocks: [
Expand Down Expand Up @@ -1181,7 +1193,7 @@ describe('AssetsContractController', () => {
it('should get the URI of a ERC-1155 NFT', async () => {
const { assetsContract, messenger, provider, networkClientConfiguration } =
await setupAssetContractControllers();
assetsContract.configure({ provider });
assetsContract.provider = provider;
mockNetworkWithDefaultChainId({
networkClientConfiguration,
mocks: [
Expand Down
Loading

0 comments on commit ad69fb3

Please sign in to comment.