import { render, screen } from '@testing-library/react'; import { MemoryRouter } from 'react-router'; import { describe, expect, it } from 'vitest'; import PageHeader from './PageHeader'; /** * The one page-title treatment. Rendered inside a MemoryRouter since an * optional `back` link uses react-router's `Link` directly. */ describe('PageHeader', () => { it('renders the title as the level-1 heading', () => { render( , ); expect(screen.getByRole('heading', { level: 1, name: 'Daily Challenge' })).toBeInTheDocument(); }); it('renders the description when given', () => { render( , ); expect(screen.getByText('One puzzle a day.')).toBeInTheDocument(); }); it('omits the description when not given', () => { render( , ); expect(screen.queryByText('One puzzle a day.')).toBeNull(); }); it('renders page-level actions', () => { render( Share} /> , ); expect(screen.getByRole('button', { name: 'Share' })).toBeInTheDocument(); }); it('omits the actions slot when not given', () => { render( , ); expect(screen.queryByRole('button')).toBeNull(); }); it('renders a back link with the given label and href', () => { render( , ); const back = screen.getByRole('link', { name: /Home/ }); expect(back).toHaveAttribute('href', '/'); }); it('omits the back link when not given', () => { render( , ); expect(screen.queryByRole('link')).toBeNull(); }); it('merges a custom className', () => { const { container } = render( , ); expect(container.firstElementChild?.className).toContain('mt-4'); expect(container.firstElementChild?.className).toContain('mb-6'); }); });