import { render, screen } from '@testing-library/react' import userEvent from '@testing-library/user-event' import { axe } from 'vitest-axe' import RootError from './error' // Mock next/link to render a plain anchor vi.mock('next/link', () => ({ default: ({ href, children, ...props }: { href: string; children: React.ReactNode }) => ( {children} ), })) describe('RootError', () => { const error = new Error('Something broke') const reset = vi.fn() beforeEach(() => { reset.mockClear() }) it('renders error heading', () => { render() expect(screen.getByRole('heading', { name: 'Something went wrong' })).toBeInTheDocument() }) it('renders an alert region', () => { render() expect(screen.getByRole('alert')).toBeInTheDocument() }) it('renders try again button that calls reset', async () => { const user = userEvent.setup() render() const button = screen.getByRole('button', { name: /try again/i }) await user.click(button) expect(reset).toHaveBeenCalledOnce() }) it('renders a go home link', () => { render() const link = screen.getByRole('link', { name: /go home/i }) expect(link).toHaveAttribute('href', '/') }) it('shows error message in development', () => { vi.stubEnv('NODE_ENV', 'development') render() expect(screen.getByText('Something broke')).toBeInTheDocument() vi.unstubAllEnvs() }) it('passes axe accessibility check', async () => { const { container } = render() const results = await axe(container) expect(results).toHaveNoViolations() }) })