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 AuthError 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
14describe('AuthError', () => {
15 const error = new Error('OAuth token expired')
16 const reset = vi.fn()
17
18 beforeEach(() => {
19 reset.mockClear()
20 })
21
22 it('renders authentication error heading', () => {
23 render(<AuthError error={error} reset={reset} />)
24 expect(screen.getByRole('heading', { name: 'Authentication error' })).toBeInTheDocument()
25 })
26
27 it('renders an alert region', () => {
28 render(<AuthError error={error} reset={reset} />)
29 expect(screen.getByRole('alert')).toBeInTheDocument()
30 })
31
32 it('renders try again button that calls reset', async () => {
33 const user = userEvent.setup()
34 render(<AuthError error={error} reset={reset} />)
35 const button = screen.getByRole('button', { name: /try again/i })
36 await user.click(button)
37 expect(reset).toHaveBeenCalledOnce()
38 })
39
40 it('renders a log in again link', () => {
41 render(<AuthError error={error} reset={reset} />)
42 const link = screen.getByRole('link', { name: /log in again/i })
43 expect(link).toHaveAttribute('href', '/login')
44 })
45
46 it('passes axe accessibility check', async () => {
47 const { container } = render(<AuthError error={error} reset={reset} />)
48 const results = await axe(container)
49 expect(results).toHaveNoViolations()
50 })
51})