test
This commit is contained in:
51
frontend/src/test/unit/useHandleAuthError.test.jsx
Normal file
51
frontend/src/test/unit/useHandleAuthError.test.jsx
Normal file
@@ -0,0 +1,51 @@
|
||||
import { describe, it, expect } from 'vitest'
|
||||
import { useState } from 'react'
|
||||
import { screen } from '@testing-library/react'
|
||||
import userEvent from '@testing-library/user-event'
|
||||
import { useHandleAuthError } from '../../hooks/useHandleAuthError'
|
||||
import { renderWithProviders } from '../renderWithProviders'
|
||||
|
||||
// Composant de test : déclenche le hook avec l'erreur passée en prop.
|
||||
function TestComponent({ error }) {
|
||||
const handleAuthError = useHandleAuthError()
|
||||
const [handled, setHandled] = useState(null)
|
||||
return (
|
||||
<div>
|
||||
<button onClick={() => setHandled(handleAuthError(error))}>déclencher</button>
|
||||
{handled !== null && <p>géré : {String(handled)}</p>}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
describe('useHandleAuthError', () => {
|
||||
it('déconnecte et redirige vers /connexion sur une erreur 401', async () => {
|
||||
const error = Object.assign(new Error('Session expirée'), { status: 401 })
|
||||
|
||||
renderWithProviders(<TestComponent error={error} />, {
|
||||
route: '/mes-gains',
|
||||
user: { email: 'a@b.fr', role: 'CLIENT' },
|
||||
routes: { '/connexion': <p>Page Connexion</p> },
|
||||
})
|
||||
|
||||
await userEvent.click(screen.getByRole('button', { name: 'déclencher' }))
|
||||
|
||||
expect(screen.getByText('Page Connexion')).toBeInTheDocument()
|
||||
expect(localStorage.getItem('token')).toBeNull()
|
||||
expect(localStorage.getItem('user')).toBeNull()
|
||||
})
|
||||
|
||||
it('ne fait rien et renvoie false pour une autre erreur', async () => {
|
||||
const error = Object.assign(new Error('Erreur serveur'), { status: 500 })
|
||||
|
||||
renderWithProviders(<TestComponent error={error} />, {
|
||||
route: '/mes-gains',
|
||||
user: { email: 'a@b.fr', role: 'CLIENT' },
|
||||
routes: { '/connexion': <p>Page Connexion</p> },
|
||||
})
|
||||
|
||||
await userEvent.click(screen.getByRole('button', { name: 'déclencher' }))
|
||||
|
||||
expect(screen.getByText('géré : false')).toBeInTheDocument()
|
||||
expect(localStorage.getItem('token')).toBe('fake-token')
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user