diff --git a/src/state/CallViewModel/localMember/LocalMember.test.ts b/src/state/CallViewModel/localMember/LocalMember.test.ts index 8990b46b..9d2ded79 100644 --- a/src/state/CallViewModel/localMember/LocalMember.test.ts +++ b/src/state/CallViewModel/localMember/LocalMember.test.ts @@ -297,11 +297,13 @@ describe("LocalMembership", () => { seed += 1; logger.info(`creating [${a}]`); const p = { + // It is enought to check if destroy is called. Destroy itself is tested in the publisher to make sure it does + // all the cleanup we need. + destroy: vi.fn(), stopPublishing: vi.fn().mockImplementation(() => { logger.info(`stopPublishing [${a}]`); }), stopTracks: vi.fn(), - destroy: vi.fn(), }; publishers.push(p as unknown as Publisher); return p; @@ -359,6 +361,8 @@ describe("LocalMembership", () => { defaultCreateLocalMemberValues.createPublisherFactory.mockImplementation( () => { const p = { + // It is enought to check if destroy is called. Destroy itself is tested in the publisher to make sure it does + // all the cleanup we need. destroy: vi.fn(), createAndSetupTracks: vi.fn().mockImplementation(async () => { tracks$.next([{}, {}] as LocalTrack[]); @@ -421,6 +425,8 @@ describe("LocalMembership", () => { defaultCreateLocalMemberValues.createPublisherFactory.mockImplementation( () => { const p = { + // It is enought to check if destroy is called. Destroy itself is tested in the publisher to make sure it does + // all the cleanup we need. destroy: vi.fn(), createAndSetupTracks: vi.fn().mockImplementation(async () => { await createTrackResolver.promise; diff --git a/src/state/CallViewModel/localMember/Publisher.test.ts b/src/state/CallViewModel/localMember/Publisher.test.ts index dd8117a3..a0eaa2fd 100644 --- a/src/state/CallViewModel/localMember/Publisher.test.ts +++ b/src/state/CallViewModel/localMember/Publisher.test.ts @@ -209,10 +209,35 @@ describe("Publisher", () => { }); it("should unsetHandler and stop tracks on destroy", async () => { + // setup all spies + const unsetVideoSpy = vi.spyOn( + ( + publisher as unknown as { + muteStates: { video: { unsetHandler: () => void } }; + } + ).muteStates.video, + "unsetHandler", + ); + const unsetAudioSpy = vi.spyOn( + ( + publisher as unknown as { + muteStates: { audio: { unsetHandler: () => void } }; + } + ).muteStates.audio, + "unsetHandler", + ); + const scopeEndSpy = vi.spyOn( + (publisher as unknown as { scope: { end: () => void } }).scope, + "end", + ); + const stopTracksSpy = vi.spyOn(publisher, "stopTracks"); + // destroy publisher await publisher.destroy(); - expect(publisher.stopTracks).toHaveBeenCalled(); - expect( this.muteStates.audio.unsetHandler(); - this.muteStates.video.unsetHandler();).toHaveBeenCalled(); + + expect(stopTracksSpy).toHaveBeenCalledOnce(); + expect(unsetVideoSpy).toHaveBeenCalledOnce(); + expect(unsetAudioSpy).toHaveBeenCalledOnce(); + expect(scopeEndSpy).toHaveBeenCalled(); }); it("Should minimize permission request by querying create at once", async () => {