test
This commit is contained in:
71
frontend/src/test/unit/AuthContext.test.jsx
Normal file
71
frontend/src/test/unit/AuthContext.test.jsx
Normal file
@@ -0,0 +1,71 @@
|
||||
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 (
|
||||
<div>
|
||||
<p>{user ? `Connecté : ${user.email}` : 'Déconnecté'}</p>
|
||||
<button onClick={() => login({ email: 'a@b.fr', role: 'CLIENT' }, 'mon-jwt')}>
|
||||
se connecter
|
||||
</button>
|
||||
<button onClick={logout}>se déconnecter</button>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
describe('AuthContext', () => {
|
||||
it("n'a pas d'utilisateur par défaut", () => {
|
||||
render(
|
||||
<AuthProvider>
|
||||
<Consumer />
|
||||
</AuthProvider>
|
||||
)
|
||||
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(
|
||||
<AuthProvider>
|
||||
<Consumer />
|
||||
</AuthProvider>
|
||||
)
|
||||
expect(screen.getByText('Connecté : deja@la.fr')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('login met à jour le user et écrit token + user dans le localStorage', async () => {
|
||||
render(
|
||||
<AuthProvider>
|
||||
<Consumer />
|
||||
</AuthProvider>
|
||||
)
|
||||
|
||||
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(
|
||||
<AuthProvider>
|
||||
<Consumer />
|
||||
</AuthProvider>
|
||||
)
|
||||
|
||||
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()
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user