@gitlab/ui
Version:
GitLab UI Components
103 lines (79 loc) • 3.17 kB
JavaScript
import { shallowMount } from '@vue/test-utils';
import Drawer from './drawer.vue';
describe('drawer component', () => {
let wrapper;
const mountWithOpts = ({ props = { open: true }, slots = {} }) => {
wrapper = shallowMount(Drawer, { propsData: props, slots });
};
describe('default settings', () => {
describe('when open is true', () => {
it('makes gl-drawer visible when open is true', () => {
mountWithOpts({});
expect(wrapper.isVisible()).toBe(true);
});
});
describe('when header-height is set', () => {
it('renders drawer container with `top` and `max-height` styles', () => {
const headerHeight = '40px';
mountWithOpts({ props: { open: true, headerHeight } });
expect(wrapper.find('aside').attributes('style')).toBe(
`top: ${headerHeight}; z-index: 10; max-height: calc(100vh - ${headerHeight});`
);
});
});
describe('when open is false', () => {
it('cannot find aside html element', () => {
mountWithOpts({ props: { open: false } });
expect(wrapper.find('aside').exists()).toBe(false);
});
});
describe('on click of the close button', () => {
it('emits close event', () => {
mountWithOpts({ props: { open: true } });
wrapper.find('.gl-drawer-close-button').vm.$emit('click');
expect(wrapper.emitted().close.length).toBe(1);
});
});
describe('on esc keydown', () => {
it('emits close event when open is true', () => {
mountWithOpts({ props: { open: true } });
const event = new KeyboardEvent('keydown', { keyCode: 27 });
document.dispatchEvent(event);
expect(wrapper.emitted().close.length).toBe(1);
});
it('does not call onClose when open is false', () => {
mountWithOpts({ props: { open: false } });
const event = new KeyboardEvent('keydown', { keyCode: 27 });
document.dispatchEvent(event);
expect(wrapper.emitted().close).toBeFalsy();
});
it('does not call onClose when open is false and keyCode is not esc', () => {
mountWithOpts({ props: { open: false } });
const event = new KeyboardEvent('keydown', { keyCode: 37 });
document.dispatchEvent(event);
expect(wrapper.emitted().close).toBeFalsy();
});
});
});
it.each`
slot | parentSelector
${'title'} | ${'.gl-drawer-title'}
${'header'} | ${'.gl-drawer-header'}
${'default'} | ${'.gl-drawer-body'}
`('renders nodes when added to the $slot slot', ({ slot, parentSelector }) => {
mountWithOpts({
slots: {
[slot]: `<div data-testid="${slot}" />`,
},
});
expect(wrapper.find(parentSelector).find(`[data-testid="${slot}"]`).exists()).toBe(true);
});
it.each`
variant | variantClass
${'default'} | ${'gl-drawer-default'}
${'sidebar'} | ${'gl-drawer-sidebar'}
`('adds class depending on variant prop', ({ variant, variantClass }) => {
mountWithOpts({ props: { open: true, variant } });
expect(wrapper.find('.gl-drawer').classes()).toContain(variantClass);
});
});