import { describe, it, expect } from 'vitest'
import { mount } from '@vue/test-utils'
import { axe } from 'vitest-axe'
import { assertNoA11yViolations } from '@tests/unit/accessibility/axeUtils'
import SyHeading from './SyHeading.vue'
describe('SyHeading', () => {
it('renders default heading level 2', () => {
const wrapper = mount(SyHeading, {
slots: {
default: 'Test heading',
},
})
expect(wrapper.find('h2').exists()).toBe(true)
expect(wrapper.text()).toBe('Test heading')
expect(wrapper.classes()).toContain('sy-heading')
})
it('renders custom heading levels', () => {
const levels = [1, 2, 3, 4, 5, 6] as const
levels.forEach((level) => {
const wrapper = mount(SyHeading, {
props: {
level,
},
slots: {
default: `Heading level ${level}`,
},
})
expect(wrapper.find(`h${level}`).exists()).toBe(true)
expect(wrapper.text()).toBe(`Heading level ${level}`)
})
})
it('applies correct CSS class', () => {
const wrapper = mount(SyHeading, {
slots: {
default: 'Test heading',
},
})
expect(wrapper.classes()).toContain('sy-heading')
})
it('renders complex content', () => {
const wrapper = mount(SyHeading, {
slots: {
default: 'Complex content',
},
})
expect(wrapper.text()).toBe('Complex content')
})
it('should not have any accessibility violations', async () => {
const wrapper = mount(SyHeading, {
props: {
level: 1,
},
slots: {
default: 'Main heading',
},
})
const results = await axe(wrapper.element, {
rules: {
region: { enabled: false },
},
})
assertNoA11yViolations(results, 'SyHeading - main heading')
})
it('should not have accessibility violations for all heading levels', async () => {
const levels = [1, 2, 3, 4, 5, 6] as const
for (const level of levels) {
const wrapper = mount(SyHeading, {
props: {
level,
},
slots: {
default: `Heading level ${level}`,
},
})
const results = await axe(wrapper.element, {
rules: {
region: { enabled: false },
},
})
assertNoA11yViolations(results, `SyHeading - level ${level}`)
}
})
it('should not have accessibility violations with complex content', async () => {
const wrapper = mount(SyHeading, {
props: {
level: 2,
},
slots: {
default: 'Heading with emphasis and strong text',
},
})
const results = await axe(wrapper.element, {
rules: {
region: { enabled: false },
},
})
assertNoA11yViolations(results, 'SyHeading - complex content')
})
})