1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
import { GlDisclosureDropdown } from '@gitlab/ui';
import { mount } from '@vue/test-utils';
import { getByRole } from '@testing-library/dom';
import HookTestDropdown from '~/webhooks/components/test_dropdown.vue';
const mockItems = [
{
text: 'Foo',
href: '#foo',
},
];
describe('HookTestDropdown', () => {
let wrapper;
const findDisclosure = () => wrapper.findComponent(GlDisclosureDropdown);
const clickItem = (itemText) => {
const item = getByRole(wrapper.element, 'button', { name: itemText });
item.dispatchEvent(new MouseEvent('click'));
};
const createComponent = (props) => {
wrapper = mount(HookTestDropdown, {
propsData: {
items: mockItems,
...props,
},
});
};
it('passes the expected props to GlDisclosureDropdown', () => {
const size = 'small';
createComponent({ size });
expect(findDisclosure().props()).toMatchObject({
items: mockItems.map((item) => ({
text: item.text,
})),
size,
});
});
describe('clicking on an item', () => {
beforeEach(() => {
createComponent();
});
it('triggers @rails/ujs data-method=post handling', () => {
const railsEventPromise = new Promise((resolve) => {
document.addEventListener('click', ({ target }) => {
expect(target.tagName).toBe('A');
expect(target.dataset.method).toBe('post');
expect(target.getAttribute('href')).toBe(mockItems[0].href);
resolve();
});
});
clickItem(mockItems[0].text);
return railsEventPromise;
});
});
});
|