import '@testing-library/jest-dom'
import { fireEvent, render, screen } from '@testing-library/react'
import { axe, toHaveNoViolations } from 'jest-axe'
import { vi } from 'vitest'
import { UserMenuItem } from '../header/types'
import { PktHeaderUserMenu } from './UserMenu'
expect.extend(toHaveNoViolations)
describe('PktHeaderUserMenu', () => {
const mockUser = {
name: 'Ola Nordmann',
}
const mockRepresenting = {
name: 'Oslo Kommune',
orgNumber: '123456789',
}
const menuItems: UserMenuItem[] = [
{ title: 'Profil', target: '/profil', iconName: 'user' },
{ title: 'Bookinger', target: '/bookinger', iconName: 'heart' },
{ title: 'Innstillinger', target: () => {}, iconName: 'settings' },
]
it('has no a11y violations', async () => {
const { container } = render(
,
)
const results = await axe(container)
expect(results).toHaveNoViolations()
})
it('renders user section with default label when not provided', () => {
render()
expect(screen.getByText('PÄlogget som')).toBeInTheDocument()
expect(screen.getByText('Ola Nordmann')).toBeInTheDocument()
})
it('renders representing section with default label when not provided', () => {
render()
expect(screen.getByText('Representerer')).toBeInTheDocument()
expect(screen.getByText('Oslo Kommune')).toBeInTheDocument()
expect(screen.getByText('Org.nr. 123456789')).toBeInTheDocument()
})
it('renders provided links as list items', () => {
render()
expect(screen.getByRole('navigation')).toHaveClass('pkt-user-menu')
const lists = screen.getAllByRole('list')
expect(lists.length).toBeGreaterThan(1)
expect(screen.getAllByRole('listitem').length).toBeGreaterThan(0)
expect(screen.getByText('Profil')).toBeInTheDocument()
expect(screen.getByText('Innstillinger')).toBeInTheDocument()
})
it('calls logoutOnClick when logout button is rendered and clicked', () => {
const onLogout = vi.fn()
render()
const logoutButton = screen.getByText('Logg ut')
fireEvent.click(logoutButton)
expect(onLogout).toHaveBeenCalled()
})
it('supports button-type menu items and triggers their onClick', () => {
const onClick = vi.fn()
const items: UserMenuItem[] = [{ title: 'Konto', target: onClick, iconName: 'user' }]
render()
const btn = screen.getByText('Konto')
fireEvent.click(btn)
expect(onClick).toHaveBeenCalled()
})
})