UNPKG

@mozaic-ds/vue

Version:

Mozaic-Vue is the Vue.js implementation of ADEO Design system

92 lines (83 loc) 3.34 kB
import { mount } from '@vue/test-utils'; import { describe, it, expect } from 'vitest'; import MFileUploaderItem from './MFileUploaderItem.vue'; const globalStubs = { MButton: { props: ['ariaLabel'], inheritAttrs: false, emits: ['click'], template: '<button v-bind="$attrs" aria-label="Delete file" @click="$emit(\'click\')"><slot /></button>', }, MLinearProgressbarPercentage: { inheritAttrs: false, template: '<div class="progress" :data-value="$attrs.value"></div>', }, CheckCircle32: { template: '<i class="icon-check"></i>' }, WarningCircle32: { template: '<i class="icon-warning"></i>' }, Cross20: { template: '<i class="icon-cross"></i>' }, CrossCircleFilled20: { template: '<i class="icon-cross-filled"></i>' }, }; describe('MFileUploaderItem', () => { it('shows information details when information prop is set', () => { const wrapper = mount(MFileUploaderItem, { props: { file: { name: 'file.txt' }, information: 'Some info' }, global: { stubs: globalStubs }, }); const details = wrapper.find('.mc-file-uploader-item__details'); expect(details.exists()).toBe(true); expect(details.text()).toBe('Some info'); }); it('emits delete when inline delete button is clicked', async () => { const wrapper = mount(MFileUploaderItem, { props: { file: { name: 'file.txt' }, format: 'inline' }, global: { stubs: globalStubs }, }); const btn = wrapper.find('button[aria-label="Delete file"]'); expect(btn.exists()).toBe(true); await btn.trigger('click'); expect(wrapper.emitted()).toHaveProperty('delete'); }); it('emits delete when stacked delete button is clicked', async () => { const wrapper = mount(MFileUploaderItem, { props: { file: { name: 'file.txt' }, format: 'stacked' }, global: { stubs: globalStubs }, }); const btn = wrapper.find('button[aria-label="Delete file"]'); expect(btn.exists()).toBe(true); await btn.trigger('click'); expect(wrapper.emitted()).toHaveProperty('delete'); }); it('applies correct state modifier classes', async () => { // valid => default const wrapper = mount(MFileUploaderItem, { props: { file: { name: 'file.txt' }, valid: true }, global: { stubs: globalStubs }, }); expect(wrapper.classes()).not.toContain('mc-file-uploader-item--default'); // invalid => error await wrapper.setProps({ valid: false }); expect(wrapper.classes()).toContain('mc-file-uploader-item--error'); }); it('renders errorMessage prop and allows slot override', () => { const wrapperProp = mount(MFileUploaderItem, { props: { file: { name: 'file.txt' }, errorMessage: 'Prop error' }, global: { stubs: globalStubs }, }); expect( wrapperProp.find('.mc-file-uploader-item__error-message').text(), ).toContain('Prop error'); const wrapperSlot = mount(MFileUploaderItem, { props: { file: { name: 'file.txt' }, errorMessage: 'Prop error' }, slots: { errorMessage: '<span>Slot error</span>', name: '<span>Slot name</span>', information: '<span>Slot information</span>', }, global: { stubs: globalStubs }, }); expect( wrapperSlot.find('.mc-file-uploader-item__error-message').text(), ).toContain('Slot error'); }); });