import { mount, config } from '@vue/test-utils' import { describe, it, expect } from 'vitest' import SuiChip from './SuiChip.vue' config.global.stubs = { SuiIcon: { template: '
Mocked Icon
', props: ['size', 'inline', 'role', 'class'] } } describe('SuiChip.vue', () => { it('soll das Label korrekt rendern und die Basis-Klasse anwenden', () => { const wrapper = mount(SuiChip, { props: { label: 'Test-Chip' } }) expect(wrapper.classes()).toContain('sui-chip') expect(wrapper.text()).toContain('Test-Chip') }) it('soll das Icon rendern, wenn die "icon" Prop gesetzt ist', () => { const wrapper = mount(SuiChip, { props: { label: 'Mit Icon', icon: 'settings' } }) const icon = wrapper.find('[data-testid="sui-icon"]') expect(icon.exists()).toBe(true) expect(icon.attributes('data-shape')).toBe('settings') }) it('soll KEIN Icon rendern, wenn die "icon" Prop nicht gesetzt ist', () => { const wrapper = mount(SuiChip, { props: { label: 'Ohne Icon', icon: '' } }) expect(wrapper.findAll('[data-testid="sui-icon"]').length).toBe(0) }) it('soll den Entfernen-Button rendern, wenn "removable" true ist', () => { const wrapper = mount(SuiChip, { props: { label: 'Löschbar', removable: true } }) const button = wrapper.find('button.sui-chip--button-remove') expect(button.exists()).toBe(true) const buttonIcon = button.find('[data-shape="decline"]') expect(buttonIcon.exists()).toBe(true) }) it('soll ein "remove" Event emittieren, wenn der Button geklickt wird', async () => { const wrapper = mount(SuiChip, { props: { label: 'Klick mich', removable: true } }) await wrapper.find('button').trigger('click') expect(wrapper.emitted('remove')).toBeTruthy() expect(wrapper.emitted('remove').length).toBe(1) }) it('soll den Entfernen-Button NICHT rendern, wenn "removable" false ist', () => { const wrapper = mount(SuiChip, { props: { label: 'Nicht löschbar', removable: false } }) expect(wrapper.find('button').exists()).toBe(false) }) it('soll die Klasse "disabled" anwenden und den Entfernen-Button ausblenden, wenn "disabled" true ist', () => { const wrapper = mount(SuiChip, { props: { label: 'Deaktiviert', disabled: true, removable: true } }) expect(wrapper.classes()).toContain('disabled') expect(wrapper.find('button').exists()).toBe(false) }) it('soll KEINE "remove" Events emittieren, wenn disabled ist (zusätzlicher Check)', async () => { const wrapper = mount(SuiChip, { props: { label: 'Deaktiviert', disabled: true, removable: true } }) await wrapper.trigger('click') expect(wrapper.emitted('remove')).toBeUndefined() }) it('soll die Hintergrundfarbe basierend auf der "hex" Prop setzen', () => { const wrapper = mount(SuiChip, { props: { label: 'Hex', hex: '#FF00FF', color: 'red' } }) expect(wrapper.attributes('style')).toContain('background-color: rgb(255, 0, 255);') }) it('soll die Hintergrundfarbe basierend auf der "color" Prop setzen', () => { const wrapper = mount(SuiChip, { props: { label: 'Color Var', color: 'success-color' } }) expect(wrapper.attributes('style')).toContain('background-color: var(--color--success-color);') }) it('soll die Standard-Hintergrundfarbe setzen, wenn weder hex noch color gesetzt sind', () => { const wrapper = mount(SuiChip, { props: { label: 'Default' } }) expect(wrapper.attributes('style')).toContain('background-color: var(--color--font-primary);') }) })