Advertisement
bebo231312312321

Untitled

Oct 18th, 2024
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* eslint-disable jsx-a11y/no-static-element-interactions */
  2. import React from 'react';
  3. import { render, screen, fireEvent, waitFor} from '@testing-library/react';
  4. import { vi, describe, it, expect, beforeEach } from 'vitest';
  5. import { AdminPanel } from './AdminPanel';
  6. import { BrowserRouter } from 'react-router-dom';
  7. import { I18nextProvider } from 'react-i18next';
  8. import i18n from '../../i18n';
  9.  
  10. vi.mock('react-router-dom', async () => {
  11.   const actual = await vi.importActual('react-router-dom');
  12.   return {
  13.     ...actual,
  14.     Navigate: vi.fn(() => null),
  15.   };
  16. });
  17.  
  18. vi.mock('./SideMenu', () => ({
  19.   default: vi.fn(() => <div data-testid="side-menu">Side Menu</div>),
  20. }));
  21.  
  22. vi.mock('./ThemeToggle/ThemeToggle', () => ({
  23.   ThemeToggle: vi.fn(() => <div data-testid="theme-toggle">Theme Toggle</div>),
  24. }));
  25.  
  26. vi.mock('./Dashboard/Dashboard', () => ({
  27.   Dashboard: vi.fn(() => <div data-testid="dashboard">Dashboard</div>),
  28. }));
  29.  
  30. vi.mock('./Users/UsersAdmin', () => ({
  31.   UsersAdmin: vi.fn(() => <div data-testid="users-admin">Users Admin</div>),
  32. }));
  33. vi.mock('./ThemeToggle/ThemeToggle', () => ({
  34.     ThemeToggle: ({ isDarkMode, toggleTheme }) => (
  35.       // eslint-disable-next-line jsx-a11y/click-events-have-key-events
  36.       <div data-testid="theme-toggle" onClick={toggleTheme}>
  37.         Theme Toggle: {isDarkMode ? 'Dark' : 'Light'}
  38.       </div>
  39.     ),
  40.   }));
  41.    
  42. const renderWithRouter = (ui, { route = '/' } = {}) => {
  43.     window.history.pushState({}, 'Test page', route);
  44.     return render(
  45.       <BrowserRouter>
  46.         <I18nextProvider i18n={i18n}>
  47.           {ui}
  48.         </I18nextProvider>
  49.       </BrowserRouter>
  50.     );
  51.   };
  52.  
  53.   describe('AdminPanel Component', () => {
  54.   beforeEach(() => {
  55.     vi.clearAllMocks();
  56.   });
  57.  
  58.     it('renders correctly', () => {
  59.       renderWithRouter(<AdminPanel />);
  60.       expect(screen.getByText('Web Devs')).toBeInTheDocument();
  61.       expect(screen.getByPlaceholderText('Търси ...')).toBeInTheDocument();
  62.       expect(screen.getByTestId('theme-toggle')).toBeInTheDocument();
  63.     });
  64.  
  65.     it('toggles side menu when menu button is clicked', async () => {
  66.         renderWithRouter(<AdminPanel />);
  67.         const menuButton = screen.getByTestId('menu-toggle');
  68.         fireEvent.click(menuButton);
  69.         await waitFor(() => {
  70.           expect(screen.getByTestId('side-menu')).toBeInTheDocument();
  71.         });
  72.       });  
  73.  
  74.     it('toggles profile menu when profile button is clicked', () => {
  75.       renderWithRouter(<AdminPanel />);
  76.       const profileButton = screen.getByRole('button', { name: 'Admin' });
  77.       fireEvent.click(profileButton);
  78.       expect(screen.getByText('Профил')).toBeInTheDocument();
  79.       expect(screen.getByText('Настройки')).toBeInTheDocument();
  80.       expect(screen.getByText('Изход')).toBeInTheDocument();
  81.     });
  82.  
  83.     it('changes theme when theme toggle is clicked', async () => {
  84.         renderWithRouter(<AdminPanel />);
  85.         const themeToggle = screen.getByTestId('theme-toggle');
  86.        
  87.         expect(themeToggle.textContent).toBe('Theme Toggle: Dark');
  88.         fireEvent.click(themeToggle);
  89.        
  90.         await waitFor(() => {
  91.           expect(themeToggle.textContent).toBe('Theme Toggle: Light');
  92.         }, { timeout: 2000 });
  93.    
  94.         fireEvent.click(themeToggle);
  95.    
  96.         await waitFor(() => {
  97.           expect(themeToggle.textContent).toBe('Theme Toggle: Dark');
  98.         }, { timeout: 2000 });
  99.       });
  100.  
  101.       //WAIT BRANCH WITH TRANSLATION FOR ADMIN PANEL
  102.      
  103.     // it('changes language when language button is clicked', async () => {
  104.     //   renderWithRouter(<AdminPanel />);
  105.     //   const languageButton = screen.getByRole('button', { name: '' });
  106.     //   fireEvent.click(languageButton);
  107.  
  108.     // });
  109.   });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement