MeshiTrack/packages/web/tests/components/TopBar.test.tsx

54 lines
1.4 KiB
TypeScript
Raw Normal View History

2026-05-14 14:47:23 +09:00
import { describe, it, expect, vi } from 'vitest';
import { render, screen } from '@testing-library/react';
2026-05-19 14:09:03 +09:00
const themeMock = vi.hoisted(() => ({
theme: 'light',
toggleTheme: vi.fn(),
}));
2026-05-14 14:47:23 +09:00
vi.mock('@/components/ThemeProvider', () => ({
2026-05-19 14:09:03 +09:00
useTheme: () => themeMock,
2026-05-14 14:47:23 +09:00
}));
vi.mock('@/components/layout/PageHeaderContext', () => ({
usePageHeader: () => ({
header: {
title: 'Test Page',
subtitle: 'Subtitle here',
crumbs: ['Home', 'Test Page'],
actions: null,
},
}),
}));
2026-05-19 11:06:03 +09:00
import { TopBar } from '../../src/components/layout/TopBar';
2026-05-14 14:47:23 +09:00
describe('TopBar', () => {
it('renders title and subtitle', () => {
render(<TopBar />);
expect(screen.getByRole('heading', { level: 1 })).toHaveTextContent('Test Page');
expect(screen.getByText('Subtitle here')).toBeInTheDocument();
});
it('renders breadcrumbs', () => {
render(<TopBar />);
expect(screen.getByText('Home')).toBeInTheDocument();
});
it('renders search input', () => {
render(<TopBar />);
expect(screen.getByPlaceholderText(/Search medicines/)).toBeInTheDocument();
});
it('renders theme toggle button', () => {
render(<TopBar />);
expect(screen.getByLabelText('Toggle theme')).toBeInTheDocument();
});
2026-05-19 14:09:03 +09:00
it('renders sun icon when theme is dark', () => {
themeMock.theme = 'dark';
render(<TopBar />);
expect(screen.getByLabelText('Toggle theme')).toBeInTheDocument();
});
2026-05-14 14:47:23 +09:00
});