Barazo default frontend
barazo.forum
1import { render, screen } from '@testing-library/react'
2import userEvent from '@testing-library/user-event'
3import { axe } from 'vitest-axe'
4import AdminError from './error'
5
6vi.mock('next/link', () => ({
7 default: ({ href, children, ...props }: { href: string; children: React.ReactNode }) => (
8 <a href={href} {...props}>
9 {children}
10 </a>
11 ),
12}))
13
14vi.mock('next/navigation', () => ({
15 usePathname: () => '/admin/categories',
16}))
17
18describe('AdminError', () => {
19 const error = new Error('Admin panel broke')
20 const reset = vi.fn()
21
22 beforeEach(() => {
23 reset.mockClear()
24 })
25
26 it('renders admin error heading', () => {
27 render(<AdminError error={error} reset={reset} />)
28 expect(screen.getByRole('heading', { name: 'Admin error' })).toBeInTheDocument()
29 })
30
31 it('renders an alert region', () => {
32 render(<AdminError error={error} reset={reset} />)
33 expect(screen.getByRole('alert')).toBeInTheDocument()
34 })
35
36 it('renders try again button that calls reset', async () => {
37 const user = userEvent.setup()
38 render(<AdminError error={error} reset={reset} />)
39 const button = screen.getByRole('button', { name: /try again/i })
40 await user.click(button)
41 expect(reset).toHaveBeenCalledOnce()
42 })
43
44 it('renders a dashboard link', () => {
45 render(<AdminError error={error} reset={reset} />)
46 const link = screen.getByRole('link', { name: /dashboard/i })
47 expect(link).toHaveAttribute('href', '/admin')
48 })
49
50 it('passes axe accessibility check', async () => {
51 const { container } = render(<AdminError error={error} reset={reset} />)
52 const results = await axe(container)
53 expect(results).toHaveNoViolations()
54 })
55})