From 761a6092d4852ec2fe7ca0844cc3ca1858ef262a Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Tue, 28 May 2024 10:19:13 +0000 Subject: [PATCH 1/4] chore(transaction-controller): reinit providers and blocktrackers between tests --- packages/transaction-controller/package.json | 1 + .../src/helpers/MultichainTrackingHelper.test.ts | 5 +++++ yarn.lock | 1 + 3 files changed, 7 insertions(+) diff --git a/packages/transaction-controller/package.json b/packages/transaction-controller/package.json index 3bc8e971216..583cfdd0200 100644 --- a/packages/transaction-controller/package.json +++ b/packages/transaction-controller/package.json @@ -67,6 +67,7 @@ "devDependencies": { "@babel/runtime": "^7.23.9", "@metamask/auto-changelog": "^3.4.4", + "@metamask/eth-json-rpc-provider": "^4.0.0", "@metamask/ethjs-provider-http": "^0.3.0", "@types/bn.js": "^5.1.5", "@types/jest": "^27.4.1", diff --git a/packages/transaction-controller/src/helpers/MultichainTrackingHelper.test.ts b/packages/transaction-controller/src/helpers/MultichainTrackingHelper.test.ts index 5a03b5c55f9..b8ff8b14315 100644 --- a/packages/transaction-controller/src/helpers/MultichainTrackingHelper.test.ts +++ b/packages/transaction-controller/src/helpers/MultichainTrackingHelper.test.ts @@ -220,6 +220,11 @@ function newMultichainTrackingHelper( describe('MultichainTrackingHelper', () => { beforeEach(() => { jest.resetAllMocks(); + + for (const network of ['mainnet', 'goerli', 'sepolia', 'customNetworkClientId-1'] as const) { + MOCK_BLOCK_TRACKERS[network] = buildMockBlockTracker(network); + MOCK_PROVIDERS[network] = buildMockProvider(network); + } }); describe('onNetworkStateChange', () => { diff --git a/yarn.lock b/yarn.lock index 52d067820f5..e8e7eb6b6e1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3146,6 +3146,7 @@ __metadata: "@metamask/auto-changelog": ^3.4.4 "@metamask/base-controller": ^6.0.0 "@metamask/controller-utils": ^11.0.0 + "@metamask/eth-json-rpc-provider": ^4.0.0 "@metamask/eth-query": ^4.0.0 "@metamask/ethjs-provider-http": ^0.3.0 "@metamask/gas-fee-controller": ^17.0.0 From 99c0d2471170599f9f5d551724a83a1f4cf500bd Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Tue, 28 May 2024 10:50:06 +0000 Subject: [PATCH 2/4] chore: supply provider for FakeBlockTracker in tests --- .../src/NftDetectionController.test.ts | 5 +++-- .../tests/NetworkController.test.ts | 2 +- packages/network-controller/tests/helpers.ts | 5 +++-- .../src/TransactionController.test.ts | 17 +++++++++-------- .../helpers/MultichainTrackingHelper.test.ts | 7 ++++++- tests/fake-block-tracker.ts | 5 +++-- 6 files changed, 25 insertions(+), 16 deletions(-) diff --git a/packages/assets-controllers/src/NftDetectionController.test.ts b/packages/assets-controllers/src/NftDetectionController.test.ts index 8984134a0e6..9f1e3689f15 100644 --- a/packages/assets-controllers/src/NftDetectionController.test.ts +++ b/packages/assets-controllers/src/NftDetectionController.test.ts @@ -862,6 +862,7 @@ describe('NftDetectionController', () => { it('should return true if mainnet is detected', async () => { const mockAddNft = jest.fn(); + const provider = new FakeProvider(); const mockNetworkClient: NetworkClient = { configuration: { chainId: ChainId.mainnet, @@ -869,8 +870,8 @@ describe('NftDetectionController', () => { ticker: 'TEST', type: NetworkClientType.Custom, }, - provider: new FakeProvider(), - blockTracker: new FakeBlockTracker(), + provider, + blockTracker: new FakeBlockTracker({provider}), destroy: () => { // do nothing }, diff --git a/packages/network-controller/tests/NetworkController.test.ts b/packages/network-controller/tests/NetworkController.test.ts index 18e3476d7b8..3d7d8639d0b 100644 --- a/packages/network-controller/tests/NetworkController.test.ts +++ b/packages/network-controller/tests/NetworkController.test.ts @@ -7574,7 +7574,7 @@ function buildFakeClient( rpcUrl: 'https://test.network', }, provider, - blockTracker: new FakeBlockTracker(), + blockTracker: new FakeBlockTracker({ provider }), destroy: () => { // do nothing }, diff --git a/packages/network-controller/tests/helpers.ts b/packages/network-controller/tests/helpers.ts index 6e63262d4f4..c7072665ea2 100644 --- a/packages/network-controller/tests/helpers.ts +++ b/packages/network-controller/tests/helpers.ts @@ -39,10 +39,11 @@ function buildFakeNetworkClient({ configuration: NetworkClientConfiguration; providerStubs?: FakeProviderStub[]; }): NetworkClient { + const provider = new FakeProvider({ stubs: providerStubs }); return { configuration, - provider: new FakeProvider({ stubs: providerStubs }), - blockTracker: new FakeBlockTracker(), + provider, + blockTracker: new FakeBlockTracker({ provider }), destroy: () => { // do nothing }, diff --git a/packages/transaction-controller/src/TransactionController.test.ts b/packages/transaction-controller/src/TransactionController.test.ts index 5cfbdb33fb2..7db6a5baced 100644 --- a/packages/transaction-controller/src/TransactionController.test.ts +++ b/packages/transaction-controller/src/TransactionController.test.ts @@ -14,6 +14,7 @@ import { BUILT_IN_NETWORKS, ORIGIN_METAMASK, } from '@metamask/controller-utils'; +import { SafeEventEmitterProvider } from '@metamask/eth-json-rpc-provider'; import EthQuery from '@metamask/eth-query'; import HttpProvider from '@metamask/ethjs-provider-http'; import type { @@ -248,8 +249,8 @@ function buildMockEthQuery(): EthQuery { * always return. * @returns The mocked block tracker. */ -function buildMockBlockTracker(latestBlockNumber: string): BlockTracker { - const fakeBlockTracker = new FakeBlockTracker(); +function buildMockBlockTracker(latestBlockNumber: string, provider: SafeEventEmitterProvider): BlockTracker { + const fakeBlockTracker = new FakeBlockTracker({provider}); fakeBlockTracker.mockLatestBlockNumber(latestBlockNumber); return fakeBlockTracker; } @@ -313,7 +314,7 @@ type MockNetwork = { const MOCK_NETWORK: MockNetwork = { provider: MAINNET_PROVIDER, - blockTracker: buildMockBlockTracker('0x102833C'), + blockTracker: buildMockBlockTracker('0x102833C', MAINNET_PROVIDER), state: { selectedNetworkClientId: NetworkType.goerli, networksMetadata: { @@ -333,7 +334,7 @@ const MOCK_NETWORK: MockNetwork = { }; const MOCK_NETWORK_WITHOUT_CHAIN_ID: MockNetwork = { provider: GOERLI_PROVIDER, - blockTracker: buildMockBlockTracker('0x102833C'), + blockTracker: buildMockBlockTracker('0x102833C', GOERLI_PROVIDER), state: { selectedNetworkClientId: NetworkType.goerli, networksMetadata: { @@ -351,7 +352,7 @@ const MOCK_NETWORK_WITHOUT_CHAIN_ID: MockNetwork = { }; const MOCK_MAINNET_NETWORK: MockNetwork = { provider: MAINNET_PROVIDER, - blockTracker: buildMockBlockTracker('0x102833C'), + blockTracker: buildMockBlockTracker('0x102833C', MAINNET_PROVIDER), state: { selectedNetworkClientId: NetworkType.mainnet, networksMetadata: { @@ -372,7 +373,7 @@ const MOCK_MAINNET_NETWORK: MockNetwork = { const MOCK_LINEA_MAINNET_NETWORK: MockNetwork = { provider: PALM_PROVIDER, - blockTracker: buildMockBlockTracker('0xA6EDFC'), + blockTracker: buildMockBlockTracker('0xA6EDFC', PALM_PROVIDER), state: { selectedNetworkClientId: NetworkType['linea-mainnet'], networksMetadata: { @@ -393,7 +394,7 @@ const MOCK_LINEA_MAINNET_NETWORK: MockNetwork = { const MOCK_LINEA_GOERLI_NETWORK: MockNetwork = { provider: PALM_PROVIDER, - blockTracker: buildMockBlockTracker('0xA6EDFC'), + blockTracker: buildMockBlockTracker('0xA6EDFC', PALM_PROVIDER), state: { selectedNetworkClientId: NetworkType['linea-goerli'], networksMetadata: { @@ -414,7 +415,7 @@ const MOCK_LINEA_GOERLI_NETWORK: MockNetwork = { const MOCK_CUSTOM_NETWORK: MockNetwork = { provider: PALM_PROVIDER, - blockTracker: buildMockBlockTracker('0xA6EDFC'), + blockTracker: buildMockBlockTracker('0xA6EDFC', PALM_PROVIDER), state: { selectedNetworkClientId: 'uuid-1', networksMetadata: { diff --git a/packages/transaction-controller/src/helpers/MultichainTrackingHelper.test.ts b/packages/transaction-controller/src/helpers/MultichainTrackingHelper.test.ts index b8ff8b14315..a2ac2293cf0 100644 --- a/packages/transaction-controller/src/helpers/MultichainTrackingHelper.test.ts +++ b/packages/transaction-controller/src/helpers/MultichainTrackingHelper.test.ts @@ -221,7 +221,12 @@ describe('MultichainTrackingHelper', () => { beforeEach(() => { jest.resetAllMocks(); - for (const network of ['mainnet', 'goerli', 'sepolia', 'customNetworkClientId-1'] as const) { + for (const network of [ + 'mainnet', + 'goerli', + 'sepolia', + 'customNetworkClientId-1', + ] as const) { MOCK_BLOCK_TRACKERS[network] = buildMockBlockTracker(network); MOCK_PROVIDERS[network] = buildMockProvider(network); } diff --git a/tests/fake-block-tracker.ts b/tests/fake-block-tracker.ts index 0c7365b441e..91181e060e7 100644 --- a/tests/fake-block-tracker.ts +++ b/tests/fake-block-tracker.ts @@ -9,9 +9,10 @@ import { JsonRpcEngine } from '@metamask/json-rpc-engine'; export class FakeBlockTracker extends PollingBlockTracker { #latestBlockNumber = '0x0'; - constructor() { + constructor({provider}: {provider: SafeEventEmitterProvider}) { super({ - provider: new SafeEventEmitterProvider({ engine: new JsonRpcEngine() }), + provider, + // provider: new SafeEventEmitterProvider({ engine: new JsonRpcEngine() }), }); // Don't start the polling loop // TODO: Replace `any` with type From 269ce458bec5f90774e2767377c62c0a7376ee8a Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Thu, 30 May 2024 23:20:40 +0000 Subject: [PATCH 3/4] lint:fix --- .../src/NftDetectionController.test.ts | 2 +- .../src/TransactionController.test.ts | 10 +++++++--- tests/fake-block-tracker.ts | 6 ++---- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/packages/assets-controllers/src/NftDetectionController.test.ts b/packages/assets-controllers/src/NftDetectionController.test.ts index 9f1e3689f15..79e08cee931 100644 --- a/packages/assets-controllers/src/NftDetectionController.test.ts +++ b/packages/assets-controllers/src/NftDetectionController.test.ts @@ -871,7 +871,7 @@ describe('NftDetectionController', () => { type: NetworkClientType.Custom, }, provider, - blockTracker: new FakeBlockTracker({provider}), + blockTracker: new FakeBlockTracker({ provider }), destroy: () => { // do nothing }, diff --git a/packages/transaction-controller/src/TransactionController.test.ts b/packages/transaction-controller/src/TransactionController.test.ts index 7db6a5baced..6809b930d6f 100644 --- a/packages/transaction-controller/src/TransactionController.test.ts +++ b/packages/transaction-controller/src/TransactionController.test.ts @@ -14,7 +14,7 @@ import { BUILT_IN_NETWORKS, ORIGIN_METAMASK, } from '@metamask/controller-utils'; -import { SafeEventEmitterProvider } from '@metamask/eth-json-rpc-provider'; +import type { SafeEventEmitterProvider } from '@metamask/eth-json-rpc-provider'; import EthQuery from '@metamask/eth-query'; import HttpProvider from '@metamask/ethjs-provider-http'; import type { @@ -247,10 +247,14 @@ function buildMockEthQuery(): EthQuery { * * @param latestBlockNumber - The block number that the block tracker should * always return. + * @param provider - json rpc provider * @returns The mocked block tracker. */ -function buildMockBlockTracker(latestBlockNumber: string, provider: SafeEventEmitterProvider): BlockTracker { - const fakeBlockTracker = new FakeBlockTracker({provider}); +function buildMockBlockTracker( + latestBlockNumber: string, + provider: SafeEventEmitterProvider, +): BlockTracker { + const fakeBlockTracker = new FakeBlockTracker({ provider }); fakeBlockTracker.mockLatestBlockNumber(latestBlockNumber); return fakeBlockTracker; } diff --git a/tests/fake-block-tracker.ts b/tests/fake-block-tracker.ts index 91181e060e7..55439211f1a 100644 --- a/tests/fake-block-tracker.ts +++ b/tests/fake-block-tracker.ts @@ -1,6 +1,5 @@ import { PollingBlockTracker } from '@metamask/eth-block-tracker'; -import { SafeEventEmitterProvider } from '@metamask/eth-json-rpc-provider'; -import { JsonRpcEngine } from '@metamask/json-rpc-engine'; +import type { SafeEventEmitterProvider } from '@metamask/eth-json-rpc-provider'; /** * Acts like a PollingBlockTracker, but doesn't start the polling loop or @@ -9,10 +8,9 @@ import { JsonRpcEngine } from '@metamask/json-rpc-engine'; export class FakeBlockTracker extends PollingBlockTracker { #latestBlockNumber = '0x0'; - constructor({provider}: {provider: SafeEventEmitterProvider}) { + constructor({ provider }: { provider: SafeEventEmitterProvider }) { super({ provider, - // provider: new SafeEventEmitterProvider({ engine: new JsonRpcEngine() }), }); // Don't start the polling loop // TODO: Replace `any` with type From 0a8fbbffb133f97039287cac8449523c784d76bb Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Fri, 31 May 2024 00:10:23 +0000 Subject: [PATCH 4/4] chore: revert "reinit providers and blocktrackers between tests" This part is its own mess --- .../src/helpers/MultichainTrackingHelper.test.ts | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/packages/transaction-controller/src/helpers/MultichainTrackingHelper.test.ts b/packages/transaction-controller/src/helpers/MultichainTrackingHelper.test.ts index a2ac2293cf0..5a03b5c55f9 100644 --- a/packages/transaction-controller/src/helpers/MultichainTrackingHelper.test.ts +++ b/packages/transaction-controller/src/helpers/MultichainTrackingHelper.test.ts @@ -220,16 +220,6 @@ function newMultichainTrackingHelper( describe('MultichainTrackingHelper', () => { beforeEach(() => { jest.resetAllMocks(); - - for (const network of [ - 'mainnet', - 'goerli', - 'sepolia', - 'customNetworkClientId-1', - ] as const) { - MOCK_BLOCK_TRACKERS[network] = buildMockBlockTracker(network); - MOCK_PROVIDERS[network] = buildMockProvider(network); - } }); describe('onNetworkStateChange', () => {