From f5c98305c614bcd7405808276d58655bc5aa5b65 Mon Sep 17 00:00:00 2001 From: Michele Esposito <34438276+mikesposito@users.noreply.github.com> Date: Fri, 5 May 2023 13:49:51 +0200 Subject: [PATCH] Add `destroy` method (#1330) * feat: add destroy method * test: see if blockTracker is actually undefined * docs: apply description suggestion Co-authored-by: Mark Stacey --------- Co-authored-by: Mark Stacey --- .../src/NetworkController.ts | 9 ++++++ .../tests/NetworkController.test.ts | 31 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/packages/network-controller/src/NetworkController.ts b/packages/network-controller/src/NetworkController.ts index b8c0822dfd..9b0e61b932 100644 --- a/packages/network-controller/src/NetworkController.ts +++ b/packages/network-controller/src/NetworkController.ts @@ -806,6 +806,15 @@ export class NetworkController extends BaseControllerV2< await this.setActiveNetwork(specifier); } } + + /** + * Deactivates the controller, stopping any ongoing polling. + * + * In-progress requests will not be aborted. + */ + async destroy() { + await this.#blockTrackerProxy?.destroy(); + } } export default NetworkController; diff --git a/packages/network-controller/tests/NetworkController.test.ts b/packages/network-controller/tests/NetworkController.test.ts index 286523e958..cb9f09377f 100644 --- a/packages/network-controller/tests/NetworkController.test.ts +++ b/packages/network-controller/tests/NetworkController.test.ts @@ -5520,6 +5520,37 @@ describe('NetworkController', () => { ); }); }); + + describe('destroy', () => { + describe('if the blockTracker is defined', () => { + it('should stop the blockTracker', async () => { + await withController({}, async ({ controller }) => { + const fakeProvider = buildFakeProvider(); + const fakeNetworkClient = buildFakeClient(fakeProvider); + createNetworkClientMock.mockReturnValue(fakeNetworkClient); + await controller.initializeProvider(); + const destroySpy = jest.spyOn( + fakeNetworkClient.blockTracker, + 'destroy', + ); + + await controller.destroy(); + + expect(destroySpy).toHaveBeenCalled(); + }); + }); + }); + + describe('if the blockTracker is undefined', () => { + it('should not throw errors', async () => { + await withController({}, async ({ controller }) => { + const { blockTracker } = controller.getProviderAndBlockTracker(); + expect(blockTracker).toBeUndefined(); + expect(async () => await controller.destroy()).not.toThrow(); + }); + }); + }); + }); }); /**