From 246de7863dc5cd47409f638369dafdeefad6391f Mon Sep 17 00:00:00 2001 From: Benjamin Lu Date: Mon, 3 Nov 2025 19:16:16 -0800 Subject: [PATCH] Readd unit test --- .../tests/store/firebaseAuthStore.test.ts | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/tests-ui/tests/store/firebaseAuthStore.test.ts b/tests-ui/tests/store/firebaseAuthStore.test.ts index 3065e5bf0..fa67700bc 100644 --- a/tests-ui/tests/store/firebaseAuthStore.test.ts +++ b/tests-ui/tests/store/firebaseAuthStore.test.ts @@ -83,6 +83,7 @@ vi.mock('@/services/dialogService') describe('useFirebaseAuthStore', () => { let store: ReturnType let authStateCallback: (user: any) => void + let idTokenCallback: (user: any) => void const mockAuth = { /* mock Auth object */ @@ -143,6 +144,55 @@ describe('useFirebaseAuthStore', () => { mockUser.getIdToken.mockResolvedValue('mock-id-token') }) + describe('token refresh events', () => { + beforeEach(async () => { + vi.resetModules() + vi.doMock('@/platform/distribution/types', () => ({ + isCloud: true, + isDesktop: true + })) + + vi.mocked(firebaseAuth.onIdTokenChanged).mockImplementation( + (_auth, callback) => { + idTokenCallback = callback as (user: any) => void + return vi.fn() + } + ) + + vi.mocked(vuefire.useFirebaseAuth).mockReturnValue(mockAuth as any) + + setActivePinia(createPinia()) + const storeModule = await import('@/stores/firebaseAuthStore') + store = storeModule.useFirebaseAuthStore() + }) + + it("should not increment tokenRefreshTrigger on the user's first ID token event", () => { + idTokenCallback?.(mockUser) + expect(store.tokenRefreshTrigger).toBe(0) + }) + + it('should increment tokenRefreshTrigger on subsequent ID token events for the same user', () => { + idTokenCallback?.(mockUser) + idTokenCallback?.(mockUser) + expect(store.tokenRefreshTrigger).toBe(1) + }) + + it('should not increment when ID token event is for a different user UID', () => { + const otherUser = { uid: 'other-user-id' } + idTokenCallback?.(mockUser) + idTokenCallback?.(otherUser) + expect(store.tokenRefreshTrigger).toBe(0) + }) + + it('should increment after switching to a new UID and receiving a second event for that UID', () => { + const otherUser = { uid: 'other-user-id' } + idTokenCallback?.(mockUser) + idTokenCallback?.(otherUser) + idTokenCallback?.(otherUser) + expect(store.tokenRefreshTrigger).toBe(1) + }) + }) + it('should initialize with the current user', () => { expect(store.currentUser).toEqual(mockUser) expect(store.isAuthenticated).toBe(true)