UNPKG

@mozaic-ds/vue

Version:

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

105 lines (83 loc) 2.94 kB
import { mount } from '@vue/test-utils'; import { describe, it, expect } from 'vitest'; import MLoader from './MLoader.vue'; describe('MLoader component', () => { it('should render correctly with the given props', () => { const wrapper = mount(MLoader, { props: { size: 's', appearance: 'accent', }, }); expect(wrapper.exists()).toBe(true); const loaderElement = wrapper.find('.mc-loader'); expect(loaderElement.exists()).toBe(true); expect(loaderElement.classes()).toContain('mc-loader--s'); expect(loaderElement.classes()).toContain('mc-loader--accent'); const svg = wrapper.find('svg.mc-loader__icon'); expect(svg.exists()).toBe(true); const circle = wrapper.find('circle.mc-loader__path'); expect(circle.exists()).toBe(true); }); it('changes class based on size prop', async () => { const wrapper = mount(MLoader, { props: { size: 's', }, }); let loader = wrapper.find('.mc-loader'); expect(loader.classes()).toContain('mc-loader--s'); await wrapper.setProps({ size: 'l' }); loader = wrapper.find('.mc-loader'); expect(loader.classes()).toContain('mc-loader--l'); }); it('changes class based on appearance prop', async () => { const wrapper = mount(MLoader, { props: { appearance: 'accent', }, }); let loader = wrapper.find('.mc-loader'); expect(loader.classes()).toContain('mc-loader--accent'); await wrapper.setProps({ appearance: 'inverse' }); loader = wrapper.find('.mc-loader'); expect(loader.classes()).toContain('mc-loader--inverse'); }); it('renders the loader text when text prop is provided', () => { const wrapper = mount(MLoader, { props: { text: 'Loading...', }, }); const textElement = wrapper.find('.mc-loader__text'); expect(textElement.exists()).toBe(true); expect(textElement.text()).toBe('Loading...'); }); it('does not render the loader text when text prop is not provided', () => { const wrapper = mount(MLoader); const textElement = wrapper.find('.mc-loader__text'); expect(textElement.exists()).toBe(false); }); it('sets the correct viewBox based on size prop', async () => { const wrapper = mount(MLoader, { props: { size: 's', }, }); const svg = wrapper.find('svg.mc-loader__icon'); expect(svg.attributes('viewBox')).toBe('0 0 24 24'); await wrapper.setProps({ size: 'l' }); expect(svg.attributes('viewBox')).toBe('0 0 64 64'); }); it('sets the correct circle radius based on size prop', async () => { const wrapper = mount(MLoader, { props: { size: 's', }, }); const circle = wrapper.find('circle.mc-loader__path'); expect(circle.attributes('r')).toBe('6'); await wrapper.setProps({ size: 'l' }); expect(circle.attributes('r')).toBe('19'); }); });