UNPKG

@mozaic-ds/vue

Version:

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

115 lines (96 loc) 3.01 kB
import { mount } from '@vue/test-utils'; import { describe, it, expect } from 'vitest'; import MSelect from './MSelect.vue'; describe('Select.vue', () => { it('renders options correctly', () => { const options = [ { text: 'Option 1', value: '1' }, { text: 'Option 2', value: '2' }, { text: 'Option 3', value: '3' }, ]; const wrapper = mount(MSelect, { props: { id: 'test-select', modelValue: '1', options, }, }); const optionElements = wrapper.findAll('option'); expect(optionElements.length).toBe(options.length); expect(optionElements[0].text()).toBe('Option 1'); expect(optionElements[1].text()).toBe('Option 2'); expect(optionElements[2].text()).toBe('Option 3'); }); it('renders placeholder when provided', () => { const options = [ { text: 'Option 1', value: '1' }, { text: 'Option 2', value: '2' }, ]; const wrapper = mount(MSelect, { props: { id: 'test-select', modelValue: '', options, placeholder: 'Select an option', }, }); const placeholderOption = wrapper.find('option[disabled]'); expect(placeholderOption.exists()).toBe(true); expect(placeholderOption.text()).toBe('-- Select an option --'); }); it('binds and updates the modelValue correctly', async () => { const options = [ { text: 'Option 1', value: '1' }, { text: 'Option 2', value: '2' }, ]; const wrapper = mount(MSelect, { props: { id: 'test-select', modelValue: '1', options, }, }); await wrapper.find('select').setValue('2'); const emitted = wrapper.emitted('update:modelValue'); expect(emitted).toBeDefined(); expect(emitted!.length).toBe(1); expect(emitted![0]).toEqual(['2']); }); it('disables the select when the disabled prop is true', () => { const wrapper = mount(MSelect, { props: { id: 'test-select', modelValue: '1', options: [{ text: 'Option 1', value: '1' }], disabled: true, }, }); const select = wrapper.find('select'); expect(select.attributes('disabled')).toBeDefined(); }); it('applies the correct classes based on props', () => { const wrapper = mount(MSelect, { props: { id: 'test-select', modelValue: '1', options: [{ text: 'Option 1', value: '1' }], size: 's', isInvalid: true, }, }); const select = wrapper.find('select'); expect(select.classes()).toContain('mc-select--s'); expect(select.classes()).toContain('is-invalid'); }); it('does not apply invalid class if isInvalid is not set', () => { const wrapper = mount(MSelect, { props: { id: 'test-select', modelValue: '1', options: [{ text: 'Option 1', value: '1' }], }, }); const select = wrapper.find('select'); expect(select.classes()).not.toContain('is-invalid'); }); });