45 lines
1.5 KiB
React
45 lines
1.5 KiB
React
/* 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(
|
|
<MemoryRouter>
|
|
<AuthProvider>
|
|
<Login />
|
|
</AuthProvider>
|
|
</MemoryRouter>
|
|
);
|
|
}
|
|
|
|
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();
|
|
});
|
|
});
|