test
This commit is contained in:
80
frontend/src/test/fonctionnel/ProtectedRoute.test.jsx
Normal file
80
frontend/src/test/fonctionnel/ProtectedRoute.test.jsx
Normal 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()
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user