Files
Front-DataSentinel/DataSentinel/src/__tests__/Login.test.jsx
T

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();
});
});