This commit is contained in:
Emma781227
2026-07-20 10:35:35 +02:00
parent 65d6b23233
commit b6506435d5
14 changed files with 1902 additions and 3 deletions

View File

@@ -0,0 +1,80 @@
import { describe, it, expect } from 'vitest'
import { screen } from '@testing-library/react'
import ProtectedRoute from '../../components/ProtectedRoute'
import { renderWithProviders } from '../renderWithProviders'
describe('ProtectedRoute', () => {
it("redirige vers /connexion si l'utilisateur n'est pas connecté", () => {
renderWithProviders(
<ProtectedRoute>
<p>Contenu protégé</p>
</ProtectedRoute>,
{
route: '/mes-gains',
routes: { '/connexion': <p>Page Connexion</p> },
}
)
expect(screen.getByText('Page Connexion')).toBeInTheDocument()
expect(screen.queryByText('Contenu protégé')).not.toBeInTheDocument()
})
it("affiche le contenu si l'utilisateur est connecté", () => {
renderWithProviders(
<ProtectedRoute>
<p>Contenu protégé</p>
</ProtectedRoute>,
{
route: '/mes-gains',
user: { id: 1, email: 'client@example.com', role: 'CLIENT' },
}
)
expect(screen.getByText('Contenu protégé')).toBeInTheDocument()
})
it('affiche le contenu si le rôle est autorisé', () => {
renderWithProviders(
<ProtectedRoute roles={['ADMIN']}>
<p>Espace admin</p>
</ProtectedRoute>,
{
route: '/admin',
user: { id: 2, email: 'admin@example.com', role: 'ADMIN' },
}
)
expect(screen.getByText('Espace admin')).toBeInTheDocument()
})
it("redirige un client vers son espace s'il tente d'accéder à l'admin", () => {
renderWithProviders(
<ProtectedRoute roles={['ADMIN']}>
<p>Espace admin</p>
</ProtectedRoute>,
{
route: '/admin',
user: { id: 1, email: 'client@example.com', role: 'CLIENT' },
routes: { '/mes-gains': <p>Page Mes Gains</p> },
}
)
expect(screen.getByText('Page Mes Gains')).toBeInTheDocument()
expect(screen.queryByText('Espace admin')).not.toBeInTheDocument()
})
it("redirige un employé vers son espace s'il tente d'accéder à l'admin", () => {
renderWithProviders(
<ProtectedRoute roles={['ADMIN']}>
<p>Espace admin</p>
</ProtectedRoute>,
{
route: '/admin',
user: { id: 3, email: 'employe@example.com', role: 'EMPLOYEE' },
routes: { '/employe': <p>Page Employé</p> },
}
)
expect(screen.getByText('Page Employé')).toBeInTheDocument()
})
})