Barazo default frontend barazo.forum
at main 55 lines 1.7 kB view raw
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})