@mozaic-ds/vue
Version:
Mozaic-Vue is the Vue.js implementation of ADEO Design system
78 lines (66 loc) • 2.55 kB
text/typescript
import { mount } from '@vue/test-utils';
import { describe, it, expect } from 'vitest';
import MCheckListMenu, { type CheckListMenuItem } from './MCheckListMenu.vue';
import CheckCircleFilled24 from '@mozaic-ds/icons-vue/src/components/CheckCircleFilled24/CheckCircleFilled24.vue';
import type { MenuItem } from '../builtinmenu/MBuiltInMenu.vue';
const StubMBuiltInMenu = {
name: 'MBuiltInMenu',
props: ['modelValue', 'items', 'outlined'],
emits: ['update:modelValue'],
template: '<div />',
};
describe('MCheckListMenu', () => {
it('maps items and sets icon for checked items', () => {
const items: CheckListMenuItem[] = [
{
label: 'One',
checked: true,
href: '/one',
to: undefined,
target: undefined,
},
{
label: 'Two',
checked: false,
href: undefined,
to: '/two',
target: '_blank',
},
];
const wrapper = mount(MCheckListMenu, {
props: { items, modelValue: undefined },
global: { components: { MBuiltInMenu: StubMBuiltInMenu } },
});
const builtIn = wrapper.findComponent(StubMBuiltInMenu);
const passedItems = builtIn.props('items') as MenuItem[];
expect(passedItems).toHaveLength(2);
expect(passedItems[0].label).toBe('One');
expect(passedItems[0].icon).toBe(CheckCircleFilled24);
expect(passedItems[0].href).toBe('/one');
expect(passedItems[1].label).toBe('Two');
expect(passedItems[1].icon).toBeUndefined();
expect(passedItems[1].to).toBe('/two');
expect(passedItems[1].target).toBe('_blank');
});
it('forwards outlined prop to MBuiltInMenu', () => {
const items = [{ label: 'A', checked: false }];
const wrapper = mount(MCheckListMenu, {
props: { items, modelValue: undefined, outlined: true },
global: { components: { MBuiltInMenu: StubMBuiltInMenu } },
});
const builtIn = wrapper.findComponent(StubMBuiltInMenu);
expect(builtIn.props('outlined')).toBe(true);
});
it('emits update:modelValue when inner menu updates modelValue', async () => {
const items = [{ label: 'X', checked: false }];
const wrapper = mount(MCheckListMenu, {
props: { items, modelValue: undefined },
global: { components: { MBuiltInMenu: StubMBuiltInMenu } },
});
const builtIn = wrapper.findComponent(StubMBuiltInMenu);
await builtIn.vm.$emit('update:modelValue', 3);
const emitted = wrapper.emitted('update:modelValue');
expect(emitted).toBeTruthy();
expect(emitted![0]).toEqual([3]);
});
});