Files
THE-TIP-TOP/frontend/src/test/fonctionnel/ProtectedRoute.test.jsx
Emma781227 b6506435d5 test
2026-07-20 10:35:35 +02:00

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()
})
})