UNPKG

@mozaic-ds/vue

Version:

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

122 lines (95 loc) 3.67 kB
import { describe, it, expect } from 'vitest'; import { mount } from '@vue/test-utils'; import MTileExpandable from './MTileExpandable.vue'; describe('MTileExpandable', () => { it('applies appearance modifier when not primary', () => { const wrapper = mount(MTileExpandable, { props: { appearance: 'secondary' }, }); expect(wrapper.classes()).toContain('mc-tile--secondary'); }); it('applies bordered class when bordered is true', () => { const wrapper = mount(MTileExpandable, { props: { bordered: true }, }); expect(wrapper.classes()).toContain('mc-tile--bordered'); }); it('applies trigger mode class when trigger is not container', () => { const wrapper = mount(MTileExpandable, { props: { trigger: 'icon' }, }); expect(wrapper.classes()).toContain('mc-tile--trigger-icon'); }); it('does not apply trigger mode class when trigger is container', () => { const wrapper = mount(MTileExpandable, { props: { trigger: 'container' }, }); expect( wrapper.classes().some((c) => c.startsWith('mc-tile--trigger-')), ).toBe(false); }); it('renders container as button when trigger is container', async () => { const wrapper = mount(MTileExpandable, { props: { trigger: 'container' }, }); const header = wrapper.find('.mc-tile__header'); expect(header.element.tagName).toBe('BUTTON'); expect(header.attributes('aria-controls')).toBeTruthy(); expect(header.attributes('aria-expanded')).toBe('false'); await header.trigger('click'); expect(header.attributes('aria-expanded')).toBe('true'); }); it('renders icon button when trigger is icon', async () => { const wrapper = mount(MTileExpandable, { props: { trigger: 'icon' }, }); const iconButton = wrapper.findComponent({ name: 'MIconButton' }); expect(iconButton.exists()).toBe(true); const header = wrapper.find('.mc-tile__header'); expect(header.element.tagName).toBe('DIV'); expect(wrapper.find('.mc-tile__content').attributes('aria-hidden')).toBe( 'true', ); await iconButton.trigger('click'); expect(wrapper.find('.mc-tile__content').attributes('aria-hidden')).toBe( 'false', ); }); it('renders action button when trigger is button', async () => { const wrapper = mount(MTileExpandable, { props: { trigger: 'button', label: 'Expand' }, }); const button = wrapper.findComponent({ name: 'MButton' }); expect(button.exists()).toBe(true); expect(button.text()).toContain('Expand'); await button.trigger('click'); expect(wrapper.find('.mc-tile__content').attributes('aria-hidden')).toBe( 'false', ); }); it('toggles open state when clicking header in container mode', async () => { const wrapper = mount(MTileExpandable, { props: { trigger: 'container' }, }); const header = wrapper.find('.mc-tile__header'); expect(wrapper.find('.mc-tile__content').attributes('aria-hidden')).toBe( 'true', ); await header.trigger('click'); expect(wrapper.find('.mc-tile__content').attributes('aria-hidden')).toBe( 'false', ); await header.trigger('click'); expect(wrapper.find('.mc-tile__content').attributes('aria-hidden')).toBe( 'true', ); }); it('content slot has id matching aria-controls', () => { const wrapper = mount(MTileExpandable, { props: { trigger: 'container' }, }); const header = wrapper.find('.mc-tile__header'); const content = wrapper.find('.mc-tile__content'); expect(content.attributes('id')).toBe(header.attributes('aria-controls')); }); });