import '@testing-library/jest-dom'
import { cleanup, fireEvent, render } from '@testing-library/react'
import { axe, toHaveNoViolations } from 'jest-axe'
import { createRef } from 'react'
import { vi } from 'vitest'
import { PktBackLink } from './BackLink'
expect.extend(toHaveNoViolations)
afterEach(cleanup)
describe('PktBackLink', () => {
test('renders with default text and href', () => {
const { getByRole } = render()
const link = getByRole('link')
expect(link).toHaveTextContent('Forsiden')
expect(link).toHaveAttribute('href', '/')
})
test('renders with custom text and href', () => {
const { getByRole } = render()
const link = getByRole('link')
expect(link).toHaveTextContent('Custom Text')
expect(link).toHaveAttribute('href', '/custom-url')
})
test('calls onClick when clicked', () => {
const onClickMock = vi.fn()
const { getByText } = render()
fireEvent.click(getByText('Back'))
expect(onClickMock).toHaveBeenCalledTimes(1)
})
test('renders with default aria-label on nav', () => {
const { container } = render()
const nav = container.querySelector('nav')
expect(nav).toHaveAttribute('aria-label', 'Gå tilbake til forrige side')
})
test('renders with custom aria-label on nav', () => {
const { container } = render()
const nav = container.querySelector('nav')
expect(nav).toHaveAttribute('aria-label', 'Tilbake til oversikt')
})
test('forwards ref to nav element', () => {
const ref = createRef()
render()
expect(ref.current).toBeInstanceOf(HTMLElement)
expect(ref.current?.tagName).toBe('NAV')
})
test('supports custom renderLink', () => {
const { getByRole } = render(
(
)}
/>,
)
const button = getByRole('button')
expect(button).toHaveAttribute('data-href', '/test')
expect(button).toHaveTextContent('Tilbake')
})
describe('accessibility', () => {
test('renders with no wcag errors with axe', async () => {
const { container } = render()
const results = await axe(container)
expect(results).toHaveNoViolations()
})
})
})