81 lines
2.4 KiB
JavaScript
81 lines
2.4 KiB
JavaScript
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()
|
|
})
|
|
})
|