From dd4f4dbd5e78a88fdbb5d0edf41aca91f0772cce Mon Sep 17 00:00:00 2001 From: dmolinari Date: Tue, 14 Apr 2026 13:51:41 -0300 Subject: [PATCH] =?UTF-8?q?test(web):=20LoginPage=20=E2=80=94=20verify=20s?= =?UTF-8?q?etAuth=20receives=20expiresIn=20and=20calculates=20expiresAt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tests/features/auth/LoginPage.test.tsx | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/web/src/tests/features/auth/LoginPage.test.tsx b/src/web/src/tests/features/auth/LoginPage.test.tsx index 2fb345e..8be4e3d 100644 --- a/src/web/src/tests/features/auth/LoginPage.test.tsx +++ b/src/web/src/tests/features/auth/LoginPage.test.tsx @@ -37,7 +37,8 @@ const server = setupServer( beforeAll(() => server.listen({ onUnhandledRequest: 'error' })) afterEach(() => { server.resetHandlers() - useAuthStore.getState().logout() + // Use clearAuth (sync) to avoid triggering API logout call in tests + useAuthStore.getState().clearAuth() localStorage.clear() mockNavigate.mockClear() }) @@ -114,4 +115,28 @@ describe('LoginPage', () => { expect(state.user?.username).toBe('admin') }) }) + + it('setAuth receives expiresIn and store calculates expiresAt correctly', async () => { + const before = Date.now() + const user = userEvent.setup() + renderLoginPage() + + await user.type(screen.getByLabelText(/usuario/i), 'admin') + await user.type(screen.getByLabelText(/contraseƱa/i), '@Diego550@') + await user.click(screen.getByRole('button', { name: /ingresar/i })) + + await waitFor(() => { + const state = useAuthStore.getState() + const after = Date.now() + + // refreshToken should be persisted + expect(state.refreshToken).toBe(mockLoginResponse.refreshToken) + + // expiresAt should be computed as Date.now() + expiresIn * 1000 + // Allow a 2s window for test execution + expect(state.expiresAt).not.toBeNull() + expect(state.expiresAt!).toBeGreaterThanOrEqual(before + mockLoginResponse.expiresIn * 1000) + expect(state.expiresAt!).toBeLessThanOrEqual(after + mockLoginResponse.expiresIn * 1000) + }) + }) })