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 6ea5485
Show file tree
Hide file tree
Showing 4 changed files with 150 additions and 171 deletions.
132 changes: 62 additions & 70 deletions packages/assets-controllers/src/AssetsContractController.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,22 +9,20 @@ import {
} from '@metamask/controller-utils';
import HttpProvider from '@metamask/ethjs-provider-http';
import type {
NetworkClientId,
NetworkControllerMessenger,
Provider,
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, AllowedEvents } from './AssetsContractController';
import {
AssetsContractController,
MISSING_PROVIDER_ERROR,
Expand Down Expand Up @@ -65,22 +63,25 @@ 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 | AllowedActions,
NetworkControllerEvents | AllowedEvents
>();
const networkMessenger = controllerMessenger.getRestricted({
name: 'NetworkController',
allowedActions: [],
allowedEvents: [],
});
const networkController = new NetworkController({
infuraProjectId,
messenger,
messenger: networkMessenger,
trackMetaMetricsEvent: jest.fn(),
});
if (useNetworkControllerProvider) {
Expand All @@ -94,41 +95,27 @@ async function setupAssetContractControllers({
);
}

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,7 +157,8 @@ export { setupAssetContractControllers, mockNetworkWithDefaultChainId };
describe('AssetsContractController', () => {
it('should set default config', async () => {
const { assetsContract, messenger } = await setupAssetContractControllers();
expect(assetsContract.config).toStrictEqual({
const { chainId, ipfsGateway, provider } = assetsContract;
expect({ chainId, ipfsGateway, provider }).toStrictEqual({
chainId: SupportedTokenDetectionNetworks.mainnet,
ipfsGateway: IPFS_DEFAULT_GATEWAY_URL,
provider: undefined,
Expand All @@ -179,20 +167,24 @@ describe('AssetsContractController', () => {
});

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();
const { chainId, ipfsGateway, provider } = assetsContract;
expect({ chainId, ipfsGateway, provider }).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, ipfsGateway, provider }).toStrictEqual({
ipfsGateway: 'newIPFSGateWay',
chainId: SupportedTokenDetectionNetworks.mainnet,
provider: undefined,
Expand All @@ -211,7 +203,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 +215,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 +225,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 +279,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 +312,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 +325,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 +339,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 +404,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 +489,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 +586,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 +635,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 +693,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 +723,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 +763,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 +795,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 +827,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 +868,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 +974,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 +1003,7 @@ describe('AssetsContractController', () => {
provider,
networkClientConfiguration,
} = await setupAssetContractControllers();
assetsContract.configure({ provider });
assetsContract.provider = provider;
mockNetworkWithDefaultChainId({
networkClientConfiguration,
mocks: [
Expand Down Expand Up @@ -1082,7 +1074,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 +1090,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 +1127,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 +1173,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 6ea5485

Please sign in to comment.