Files
MOHPortal/frontend/src/components/Layout.test.js
ReachableCEO 252775faf3
Some checks failed
CI / Backend Tests (push) Failing after 2m41s
CI / Frontend Tests (push) Successful in 2m14s
CI / Build Docker Images (push) Has been skipped
chore: sync infra docs and coverage
2025-10-16 22:41:22 -05:00

59 lines
1.7 KiB
JavaScript

import React from 'react';
import { render, screen } from '@testing-library/react';
import { MemoryRouter } 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>
}));
describe('Layout', () => {
const renderLayout = () => {
return render(
<MemoryRouter>
<Layout />
</MemoryRouter>
);
};
it('renders the layout with user information', () => {
renderLayout();
expect(screen.getAllByText('MerchantsOfHope-SupplyANdDemandPortal').length).toBeGreaterThan(0);
expect(screen.getAllByText('John Doe').length).toBeGreaterThan(0);
expect(screen.getAllByText('candidate').length).toBeGreaterThan(0);
});
it('renders navigation items for candidate role', () => {
renderLayout();
expect(screen.getAllByText('Dashboard').length).toBeGreaterThan(0);
expect(screen.getAllByText('Jobs').length).toBeGreaterThan(0);
expect(screen.getAllByText('Applications').length).toBeGreaterThan(0);
expect(screen.getAllByText('Resumes').length).toBeGreaterThan(0);
});
it('renders logout button', () => {
renderLayout();
expect(screen.getByRole('button', { name: /logout/i })).toBeInTheDocument();
});
});