diff --git a/eslint-warning-thresholds.json b/eslint-warning-thresholds.json index 19a192a361b..ae34e6428f5 100644 --- a/eslint-warning-thresholds.json +++ b/eslint-warning-thresholds.json @@ -32,8 +32,7 @@ "no-shadow": 2 }, "packages/assets-controllers/src/AccountTrackerController.test.ts": { - "import-x/namespace": 2, - "import-x/order": 2 + "import-x/namespace": 2 }, "packages/assets-controllers/src/AccountTrackerController.ts": { "jsdoc/check-tag-names": 5, diff --git a/packages/assets-controllers/src/AccountTrackerController.test.ts b/packages/assets-controllers/src/AccountTrackerController.test.ts index 227d4cb30c0..78787be4e79 100644 --- a/packages/assets-controllers/src/AccountTrackerController.test.ts +++ b/packages/assets-controllers/src/AccountTrackerController.test.ts @@ -9,6 +9,12 @@ import { import { getDefaultPreferencesState } from '@metamask/preferences-controller'; import * as sinon from 'sinon'; +import type { + AccountTrackerControllerMessenger, + AllowedActions, + AllowedEvents, +} from './AccountTrackerController'; +import { AccountTrackerController } from './AccountTrackerController'; import { advanceTime } from '../../../tests/helpers'; import { createMockInternalAccount } from '../../accounts-controller/src/tests/mocks'; import type { @@ -19,12 +25,6 @@ import { buildCustomNetworkClientConfiguration, buildMockGetNetworkClientById, } from '../../network-controller/tests/helpers'; -import type { - AccountTrackerControllerMessenger, - AllowedActions, - AllowedEvents, -} from './AccountTrackerController'; -import { AccountTrackerController } from './AccountTrackerController'; jest.mock('@metamask/controller-utils', () => { return { @@ -95,12 +95,6 @@ describe('AccountTrackerController', () => { }); describe('refresh', () => { - beforeEach(() => { - jest - .spyOn(AccountTrackerController.prototype, 'poll') - .mockImplementationOnce(async () => Promise.resolve()); - }); - describe('without networkClientId', () => { it('should sync addresses', async () => { const mockAddress1 = '0xbabe9bbeab5f83a755ac92c7a09b9ab3ff527f8c'; @@ -787,8 +781,11 @@ describe('AccountTrackerController', () => { }); }); - it('should call refresh every interval on legacy polling', async () => { - const pollSpy = jest.spyOn(AccountTrackerController.prototype, 'poll'); + it('should call refresh every interval on polling', async () => { + const pollSpy = jest.spyOn( + AccountTrackerController.prototype, + '_executePoll', + ); await withController( { options: { interval: 100 }, @@ -799,6 +796,11 @@ describe('AccountTrackerController', () => { async ({ controller }) => { jest.spyOn(controller, 'refresh').mockResolvedValue(); + await controller.startPolling({ + networkClientId: 'networkClientId1', + }); + await advanceTime({ clock, duration: 1 }); + expect(pollSpy).toHaveBeenCalledTimes(1); await advanceTime({ clock, duration: 50 }); @@ -813,7 +815,6 @@ describe('AccountTrackerController', () => { }); it('should call refresh every interval for each networkClientId being polled', async () => { - jest.spyOn(AccountTrackerController.prototype, 'poll').mockResolvedValue(); const networkClientId1 = 'networkClientId1'; const networkClientId2 = 'networkClientId2'; await withController( @@ -867,6 +868,27 @@ describe('AccountTrackerController', () => { }, ); }); + + it('should not call polling twice', async () => { + await withController( + { + options: { interval: 100 }, + }, + async ({ controller }) => { + const refreshSpy = jest + .spyOn(controller, 'refresh') + .mockResolvedValue(); + + expect(refreshSpy).not.toHaveBeenCalled(); + controller.startPolling({ + networkClientId: 'networkClientId1', + }); + + await advanceTime({ clock, duration: 1 }); + expect(refreshSpy).toHaveBeenCalledTimes(1); + }, + ); + }); }); type WithControllerCallback = ({ diff --git a/packages/assets-controllers/src/AccountTrackerController.ts b/packages/assets-controllers/src/AccountTrackerController.ts index 38b37c5e326..a0133623d02 100644 --- a/packages/assets-controllers/src/AccountTrackerController.ts +++ b/packages/assets-controllers/src/AccountTrackerController.ts @@ -146,8 +146,6 @@ export class AccountTrackerController extends StaticIntervalPollingController; - /** * Creates an AccountTracker instance. * @@ -198,10 +196,6 @@ export class AccountTrackerController extends StaticIntervalPollingController { - if (interval) { - this.setIntervalLength(interval); - } - - if (this.#handle) { - clearTimeout(this.#handle); - } - - await this.refresh(); - - this.#handle = setTimeout(() => { - // TODO: Either fix this lint violation or explain why it's necessary to ignore. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - this.poll(this.getIntervalLength()); - }, this.getIntervalLength()); - } - /** * Refreshes the balances of the accounts using the networkClientId *