diff --git a/client/src/pages/LoginPage.test.tsx b/client/src/pages/LoginPage.test.tsx index 5f5adc87..ae9d5818 100644 --- a/client/src/pages/LoginPage.test.tsx +++ b/client/src/pages/LoginPage.test.tsx @@ -103,6 +103,38 @@ describe('LoginPage', () => { }); }); + describe('FE-PAGE-LOGIN-007: Remember me sends remember_me to the API', () => { + it('renders an unchecked checkbox and forwards remember_me: true when ticked', async () => { + let capturedBody: Record | null = null; + server.use( + http.post('/api/auth/login', async ({ request }) => { + capturedBody = (await request.json()) as Record; + return HttpResponse.json({ user: { id: 1, username: 'test', email: 'test@example.com', role: 'user' } }); + }), + ); + + const user = userEvent.setup(); + render(); + + await waitFor(() => { + expect(screen.getByPlaceholderText(EMAIL_PLACEHOLDER)).toBeInTheDocument(); + }); + + const checkbox = screen.getByRole('checkbox', { name: /remember me/i }); + expect(checkbox).not.toBeChecked(); + + await user.type(screen.getByPlaceholderText(EMAIL_PLACEHOLDER), 'user@example.com'); + await user.type(screen.getByPlaceholderText(PASSWORD_PLACEHOLDER), 'password123'); + await user.click(checkbox); + expect(checkbox).toBeChecked(); + await user.click(screen.getByRole('button', { name: /sign in/i })); + + await waitFor(() => { + expect(capturedBody).toEqual(expect.objectContaining({ remember_me: true })); + }); + }); + }); + describe('FE-PAGE-LOGIN-005: Registration toggle visible', () => { it('shows a Register button to switch to registration mode', async () => { // Default appConfig has allow_registration: true, has_users: true diff --git a/client/src/pages/LoginPage.tsx b/client/src/pages/LoginPage.tsx index 74e5bd1b..df74f226 100644 --- a/client/src/pages/LoginPage.tsx +++ b/client/src/pages/LoginPage.tsx @@ -9,7 +9,7 @@ export default function LoginPage(): React.ReactElement { const { navigate, mode, setMode, - username, setUsername, email, setEmail, password, setPassword, showPassword, setShowPassword, + username, setUsername, email, setEmail, password, setPassword, rememberMe, setRememberMe, showPassword, setShowPassword, isLoading, error, setError, appConfig, inviteToken, langDropdownOpen, setLangDropdownOpen, setLanguageLocal, showTakeoff, mfaStep, setMfaStep, mfaToken, setMfaToken, mfaCode, setMfaCode, @@ -572,7 +572,16 @@ export default function LoginPage(): React.ReactElement { {mode === 'login' && ( -
+
+