import { render, screen } from '@testing-library/react'; import { describe, it, expect, vi, beforeEach } from 'vitest'; import { BrowserRouter } from 'react-router-dom'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { ToastProvider } from '@/components/feedback/ToastProvider'; import { DashboardLayout } from './DashboardLayout'; // Mock useTranslation vi.mock('@/hooks/useTranslation', () => ({ useTranslation: () => ({ t: (key: string) => key, i18n: { changeLanguage: vi.fn() }, language: 'fr', changeLanguage: vi.fn(), isReady: true, }), })); // Mock useAuthStore vi.mock('@/features/auth/store/authStore', () => ({ useAuthStore: () => ({ user: { id: '1', username: 'testuser', email: 'test@example.com' }, isAuthenticated: true, logout: vi.fn(), }), })); // Mock useUIStore vi.mock('@/stores/ui', () => ({ useUIStore: () => ({ sidebarOpen: true, setSidebarOpen: vi.fn(), theme: 'light', setTheme: vi.fn(), }), })); const createTestQueryClient = () => new QueryClient({ defaultOptions: { queries: { retry: false }, mutations: { retry: false }, }, }); const TestWrapper = ({ children }: { children: React.ReactNode }) => { const queryClient = createTestQueryClient(); return ( {children} ); }; describe('DashboardLayout Component', () => { beforeEach(() => { vi.clearAllMocks(); }); it('renders layout with sidebar and header', () => { render(
Dashboard Content
, ); // Vérifier que le layout est présent const layout = screen .getByText('Dashboard Content') .closest('.flex.h-screen'); expect(layout).toBeInTheDocument(); }); it('renders children content in main section', () => { render(
Dashboard Content
, ); expect(screen.getByText('Dashboard Content')).toBeInTheDocument(); }); it('renders Sidebar component', () => { render(
Dashboard Content
, ); // Vérifier que la sidebar est présente (chercher un élément caractéristique) const sidebar = document.querySelector('aside'); expect(sidebar).toBeInTheDocument(); }); it('renders Header component', () => { render(
Dashboard Content
, ); // Vérifier que le header est présent const header = document.querySelector('header'); expect(header).toBeInTheDocument(); }); it('has correct layout structure with flex classes', () => { const { container } = render(
Dashboard Content
, ); const layout = container.querySelector('.flex.h-screen'); expect(layout).toBeInTheDocument(); const mainContent = container.querySelector('.flex-1.flex.flex-col'); expect(mainContent).toBeInTheDocument(); const main = container.querySelector('main.flex-1'); expect(main).toBeInTheDocument(); }); it('renders multiple children correctly', () => { render(
Child 1
Child 2
, ); expect(screen.getByText('Child 1')).toBeInTheDocument(); expect(screen.getByText('Child 2')).toBeInTheDocument(); }); });