Initial commit
This commit is contained in:
		
							
								
								
									
										70
									
								
								frontend/src/components/Layout.test.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								frontend/src/components/Layout.test.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,70 @@ | ||||
| import React from 'react'; | ||||
| import { render, screen } from '@testing-library/react'; | ||||
| import { BrowserRouter } from 'react-router-dom'; | ||||
| import Layout from './Layout'; | ||||
|  | ||||
| // Mock the AuthContext | ||||
| const mockUseAuth = { | ||||
|   user: { | ||||
|     id: '1', | ||||
|     firstName: 'John', | ||||
|     lastName: 'Doe', | ||||
|     email: 'john@example.com', | ||||
|     role: 'candidate' | ||||
|   }, | ||||
|   logout: jest.fn() | ||||
| }; | ||||
|  | ||||
| jest.mock('../contexts/AuthContext', () => ({ | ||||
|   useAuth: () => mockUseAuth | ||||
| })); | ||||
|  | ||||
| // Mock react-router-dom | ||||
| jest.mock('react-router-dom', () => ({ | ||||
|   ...jest.requireActual('react-router-dom'), | ||||
|   useLocation: () => ({ pathname: '/dashboard' }), | ||||
|   Link: ({ children, to }) => <a href={to}>{children}</a>, | ||||
|   Outlet: () => <div data-testid="outlet">Outlet</div> | ||||
| })); | ||||
|  | ||||
| const renderWithRouter = (component) => { | ||||
|   return render( | ||||
|     <BrowserRouter> | ||||
|       {component} | ||||
|     </BrowserRouter> | ||||
|   ); | ||||
| }; | ||||
|  | ||||
| describe('Layout', () => { | ||||
|   it('renders the layout with user information', () => { | ||||
|     renderWithRouter(<Layout />); | ||||
|      | ||||
|     expect(screen.getByText('MysteryApp-Cursor')).toBeInTheDocument(); | ||||
|     expect(screen.getByText('John Doe')).toBeInTheDocument(); | ||||
|     expect(screen.getByText('candidate')).toBeInTheDocument(); | ||||
|   }); | ||||
|  | ||||
|   it('renders navigation items for candidate role', () => { | ||||
|     renderWithRouter(<Layout />); | ||||
|      | ||||
|     expect(screen.getByText('Dashboard')).toBeInTheDocument(); | ||||
|     expect(screen.getByText('Jobs')).toBeInTheDocument(); | ||||
|     expect(screen.getByText('Applications')).toBeInTheDocument(); | ||||
|     expect(screen.getByText('Resumes')).toBeInTheDocument(); | ||||
|   }); | ||||
|  | ||||
|   it('renders logout button', () => { | ||||
|     renderWithRouter(<Layout />); | ||||
|      | ||||
|     expect(screen.getByText('Logout')).toBeInTheDocument(); | ||||
|   }); | ||||
|  | ||||
|   it('calls logout when logout button is clicked', () => { | ||||
|     renderWithRouter(<Layout />); | ||||
|      | ||||
|     const logoutButton = screen.getByText('Logout'); | ||||
|     logoutButton.click(); | ||||
|      | ||||
|     expect(mockUseAuth.logout).toHaveBeenCalled(); | ||||
|   }); | ||||
| }); | ||||
		Reference in New Issue
	
	Block a user