import { describe, it, expect } from 'vitest'
import { mount } from '@vue/test-utils'
import SyIcon from './SyIcon.vue'
describe('SyIcon', () => {
// Test de rendu de base
it('rend correctement une icône', () => {
const wrapper = mount(SyIcon, {
props: {
icon: 'mdi-home',
decorative: true, // Marquer l'icône comme décorative pour éviter les avertissements d'accessibilité
},
global: {
stubs: {
'v-icon': {
template: '',
props: ['color', 'size', 'role', 'aria-hidden', 'aria-label'],
},
},
directives: {
'rgaa-svg-fix': () => {},
},
},
})
expect(wrapper.find('.v-icon').exists()).toBe(true)
expect(wrapper.text()).toContain('mdi-home')
})
// Test pour une icône décorative (par défaut)
it('applique les attributs ARIA corrects pour une icône décorative', () => {
const wrapper = mount(SyIcon, {
props: {
icon: 'mdi-home',
decorative: true, // Explicitement défini comme décoratif
},
global: {
stubs: {
'v-icon': {
template: '',
props: ['color', 'size', 'role', 'aria-hidden', 'aria-label'],
},
},
directives: {
'rgaa-svg-fix': () => {},
},
},
})
// Vérifions les props passées au composant SyIcon
expect(wrapper.props().decorative).toBe(true) // L'icône est décorative
expect(wrapper.props().label).toBeUndefined() // Pas de label pour une icône décorative
})
// Test pour une icône informative
it('applique les attributs ARIA corrects pour une icône informative', () => {
const wrapper = mount(SyIcon, {
props: {
icon: 'mdi-alert',
decorative: false,
label: 'Alerte importante',
},
global: {
stubs: {
'v-icon': {
template: '',
props: ['color', 'size', 'role', 'aria-hidden', 'aria-label'],
},
},
directives: {
'rgaa-svg-fix': () => {},
},
},
})
// Vérifions les props passées au composant SyIcon
expect(wrapper.props().decorative).toBe(false) // Icône informative
expect(wrapper.props().label).toBe('Alerte importante') // Label défini
})
// Test pour une icône avec couleur
it('transmet correctement la propriété color', () => {
const wrapper = mount(SyIcon, {
props: {
icon: 'mdi-home',
decorative: true, // Marquer l'icône comme décorative pour éviter les avertissements d'accessibilité
color: 'primary',
},
global: {
stubs: {
'v-icon': {
template: '',
props: ['color', 'size', 'role', 'aria-hidden', 'aria-label'],
},
},
directives: {
'rgaa-svg-fix': () => {},
},
},
})
// Vérifions la prop color passée au composant SyIcon
expect(wrapper.props().color).toBe('primary')
})
// Test pour une icône avec taille
it('transmet correctement la propriété size', () => {
const wrapper = mount(SyIcon, {
props: {
icon: 'mdi-home',
decorative: true, // Marquer l'icône comme décorative pour éviter les avertissements d'accessibilité
size: 'large',
},
global: {
stubs: {
'v-icon': {
template: '',
props: ['color', 'size', 'role', 'aria-hidden', 'aria-label'],
},
},
directives: {
'rgaa-svg-fix': () => {},
},
},
})
// Vérifions la prop size passée au composant SyIcon
expect(wrapper.props().size).toBe('large')
})
})