import '@testing-library/jest-dom'
import { render, screen, waitFor } from '@testing-library/react'
import { axe, toHaveNoViolations } from 'jest-axe'
import { createRef } from 'react'
import { PktHeading } from './Heading'
expect.extend(toHaveNoViolations)
describe('PktHeading', () => {
test('renders without errors', async () => {
render()
await window.customElements.whenDefined('pkt-heading')
})
test('renders with different levels', async () => {
const { container } = render(
<>
Heading 1
Heading 2
Heading 3
>,
)
await window.customElements.whenDefined('pkt-heading')
const headings = container.querySelectorAll('pkt-heading')
expect(headings[0]).toHaveAttribute('aria-level', '1')
expect(headings[1]).toHaveAttribute('aria-level', '2')
expect(headings[2]).toHaveAttribute('aria-level', '3')
})
test('renders with different sizes', async () => {
const ref = createRef()
const { container } = render(Large Heading)
await window.customElements.whenDefined('pkt-heading')
const headingElement = container.querySelector('pkt-heading')
expect(headingElement).toHaveClass('pkt-heading--xlarge')
expect(headingElement).toHaveAttribute('size', 'xlarge')
})
test('renders with visually hidden prop', async () => {
const { container } = render(Hidden Heading)
await window.customElements.whenDefined('pkt-heading')
const headingElement = container.querySelector('pkt-heading')
expect(headingElement).toHaveClass('pkt-sr-only')
expect(headingElement).toHaveAttribute('visuallyHidden')
})
test('renders with align props', async () => {
const { container } = render(Center Heading)
await window.customElements.whenDefined('pkt-heading')
const headingElement = container.querySelector('pkt-heading')
expect(headingElement).toHaveAttribute('align', 'center')
})
describe('accessibility', () => {
it('renders with no wcag errors with axe', async () => {
const { container } = render(
Accessible Heading
,
)
await window.customElements.whenDefined('pkt-heading')
const results = await axe(container)
expect(results).toHaveNoViolations()
})
})
})