diff --git a/app/src/providers/__tests__/CoreStateProvider.test.tsx b/app/src/providers/__tests__/CoreStateProvider.test.tsx index c0980cf6d..fb81be620 100644 --- a/app/src/providers/__tests__/CoreStateProvider.test.tsx +++ b/app/src/providers/__tests__/CoreStateProvider.test.tsx @@ -46,6 +46,16 @@ function makeSnapshot(overrides: { }; } +function deferred() { + let resolve!: (value: T) => void; + let reject!: (reason?: unknown) => void; + const promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + return { promise, resolve, reject }; +} + function makeJwt(payload: Record): string { const encode = (value: Record) => window.btoa(JSON.stringify(value)).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); @@ -229,12 +239,9 @@ describe('CoreStateProvider — identity-change cache clearing', () => { await waitFor(() => expect(screen.getByTestId('ready').textContent).toBe('ready')); }); - it('does not commit a pending bootstrap refresh after unmount', async () => { - let resolveSnapshot!: (snapshot: Snapshot) => void; - const pendingSnapshot = new Promise(resolve => { - resolveSnapshot = resolve; - }); - fetchSnapshot.mockReturnValue(pendingSnapshot); + it('does not commit a poll snapshot after the provider unmounts (#1934)', async () => { + const pendingSnapshot = deferred(); + fetchSnapshot.mockReturnValue(pendingSnapshot.promise); listTeams.mockResolvedValue([]); const { unmount } = render( @@ -243,16 +250,19 @@ describe('CoreStateProvider — identity-change cache clearing', () => { ); + expect(screen.getByTestId('ready').textContent).toBe('boot'); + unmount(); await act(async () => { - resolveSnapshot(makeSnapshot({ userId: null, sessionToken: null })); - await pendingSnapshot; - await Promise.resolve(); + pendingSnapshot.resolve(makeSnapshot({ userId: 'late-user', sessionToken: 'late-token' })); + await pendingSnapshot.promise; }); - expect(getCoreStateSnapshot().isReady).toBe(false); - expect(getCoreStateSnapshot().snapshot.auth.userId).toBeNull(); + const snapshot = getCoreStateSnapshot(); + expect(snapshot.isReady).toBe(false); + expect(snapshot.snapshot.auth.userId).toBeNull(); + expect(snapshot.snapshot.sessionToken).toBeNull(); }); it('warns when the initial core state poll fails', async () => {