test: vitest setup + auth/login/cookie banner tests

This commit is contained in:
neckfire
2026-06-20 12:57:13 +02:00
parent 7a4206a522
commit bfdb3d3d9a
8 changed files with 996 additions and 6 deletions
@@ -0,0 +1,49 @@
/* Tests du contexte d'authentification : login / logout */
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
import { renderHook, act } from '@testing-library/react';
import { AuthProvider, useAuth } from '../context/AuthContext';
import * as api from '../services/api';
describe('AuthContext', () => {
beforeEach(() => {
localStorage.clear();
vi.restoreAllMocks();
});
afterEach(() => {
vi.restoreAllMocks();
});
function wrapper({ children }) {
return <AuthProvider>{children}</AuthProvider>;
}
it('login renseigne l\'utilisateur, logout le vide', async () => {
const fakeUser = { username: 'bob', role: 'Consultant' };
vi.spyOn(api, 'login').mockResolvedValue(fakeUser);
const clearSpy = vi.spyOn(api, 'clearToken').mockImplementation(() => {});
const { result } = renderHook(() => useAuth(), { wrapper });
expect(result.current.user).toBeNull();
expect(result.current.isAuthenticated).toBe(false);
await act(async () => {
await result.current.login('bob', 'pwd');
});
expect(result.current.user).toEqual(fakeUser);
expect(result.current.isAuthenticated).toBe(true);
/* L'utilisateur est persisté dans le localStorage */
expect(JSON.parse(localStorage.getItem('ds_user'))).toEqual(fakeUser);
act(() => {
result.current.logout();
});
expect(result.current.user).toBeNull();
expect(result.current.isAuthenticated).toBe(false);
expect(localStorage.getItem('ds_user')).toBeNull();
expect(clearSpy).toHaveBeenCalled();
});
});