import { describe, it, expect } from 'vitest' import { render, screen } from '@testing-library/react' import userEvent from '@testing-library/user-event' import { AuthProvider, useAuth } from '../../context/AuthContext' // Petit composant de test pour manipuler le contexte comme le ferait une page. function Consumer() { const { user, login, logout } = useAuth() return (

{user ? `Connecté : ${user.email}` : 'Déconnecté'}

) } describe('AuthContext', () => { it("n'a pas d'utilisateur par défaut", () => { render( ) expect(screen.getByText('Déconnecté')).toBeInTheDocument() }) it('restaure la session depuis le localStorage', () => { localStorage.setItem('user', JSON.stringify({ email: 'deja@la.fr', role: 'CLIENT' })) render( ) expect(screen.getByText('Connecté : deja@la.fr')).toBeInTheDocument() }) it('login met à jour le user et écrit token + user dans le localStorage', async () => { render( ) await userEvent.click(screen.getByRole('button', { name: 'se connecter' })) expect(screen.getByText('Connecté : a@b.fr')).toBeInTheDocument() expect(localStorage.getItem('token')).toBe('mon-jwt') expect(JSON.parse(localStorage.getItem('user'))).toEqual({ email: 'a@b.fr', role: 'CLIENT' }) }) it('logout vide le user et le localStorage', async () => { localStorage.setItem('token', 'mon-jwt') localStorage.setItem('user', JSON.stringify({ email: 'a@b.fr', role: 'CLIENT' })) render( ) await userEvent.click(screen.getByRole('button', { name: 'se déconnecter' })) expect(screen.getByText('Déconnecté')).toBeInTheDocument() expect(localStorage.getItem('token')).toBeNull() expect(localStorage.getItem('user')).toBeNull() }) })