2020-08-30 23:10:13 -04:00
|
|
|
import { initTooltips, dispose, destroy } from '~/tooltips';
|
2020-08-26 11:10:29 -04:00
|
|
|
|
|
|
|
describe('tooltips/index.js', () => {
|
2020-08-30 23:10:13 -04:00
|
|
|
let tooltipsApp;
|
|
|
|
|
2020-08-26 11:10:29 -04:00
|
|
|
const createTooltipTarget = () => {
|
|
|
|
const target = document.createElement('button');
|
|
|
|
const attributes = {
|
|
|
|
title: 'default title',
|
|
|
|
};
|
|
|
|
|
|
|
|
Object.keys(attributes).forEach(name => {
|
|
|
|
target.setAttribute(name, attributes[name]);
|
|
|
|
});
|
|
|
|
|
|
|
|
target.classList.add('has-tooltip');
|
|
|
|
|
2020-08-30 23:10:13 -04:00
|
|
|
document.body.appendChild(target);
|
|
|
|
|
2020-08-26 11:10:29 -04:00
|
|
|
return target;
|
|
|
|
};
|
|
|
|
|
2020-08-30 23:10:13 -04:00
|
|
|
const buildTooltipsApp = () => {
|
|
|
|
tooltipsApp = initTooltips('.has-tooltip');
|
|
|
|
};
|
|
|
|
|
2020-08-26 11:10:29 -04:00
|
|
|
const triggerEvent = (target, eventName = 'mouseenter') => {
|
|
|
|
const event = new Event(eventName);
|
|
|
|
|
|
|
|
target.dispatchEvent(event);
|
|
|
|
};
|
|
|
|
|
2020-08-30 23:10:13 -04:00
|
|
|
afterEach(() => {
|
|
|
|
document.body.childNodes.forEach(node => node.remove());
|
|
|
|
destroy();
|
|
|
|
});
|
|
|
|
|
2020-08-26 11:10:29 -04:00
|
|
|
describe('initTooltip', () => {
|
|
|
|
it('attaches a GlTooltip for the elements specified in the selector', async () => {
|
|
|
|
const target = createTooltipTarget();
|
|
|
|
|
2020-08-30 23:10:13 -04:00
|
|
|
buildTooltipsApp();
|
2020-08-26 11:10:29 -04:00
|
|
|
|
|
|
|
triggerEvent(target);
|
|
|
|
|
|
|
|
await tooltipsApp.$nextTick();
|
|
|
|
|
|
|
|
expect(document.querySelector('.gl-tooltip')).not.toBe(null);
|
|
|
|
expect(document.querySelector('.gl-tooltip').innerHTML).toContain('default title');
|
|
|
|
});
|
|
|
|
|
|
|
|
it('supports triggering a tooltip in custom events', async () => {
|
|
|
|
const target = createTooltipTarget();
|
|
|
|
|
2020-08-30 23:10:13 -04:00
|
|
|
buildTooltipsApp();
|
2020-08-26 11:10:29 -04:00
|
|
|
triggerEvent(target, 'click');
|
|
|
|
|
|
|
|
await tooltipsApp.$nextTick();
|
|
|
|
|
|
|
|
expect(document.querySelector('.gl-tooltip')).not.toBe(null);
|
|
|
|
expect(document.querySelector('.gl-tooltip').innerHTML).toContain('default title');
|
|
|
|
});
|
|
|
|
});
|
2020-08-30 23:10:13 -04:00
|
|
|
|
|
|
|
describe('dispose', () => {
|
|
|
|
it('removes tooltips that target the elements specified', async () => {
|
|
|
|
const target = createTooltipTarget();
|
|
|
|
|
|
|
|
buildTooltipsApp();
|
|
|
|
triggerEvent(target);
|
|
|
|
|
|
|
|
await tooltipsApp.$nextTick();
|
|
|
|
|
|
|
|
expect(document.querySelector('.gl-tooltip')).not.toBe(null);
|
|
|
|
|
|
|
|
dispose([target]);
|
|
|
|
|
|
|
|
await tooltipsApp.$nextTick();
|
|
|
|
|
|
|
|
expect(document.querySelector('.gl-tooltip')).toBe(null);
|
|
|
|
});
|
|
|
|
});
|
2020-08-26 11:10:29 -04:00
|
|
|
});
|