UNPKG

@mekari/mekari-ui-vue

Version:

--- General web components in Mekari. The components are made using vue.js as its framework. Styling of components on Mekari UI Vue uses [Mekari UI Toolkit](https://bitbucket.org/mid-kelola-indonesia/mekari-ui-toolkit/src/master/). Don't forget to import

79 lines (68 loc) 3.21 kB
import MTooltipPlugin from '.'; import { createLocalVue, shallowMount } from '@vue/test-utils'; jest.useFakeTimers(); const localVue = createLocalVue(); localVue.use(MTooltipPlugin); const TooltipWithDirectiveTemplate = { template: ` <div class="text-center p-7"> <button ref="clickTrigger" class="btn btn-primary" v-tooltip.click.top="'Click Content'">Click Trigger</button> <button ref="hoverTrigger" class="btn btn-primary" v-tooltip.hover.top="'Hover Content'">Hover Trigger</button> <button ref="emptyTooltipTrigger" class="btn btn-primary" v-tooltip.hover.top>Empty Tooltip</button> </div> `, }; describe('Mekari UI Tooltip Plugins', () => { let wrapper; function cleanUpBody() { wrapper.destroy(); document.body.querySelectorAll('.mkvue-directive-tooltip').forEach(e => e.parentNode.removeChild(e)); } beforeEach(() => { wrapper = shallowMount(TooltipWithDirectiveTemplate, { sync: false, localVue, }); }); afterEach(() => { cleanUpBody(); }); describe('should be able to handle click event', () => { it('should toggle tooltip visibility after button trigger clicked if the props trigger is `click`', async () => { await wrapper.findComponent({ ref: 'clickTrigger' }).trigger('click'); expect(document.body.querySelector('.mkvue-directive-tooltip')).toBeTruthy(); await wrapper.findComponent({ ref: 'clickTrigger' }).trigger('click'); expect(document.body.querySelector('.mkvue-directive-tooltip')).toBeFalsy(); }); it('should not hide tooltip after action if the trigger element is in focus', async () => { cleanUpBody(); wrapper = shallowMount(TooltipWithDirectiveTemplate, { attachTo: document.body, localVue, }); await wrapper.findComponent({ ref: 'clickTrigger' }).trigger('click'); wrapper.findComponent({ ref: 'clickTrigger' }).element.focus(); await wrapper.findComponent({ ref: 'clickTrigger' }).trigger('click'); expect(document.body.querySelector('.mkvue-directive-tooltip')).toBeTruthy(); }); }); describe('should be able to handle hover event', () => { it('should toggle tooltip visibility after button trigger mouseenter and mouseleave if the props trigger is `hover`', async () => { await wrapper.findComponent({ ref: 'hoverTrigger' }).trigger('mouseenter'); expect(document.body.querySelector('.mkvue-directive-tooltip')).toBeTruthy(); await wrapper.findComponent({ ref: 'hoverTrigger' }).trigger('mouseleave'); expect(document.body.querySelector('.mkvue-directive-tooltip')).toBeFalsy(); }); it('should not hide tooltip after action if the trigger element is in focus', async () => { cleanUpBody(); wrapper = shallowMount(TooltipWithDirectiveTemplate, { attachTo: document.body, localVue, }); await wrapper.findComponent({ ref: 'hoverTrigger' }).trigger('mouseenter'); wrapper.findComponent({ ref: 'hoverTrigger' }).element.focus(); await wrapper.findComponent({ ref: 'hoverTrigger' }).trigger('mouseleave'); expect(document.body.querySelector('.mkvue-directive-tooltip')).toBeTruthy(); }); }); });