import '@testing-library/jest-dom' import { fireEvent, render, screen } from '@testing-library/react' import { axe, toHaveNoViolations } from 'jest-axe' import { PktSelect } from './Select' expect.extend(toHaveNoViolations) describe('PktSelect', () => { test('renders select field with correct props', async () => { const { container } = render( , ) const select = container.querySelector('#inputIdeas-input') as HTMLSelectElement | null expect(select).toBeInTheDocument() expect(select).toHaveAttribute('id', 'inputIdeas-input') expect(select?.tagName).toBe('SELECT') expect(select?.id).toBe('inputIdeas-input') const inputWrapper = container.querySelector('.pkt-inputwrapper') as HTMLDivElement | null expect(inputWrapper).toBeInTheDocument() expect(inputWrapper).toHaveTextContent('Input Label') const label = container.querySelector('label') as HTMLLabelElement | null expect(label).toBeInTheDocument() expect(label).toHaveAttribute('for', 'inputIdeas-input') }) test('renders error message when hasError prop is true', async () => { render( , ) const alertContainer = screen.getByRole('alert') const errorMessageId = 'inputId-input-error' // når https://github.com/oslokommune/punkt/issues/3092 er fiksa: screen.getByRole('combobox').getAttribute('aria-errormessage') expect(alertContainer).toHaveAttribute('id', errorMessageId) expect(alertContainer).toHaveTextContent('Input error') }) describe('PktSelect', () => { test('toggles helptext class', async () => { const { getByText, container } = render( , ) const expandButton = getByText('Les mer').closest('button') as HTMLButtonElement const helptextElement = container.querySelector('.pkt-inputwrapper__helptext-expandable-closed') await fireEvent.click(expandButton) expect(helptextElement).toHaveClass('pkt-inputwrapper__helptext-expandable-open') await fireEvent.click(expandButton) expect(helptextElement).toHaveClass('pkt-inputwrapper__helptext-expandable-closed') }) }) describe('accessibility', () => { it('renders with no wcag errors with axe', async () => { const { container } = render() const results = await axe(container) expect(results).toHaveNoViolations() }) }) })