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