/* Tests de la page de connexion : validation du captcha anti-bot */ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { render, screen, fireEvent } from '@testing-library/react'; import { MemoryRouter } from 'react-router-dom'; import Login from '../pages/Login/Login'; import { AuthProvider } from '../context/AuthContext'; import * as api from '../services/api'; function renderLogin() { return render( ); } describe('Login - captcha', () => { beforeEach(() => { localStorage.clear(); vi.restoreAllMocks(); }); afterEach(() => { vi.restoreAllMocks(); }); it('affiche une erreur et n\'appelle pas l\'API si le captcha est faux', async () => { const loginSpy = vi.spyOn(api, 'login').mockResolvedValue({ username: 'x', role: 'Admin' }); renderLogin(); fireEvent.change(screen.getByLabelText('Identifiant'), { target: { value: 'alice' } }); fireEvent.change(screen.getByLabelText('Mot de passe'), { target: { value: 'pwd' } }); /* Réponse volontairement absurde, jamais égale à x + y (max 20) */ fireEvent.change(screen.getByLabelText(/combien font/i), { target: { value: '9999' } }); fireEvent.click(screen.getByRole('button', { name: /Se connecter/ })); expect(await screen.findByText('Réponse au captcha incorrecte.')).toBeInTheDocument(); expect(loginSpy).not.toHaveBeenCalled(); }); });