UNPKG

@mozaic-ds/vue

Version:

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

125 lines (106 loc) 4.05 kB
import { mount } from '@vue/test-utils'; import MStepperInline from './MStepperInline.vue'; import { describe, it, expect } from 'vitest'; describe('MStepperInline', () => { const defaultSteps = [ { id: '1', label: 'Step 1' }, { id: '2', label: 'Step 2' }, { id: '3', label: 'Step 3' }, ]; it('sets aria-current="step" on the current step item', () => { const wrapper = mount(MStepperInline, { props: { currentStep: '2', steps: defaultSteps }, }); const items = wrapper.findAll('.mc-stepper-inline__item'); expect(items[1].attributes('aria-current')).toBe('step'); expect(items[0].attributes('aria-current')).toBeUndefined(); expect(items[2].attributes('aria-current')).toBeUndefined(); }); it('renders correctly with default props', () => { const wrapper = mount(MStepperInline, { props: { currentStep: '1', steps: defaultSteps, }, }); expect(wrapper.exists()).toBe(true); expect(wrapper.findAll('.mc-stepper-inline__item').length).toBe( defaultSteps.length, ); expect(wrapper.find('.mc-stepper-inline__label').text()).toContain( 'Step 1', ); }); it('displays additional information when provided', () => { const stepsWithInfo = [ { id: '1', label: 'Step 1', additionalInfo: 'Info 1' }, { id: '1', label: 'Step 2', additionalInfo: 'Info 2' }, ]; const wrapper = mount(MStepperInline, { props: { currentStep: '1', steps: stepsWithInfo, }, }); expect(wrapper.findAll('.mc-stepper-inline__additional').length).toBe( stepsWithInfo.length, ); expect(wrapper.find('.mc-stepper-inline__additional').text()).toBe( 'Info 1', ); }); describe('currentStep as a string', () => { it('marks the correct step as active', async () => { const wrapper = mount(MStepperInline, { props: { currentStep: '2', steps: defaultSteps, }, }); const labels = wrapper.findAll('.mc-stepper-inline__label'); expect(labels[1].classes()).toContain('is-current'); expect(labels[0].classes()).not.toContain('is-current'); await wrapper.setProps({ currentStep: '3' }); expect(labels[2].classes()).toContain('is-current'); }); it('marks completed steps', () => { const wrapper = mount(MStepperInline, { props: { currentStep: '3', steps: defaultSteps, }, }); const items = wrapper.findAll('.mc-stepper-inline__item'); expect(items[0].classes()).toContain('is-completed'); expect(items[1].classes()).toContain('is-completed'); expect(items[2].classes()).not.toContain('is-completed'); }); }); describe('currentStep as number', () => { it('clamps to the first step when currentStep is below 1', () => { const wrapper = mount(MStepperInline, { props: { currentStep: 0, steps: defaultSteps }, }); const circles = wrapper.findAll('.mc-stepper-inline__circle'); expect(circles[0].classes()).toContain('is-current'); }); it('clamps to the last step when currentStep exceeds steps length', () => { const wrapper = mount(MStepperInline, { props: { currentStep: 99, steps: defaultSteps }, }); const items = wrapper.findAll('.mc-stepper-inline__item'); expect(items[items.length - 1].classes()).not.toContain('is-completed'); expect(items[0].classes()).toContain('is-completed'); expect(items[1].classes()).toContain('is-completed'); }); it('sets the correct step as current when currentStep is a valid number', () => { const wrapper = mount(MStepperInline, { props: { currentStep: 2, steps: defaultSteps }, }); const labels = wrapper.findAll('.mc-stepper-inline__label'); expect(labels[1].classes()).toContain('is-current'); expect(labels[0].classes()).not.toContain('is-current'); expect(labels[2].classes()).not.toContain('is-current'); }); }); });