@gitlab/ui 114.0.1 → 114.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/package.json +9 -28
  2. package/CHANGELOG.md +0 -13132
  3. package/src/vendor/bootstrap/LICENSE +0 -11
  4. package/src/vendor/bootstrap-vue/LICENSE +0 -11
  5. package/src/vendor/bootstrap-vue/package.json +0 -144
  6. package/src/vendor/bootstrap-vue/src/components/button/MODIFICATIONS.md +0 -16
  7. package/src/vendor/bootstrap-vue/src/components/button/README.md +0 -240
  8. package/src/vendor/bootstrap-vue/src/components/button/button-close.spec.js +0 -210
  9. package/src/vendor/bootstrap-vue/src/components/button/button.spec.js +0 -349
  10. package/src/vendor/bootstrap-vue/src/components/button/package.json +0 -105
  11. package/src/vendor/bootstrap-vue/src/components/dropdown/README.md +0 -730
  12. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-divider.spec.js +0 -58
  13. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-form.spec.js +0 -110
  14. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-group.spec.js +0 -94
  15. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-header.spec.js +0 -73
  16. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-item-button.spec.js +0 -117
  17. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-item.spec.js +0 -147
  18. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-text.spec.js +0 -59
  19. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown.spec.js +0 -1121
  20. package/src/vendor/bootstrap-vue/src/components/dropdown/package.json +0 -368
  21. package/src/vendor/bootstrap-vue/src/components/form/README.md +0 -365
  22. package/src/vendor/bootstrap-vue/src/components/form/form-invalid-feedback.spec.js +0 -170
  23. package/src/vendor/bootstrap-vue/src/components/form/form-text.spec.js +0 -93
  24. package/src/vendor/bootstrap-vue/src/components/form/form-valid-feedback.spec.js +0 -157
  25. package/src/vendor/bootstrap-vue/src/components/form/form.spec.js +0 -97
  26. package/src/vendor/bootstrap-vue/src/components/form/package.json +0 -112
  27. package/src/vendor/bootstrap-vue/src/components/form-checkbox/README.md +0 -691
  28. package/src/vendor/bootstrap-vue/src/components/form-checkbox/form-checkbox-group.spec.js +0 -525
  29. package/src/vendor/bootstrap-vue/src/components/form-checkbox/form-checkbox.spec.js +0 -922
  30. package/src/vendor/bootstrap-vue/src/components/form-checkbox/package.json +0 -172
  31. package/src/vendor/bootstrap-vue/src/components/form-group/README.md +0 -339
  32. package/src/vendor/bootstrap-vue/src/components/form-group/form-group.spec.js +0 -477
  33. package/src/vendor/bootstrap-vue/src/components/form-group/package.json +0 -183
  34. package/src/vendor/bootstrap-vue/src/components/form-radio/README.md +0 -437
  35. package/src/vendor/bootstrap-vue/src/components/form-radio/form-radio-group.spec.js +0 -357
  36. package/src/vendor/bootstrap-vue/src/components/form-radio/form-radio.spec.js +0 -587
  37. package/src/vendor/bootstrap-vue/src/components/form-radio/package.json +0 -162
  38. package/src/vendor/bootstrap-vue/src/components/form-select/README.md +0 -504
  39. package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option-group.spec.js +0 -138
  40. package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option.spec.js +0 -75
  41. package/src/vendor/bootstrap-vue/src/components/form-select/form-select.spec.js +0 -723
  42. package/src/vendor/bootstrap-vue/src/components/form-select/package.json +0 -132
  43. package/src/vendor/bootstrap-vue/src/components/form-textarea/README.md +0 -453
  44. package/src/vendor/bootstrap-vue/src/components/form-textarea/form-textarea.spec.js +0 -1000
  45. package/src/vendor/bootstrap-vue/src/components/form-textarea/package.json +0 -122
  46. package/src/vendor/bootstrap-vue/src/components/layout/README.md +0 -791
  47. package/src/vendor/bootstrap-vue/src/components/layout/col.spec.js +0 -192
  48. package/src/vendor/bootstrap-vue/src/components/layout/form-row.spec.js +0 -45
  49. package/src/vendor/bootstrap-vue/src/components/layout/package.json +0 -99
  50. package/src/vendor/bootstrap-vue/src/components/link/README.md +0 -76
  51. package/src/vendor/bootstrap-vue/src/components/link/link.spec.js +0 -434
  52. package/src/vendor/bootstrap-vue/src/components/link/package.json +0 -57
  53. package/src/vendor/bootstrap-vue/src/components/modal/MODIFICATIONS.md +0 -30
  54. package/src/vendor/bootstrap-vue/src/components/modal/README.md +0 -1067
  55. package/src/vendor/bootstrap-vue/src/components/modal/helpers/bv-modal-event.class.spec.js +0 -82
  56. package/src/vendor/bootstrap-vue/src/components/modal/modal.spec.js +0 -1418
  57. package/src/vendor/bootstrap-vue/src/components/modal/package.json +0 -544
  58. package/src/vendor/bootstrap-vue/src/components/nav/README.md +0 -362
  59. package/src/vendor/bootstrap-vue/src/components/nav/nav-item.spec.js +0 -127
  60. package/src/vendor/bootstrap-vue/src/components/nav/nav.spec.js +0 -177
  61. package/src/vendor/bootstrap-vue/src/components/nav/package.json +0 -73
  62. package/src/vendor/bootstrap-vue/src/components/popover/README.md +0 -919
  63. package/src/vendor/bootstrap-vue/src/components/popover/package.json +0 -261
  64. package/src/vendor/bootstrap-vue/src/components/popover/popover.spec.js +0 -198
  65. package/src/vendor/bootstrap-vue/src/components/table/README.md +0 -3157
  66. package/src/vendor/bootstrap-vue/src/components/table/helpers/default-sort-compare.spec.js +0 -112
  67. package/src/vendor/bootstrap-vue/src/components/table/helpers/normalize-fields.spec.js +0 -93
  68. package/src/vendor/bootstrap-vue/src/components/table/package.json +0 -1763
  69. package/src/vendor/bootstrap-vue/src/components/table/table-busy.spec.js +0 -150
  70. package/src/vendor/bootstrap-vue/src/components/table/table-caption.spec.js +0 -176
  71. package/src/vendor/bootstrap-vue/src/components/table/table-colgroup.spec.js +0 -81
  72. package/src/vendor/bootstrap-vue/src/components/table/table-filtering.spec.js +0 -409
  73. package/src/vendor/bootstrap-vue/src/components/table/table-item-formatter.spec.js +0 -56
  74. package/src/vendor/bootstrap-vue/src/components/table/table-lite.spec.js +0 -682
  75. package/src/vendor/bootstrap-vue/src/components/table/table-pagination.spec.js +0 -133
  76. package/src/vendor/bootstrap-vue/src/components/table/table-primarykey.spec.js +0 -83
  77. package/src/vendor/bootstrap-vue/src/components/table/table-provider.spec.js +0 -411
  78. package/src/vendor/bootstrap-vue/src/components/table/table-row-details.spec.js +0 -459
  79. package/src/vendor/bootstrap-vue/src/components/table/table-selectable.spec.js +0 -1182
  80. package/src/vendor/bootstrap-vue/src/components/table/table-simple.spec.js +0 -206
  81. package/src/vendor/bootstrap-vue/src/components/table/table-sorting.spec.js +0 -858
  82. package/src/vendor/bootstrap-vue/src/components/table/table-sticky-column.spec.js +0 -377
  83. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-bottom-row.spec.js +0 -94
  84. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-row-events.spec.js +0 -529
  85. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-top-row.spec.js +0 -88
  86. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-transition.spec.js +0 -83
  87. package/src/vendor/bootstrap-vue/src/components/table/table-tfoot-custom.spec.js +0 -91
  88. package/src/vendor/bootstrap-vue/src/components/table/table-tfoot-events.spec.js +0 -137
  89. package/src/vendor/bootstrap-vue/src/components/table/table-thead-events.spec.js +0 -155
  90. package/src/vendor/bootstrap-vue/src/components/table/table-thead-top.spec.js +0 -96
  91. package/src/vendor/bootstrap-vue/src/components/table/table.spec.js +0 -692
  92. package/src/vendor/bootstrap-vue/src/components/tabs/README.md +0 -433
  93. package/src/vendor/bootstrap-vue/src/components/tabs/package.json +0 -205
  94. package/src/vendor/bootstrap-vue/src/components/tabs/tab.spec.js +0 -330
  95. package/src/vendor/bootstrap-vue/src/components/tabs/tabs.spec.js +0 -778
  96. package/src/vendor/bootstrap-vue/src/components/toast/README.md +0 -655
  97. package/src/vendor/bootstrap-vue/src/components/toast/helpers/bv-toast.spec.js +0 -117
  98. package/src/vendor/bootstrap-vue/src/components/toast/package.json +0 -184
  99. package/src/vendor/bootstrap-vue/src/components/toast/toast.spec.js +0 -294
  100. package/src/vendor/bootstrap-vue/src/components/toast/toaster.spec.js +0 -77
  101. package/src/vendor/bootstrap-vue/src/components/tooltip/README.md +0 -559
  102. package/src/vendor/bootstrap-vue/src/components/tooltip/package.json +0 -258
  103. package/src/vendor/bootstrap-vue/src/components/tooltip/tooltip.spec.js +0 -1240
  104. package/src/vendor/bootstrap-vue/src/components/transition/package.json +0 -5
  105. package/src/vendor/bootstrap-vue/src/components/transporter/package.json +0 -5
  106. package/src/vendor/bootstrap-vue/src/components/transporter/transporter.spec.js +0 -85
  107. package/src/vendor/bootstrap-vue/src/directives/modal/modal.spec.js +0 -191
  108. package/src/vendor/bootstrap-vue/src/directives/tooltip/README.md +0 -521
  109. package/src/vendor/bootstrap-vue/src/directives/tooltip/package.json +0 -131
  110. package/src/vendor/bootstrap-vue/src/directives/tooltip/tooltip.spec.js +0 -190
  111. package/src/vendor/bootstrap-vue/src/directives/visible/README.md +0 -244
  112. package/src/vendor/bootstrap-vue/src/directives/visible/package.json +0 -24
  113. package/src/vendor/bootstrap-vue/src/mixins/attrs.spec.js +0 -194
  114. package/src/vendor/bootstrap-vue/src/mixins/click-out.spec.js +0 -52
  115. package/src/vendor/bootstrap-vue/src/mixins/focus-in.spec.js +0 -53
  116. package/src/vendor/bootstrap-vue/src/mixins/listen-on-document.spec.js +0 -117
  117. package/src/vendor/bootstrap-vue/src/mixins/listen-on-root.spec.js +0 -77
  118. package/src/vendor/bootstrap-vue/src/mixins/listen-on-window.spec.js +0 -115
  119. package/src/vendor/bootstrap-vue/src/mixins/listeners.spec.js +0 -245
  120. package/src/vendor/bootstrap-vue/src/utils/bv-event.class.spec.js +0 -66
  121. package/src/vendor/bootstrap-vue/src/utils/clone-deep.spec.js +0 -70
  122. package/src/vendor/bootstrap-vue/src/utils/config.spec.js +0 -169
  123. package/src/vendor/bootstrap-vue/src/utils/css-escape.spec.js +0 -82
  124. package/src/vendor/bootstrap-vue/src/utils/dom.spec.js +0 -291
  125. package/src/vendor/bootstrap-vue/src/utils/events.spec.js +0 -41
  126. package/src/vendor/bootstrap-vue/src/utils/get.spec.js +0 -109
  127. package/src/vendor/bootstrap-vue/src/utils/inspect.spec.js +0 -251
  128. package/src/vendor/bootstrap-vue/src/utils/loose-equal.spec.js +0 -203
  129. package/src/vendor/bootstrap-vue/src/utils/normalize-slot.spec.js +0 -63
  130. package/src/vendor/bootstrap-vue/src/utils/number.spec.js +0 -72
  131. package/src/vendor/bootstrap-vue/src/utils/object.spec.js +0 -61
  132. package/src/vendor/bootstrap-vue/src/utils/props.spec.js +0 -112
  133. package/src/vendor/bootstrap-vue/src/utils/router.spec.js +0 -248
  134. package/src/vendor/bootstrap-vue/src/utils/string.spec.js +0 -65
  135. package/src/vendor/bootstrap-vue/src/utils/stringify-object-values.spec.js +0 -47
  136. package/src/vendor/bootstrap-vue/src/utils/warn.spec.js +0 -54
@@ -1,1121 +0,0 @@
1
- import { mount } from '@vue/test-utils'
2
- import { waitNT, waitRAF } from '../../../tests/utils'
3
- import { BDropdown } from './dropdown'
4
- import { BDropdownItem } from './dropdown-item'
5
-
6
- describe('dropdown', () => {
7
- const originalCreateRange = document.createRange
8
- const origGetBCR = Element.prototype.getBoundingClientRect
9
-
10
- beforeEach(() => {
11
- // https://github.com/FezVrasta/popper.js/issues/478#issuecomment-407422016
12
- // Hack to make Popper not bork out during tests
13
- // Note popper still does not do any positioning calculation in JSDOM though
14
- // So we cannot test actual positioning of the menu, just detect when it is open
15
- document.createRange = () => ({
16
- setStart: () => {},
17
- setEnd: () => {},
18
- commonAncestorContainer: {
19
- nodeName: 'BODY',
20
- ownerDocument: document
21
- }
22
- })
23
- // Mock `getBoundingClientRect()` so that the `isVisible(el)` test returns `true`
24
- // Needed for keyboard navigation testing
25
- Element.prototype.getBoundingClientRect = jest.fn(() => ({
26
- width: 24,
27
- height: 24,
28
- top: 0,
29
- left: 0,
30
- bottom: 0,
31
- right: 0
32
- }))
33
- })
34
-
35
- afterEach(() => {
36
- // Reset overrides
37
- document.createRange = originalCreateRange
38
- Element.prototype.getBoundingClientRect = origGetBCR
39
- })
40
-
41
- it('has expected default structure', async () => {
42
- const wrapper = mount(BDropdown, {
43
- attachTo: document.body
44
- })
45
-
46
- expect(wrapper.element.tagName).toBe('DIV')
47
- expect(wrapper.vm).toBeDefined()
48
-
49
- // Wait for auto ID to be generated
50
- await waitNT(wrapper.vm)
51
-
52
- expect(wrapper.classes()).toContain('dropdown')
53
- expect(wrapper.classes()).toContain('btn-group')
54
- expect(wrapper.classes()).toContain('b-dropdown')
55
- expect(wrapper.classes().length).toBe(3)
56
- expect(wrapper.attributes('id')).toBeDefined()
57
- const wrapperId = wrapper.attributes('id')
58
-
59
- expect(wrapper.findAll('button').length).toBe(1)
60
- const $button = wrapper.find('button')
61
- expect($button.classes()).toContain('btn')
62
- expect($button.classes()).toContain('btn-secondary')
63
- expect($button.classes()).toContain('dropdown-toggle')
64
- expect($button.classes().length).toBe(3)
65
- expect($button.attributes('aria-haspopup')).toBeDefined()
66
- expect($button.attributes('aria-haspopup')).toEqual('menu')
67
- expect($button.attributes('aria-expanded')).toBeDefined()
68
- expect($button.attributes('aria-expanded')).toEqual('false')
69
- expect($button.attributes('id')).toBeDefined()
70
- expect($button.attributes('id')).toEqual(`${wrapperId}__BV_toggle_`)
71
- expect($button.text()).toEqual('')
72
-
73
- expect(wrapper.findAll('.dropdown-menu').length).toBe(1)
74
- const $menu = wrapper.find('.dropdown-menu')
75
- expect($menu.element.tagName).toBe('UL')
76
- expect($menu.classes().length).toBe(1)
77
- expect($menu.attributes('role')).toBeDefined()
78
- expect($menu.attributes('role')).toEqual('menu')
79
- expect($menu.attributes('tabindex')).toBeDefined()
80
- expect($menu.attributes('tabindex')).toEqual('-1')
81
- expect($menu.attributes('aria-labelledby')).toBeDefined()
82
- expect($menu.attributes('aria-labelledby')).toEqual(`${wrapperId}__BV_toggle_`)
83
- expect($menu.text()).toEqual('')
84
-
85
- wrapper.destroy()
86
- })
87
-
88
- it('split mode has expected default structure', async () => {
89
- const wrapper = mount(BDropdown, {
90
- attachTo: document.body,
91
- propsData: {
92
- split: true
93
- }
94
- })
95
-
96
- expect(wrapper.element.tagName).toBe('DIV')
97
- expect(wrapper.vm).toBeDefined()
98
-
99
- // Wait for auto ID to be generated
100
- await waitNT(wrapper.vm)
101
-
102
- expect(wrapper.classes()).toContain('dropdown')
103
- expect(wrapper.classes()).toContain('btn-group')
104
- expect(wrapper.classes()).toContain('b-dropdown')
105
- expect(wrapper.classes().length).toBe(3)
106
- expect(wrapper.attributes('id')).toBeDefined()
107
- const wrapperId = wrapper.attributes('id')
108
-
109
- expect(wrapper.findAll('button').length).toBe(2)
110
- const $buttons = wrapper.findAll('button')
111
- const $split = $buttons.at(0)
112
- const $toggle = $buttons.at(1)
113
-
114
- expect($split.classes()).toContain('btn')
115
- expect($split.classes()).toContain('btn-secondary')
116
- expect($split.attributes('id')).toBeDefined()
117
- expect($split.attributes('id')).toEqual(`${wrapperId}__BV_button_`)
118
- expect($split.attributes('type')).toBeDefined()
119
- expect($split.attributes('type')).toEqual('button')
120
- expect($split.text()).toEqual('')
121
-
122
- expect($toggle.classes()).toContain('btn')
123
- expect($toggle.classes()).toContain('btn-secondary')
124
- expect($toggle.classes()).toContain('dropdown-toggle')
125
- expect($toggle.classes()).toContain('dropdown-toggle-split')
126
- expect($toggle.classes().length).toBe(4)
127
- expect($toggle.attributes('aria-haspopup')).toBeDefined()
128
- expect($toggle.attributes('aria-haspopup')).toEqual('menu')
129
- expect($toggle.attributes('aria-expanded')).toBeDefined()
130
- expect($toggle.attributes('aria-expanded')).toEqual('false')
131
- expect($toggle.attributes('id')).toBeDefined()
132
- expect($toggle.attributes('id')).toEqual(`${wrapperId}__BV_toggle_`)
133
- expect($toggle.attributes('type')).toBeDefined()
134
- expect($toggle.attributes('type')).toEqual('button')
135
- expect($toggle.findAll('span.gl-sr-only').length).toBe(1)
136
- expect($toggle.find('span.gl-sr-only').text()).toEqual('Toggle dropdown')
137
- expect($toggle.text()).toEqual('Toggle dropdown')
138
-
139
- expect(wrapper.findAll('.dropdown-menu').length).toBe(1)
140
- const $menu = wrapper.find('.dropdown-menu')
141
- expect($menu.element.tagName).toBe('UL')
142
- expect($menu.classes().length).toBe(1)
143
- expect($menu.attributes('role')).toBeDefined()
144
- expect($menu.attributes('role')).toEqual('menu')
145
- expect($menu.attributes('tabindex')).toBeDefined()
146
- expect($menu.attributes('tabindex')).toEqual('-1')
147
- expect($menu.attributes('aria-labelledby')).toBeDefined()
148
- expect($menu.attributes('aria-labelledby')).toEqual(`${wrapperId}__BV_button_`)
149
- expect($menu.text()).toEqual('')
150
-
151
- wrapper.destroy()
152
- })
153
-
154
- it('split mode accepts split-button-type value', async () => {
155
- const wrapper = mount(BDropdown, {
156
- attachTo: document.body,
157
- propsData: {
158
- split: true,
159
- splitButtonType: 'submit'
160
- }
161
- })
162
-
163
- expect(wrapper.element.tagName).toBe('DIV')
164
- expect(wrapper.vm).toBeDefined()
165
-
166
- await waitNT(wrapper.vm)
167
-
168
- expect(wrapper.classes()).toContain('dropdown')
169
-
170
- expect(wrapper.findAll('button').length).toBe(2)
171
- const $buttons = wrapper.findAll('button')
172
- const $split = $buttons.at(0)
173
- const $toggle = $buttons.at(1)
174
-
175
- expect($split.attributes('type')).toBeDefined()
176
- expect($split.attributes('type')).toEqual('submit')
177
-
178
- expect($toggle.attributes('type')).toBeDefined()
179
- expect($toggle.attributes('type')).toEqual('button')
180
-
181
- wrapper.destroy()
182
- })
183
-
184
- it('renders default slot inside menu', async () => {
185
- const wrapper = mount(BDropdown, {
186
- attachTo: document.body,
187
- slots: {
188
- default: 'foobar'
189
- }
190
- })
191
-
192
- expect(wrapper.element.tagName).toBe('DIV')
193
- expect(wrapper.vm).toBeDefined()
194
-
195
- expect(wrapper.findAll('.dropdown-menu').length).toBe(1)
196
- const $menu = wrapper.find('.dropdown-menu')
197
- expect($menu.text()).toEqual('foobar')
198
-
199
- wrapper.destroy()
200
- })
201
-
202
- it('renders button-content slot inside toggle button', async () => {
203
- const wrapper = mount(BDropdown, {
204
- attachTo: document.body,
205
- slots: {
206
- 'button-content': 'foobar'
207
- }
208
- })
209
-
210
- expect(wrapper.element.tagName).toBe('DIV')
211
- expect(wrapper.vm).toBeDefined()
212
-
213
- expect(wrapper.findAll('button').length).toBe(1)
214
- expect(wrapper.findAll('.dropdown-toggle').length).toBe(1)
215
- const $toggle = wrapper.find('.dropdown-toggle')
216
- expect($toggle.text()).toEqual('foobar')
217
-
218
- wrapper.destroy()
219
- })
220
-
221
- it('renders button-content slot inside split button', async () => {
222
- const wrapper = mount(BDropdown, {
223
- attachTo: document.body,
224
- propsData: {
225
- split: true
226
- },
227
- slots: {
228
- 'button-content': 'foobar'
229
- }
230
- })
231
-
232
- expect(wrapper.element.tagName).toBe('DIV')
233
- expect(wrapper.vm).toBeDefined()
234
-
235
- expect(wrapper.findAll('button').length).toBe(2)
236
- const $buttons = wrapper.findAll('button')
237
- const $split = $buttons.at(0)
238
- const $toggle = $buttons.at(1)
239
-
240
- expect($split.text()).toEqual('foobar')
241
- expect($toggle.classes()).toContain('dropdown-toggle')
242
- // Toggle has `gl-sr-only` hidden text
243
- expect($toggle.text()).toEqual('Toggle dropdown')
244
-
245
- wrapper.destroy()
246
- })
247
-
248
- it('does not render default slot inside menu when prop lazy set', async () => {
249
- const wrapper = mount(BDropdown, {
250
- attachTo: document.body,
251
- propsData: {
252
- lazy: true
253
- },
254
- slots: {
255
- default: 'foobar'
256
- }
257
- })
258
-
259
- expect(wrapper.element.tagName).toBe('DIV')
260
- expect(wrapper.vm).toBeDefined()
261
-
262
- expect(wrapper.findAll('.dropdown-menu').length).toBe(1)
263
- const $menu = wrapper.find('.dropdown-menu')
264
- expect($menu.text()).not.toEqual('foobar')
265
-
266
- wrapper.destroy()
267
- })
268
-
269
- it('has user supplied ID', async () => {
270
- const wrapper = mount(BDropdown, {
271
- attachTo: document.body,
272
- propsData: {
273
- id: 'test'
274
- }
275
- })
276
-
277
- expect(wrapper.element.tagName).toBe('DIV')
278
- expect(wrapper.vm).toBeDefined()
279
-
280
- expect(wrapper.attributes('id')).toBeDefined()
281
- expect(wrapper.attributes('id')).toEqual('test')
282
- const wrapperId = wrapper.attributes('id')
283
-
284
- expect(wrapper.findAll('button').length).toBe(1)
285
- const $button = wrapper.find('button')
286
- expect($button.attributes('id')).toEqual(`${wrapperId}__BV_toggle_`)
287
-
288
- expect(wrapper.findAll('.dropdown-menu').length).toBe(1)
289
- const $menu = wrapper.find('.dropdown-menu')
290
- expect($menu.attributes('aria-labelledby')).toBeDefined()
291
- expect($menu.attributes('aria-labelledby')).toEqual(`${wrapperId}__BV_toggle_`)
292
-
293
- wrapper.destroy()
294
- })
295
-
296
- it('should not have "btn-group" class when block is true', async () => {
297
- const wrapper = mount(BDropdown, {
298
- attachTo: document.body,
299
- propsData: {
300
- block: true
301
- }
302
- })
303
-
304
- expect(wrapper.classes()).not.toContain('btn-group')
305
-
306
- wrapper.destroy()
307
- })
308
-
309
- it('should have "btn-group" and "gl-flex" classes when block and split are true', async () => {
310
- const wrapper = mount(BDropdown, {
311
- attachTo: document.body,
312
- propsData: {
313
- block: true,
314
- split: true
315
- }
316
- })
317
-
318
- expect(wrapper.classes()).toContain('btn-group')
319
- expect(wrapper.classes()).toContain('gl-flex')
320
-
321
- wrapper.destroy()
322
- })
323
-
324
- it('should have "dropdown-toggle-no-caret" class when no-caret is true', async () => {
325
- const wrapper = mount(BDropdown, {
326
- attachTo: document.body,
327
- propsData: {
328
- noCaret: true
329
- }
330
- })
331
-
332
- expect(wrapper.find('.dropdown-toggle').classes()).toContain('dropdown-toggle-no-caret')
333
-
334
- wrapper.destroy()
335
- })
336
-
337
- it('should not have "dropdown-toggle-no-caret" class when no-caret and split are true', async () => {
338
- const wrapper = mount(BDropdown, {
339
- attachTo: document.body,
340
- propsData: {
341
- noCaret: true,
342
- split: true
343
- }
344
- })
345
-
346
- expect(wrapper.find('.dropdown-toggle').classes()).not.toContain('dropdown-toggle-no-caret')
347
-
348
- wrapper.destroy()
349
- })
350
-
351
- it('should have a toggle with the given toggle tag', async () => {
352
- const wrapper = mount(BDropdown, {
353
- attachTo: document.body,
354
- propsData: {
355
- toggleTag: 'div'
356
- }
357
- })
358
-
359
- expect(wrapper.find('.dropdown-toggle').element.tagName).toBe('DIV')
360
-
361
- wrapper.destroy()
362
- })
363
-
364
- it('should have attributes on toggle when "toggle-attrs" prop is set', async () => {
365
- const wrapper = mount(BDropdown, {
366
- attachTo: document.body,
367
- propsData: {
368
- toggleAttrs: { 'data-foo-bar': 'foo-bar' }
369
- }
370
- })
371
-
372
- expect(wrapper.find('.dropdown-toggle').attributes('data-foo-bar')).toBe('foo-bar')
373
-
374
- wrapper.destroy()
375
- })
376
-
377
- it('should have class dropup when prop dropup set', async () => {
378
- const wrapper = mount(BDropdown, {
379
- attachTo: document.body,
380
- propsData: {
381
- dropup: true
382
- }
383
- })
384
-
385
- expect(wrapper.classes()).toContain('dropdown')
386
- expect(wrapper.classes()).toContain('dropup')
387
- expect(wrapper.classes()).not.toContain('show')
388
- expect(wrapper.find('.dropdown-menu').classes()).not.toContain('show')
389
-
390
- wrapper.vm.show()
391
- await waitNT(wrapper.vm)
392
- await waitRAF()
393
-
394
- expect(wrapper.classes()).toContain('dropdown')
395
- expect(wrapper.classes()).toContain('dropup')
396
- expect(wrapper.classes()).toContain('show')
397
- expect(wrapper.find('.dropdown-menu').classes()).toContain('show')
398
-
399
- wrapper.destroy()
400
- })
401
-
402
- it('should have class dropright when prop dropright set', async () => {
403
- const wrapper = mount(BDropdown, {
404
- attachTo: document.body,
405
- propsData: {
406
- dropright: true
407
- }
408
- })
409
-
410
- expect(wrapper.classes()).toContain('dropdown')
411
- expect(wrapper.classes()).toContain('dropright')
412
- expect(wrapper.classes()).not.toContain('show')
413
- expect(wrapper.find('.dropdown-menu').classes()).not.toContain('show')
414
-
415
- wrapper.vm.show()
416
- await waitNT(wrapper.vm)
417
- await waitRAF()
418
-
419
- expect(wrapper.classes()).toContain('dropdown')
420
- expect(wrapper.classes()).toContain('dropright')
421
- expect(wrapper.classes()).toContain('show')
422
- expect(wrapper.find('.dropdown-menu').classes()).toContain('show')
423
-
424
- wrapper.destroy()
425
- })
426
-
427
- it('should have class dropleft when prop dropleft set', async () => {
428
- const wrapper = mount(BDropdown, {
429
- attachTo: document.body,
430
- propsData: {
431
- dropleft: true
432
- }
433
- })
434
-
435
- expect(wrapper.classes()).toContain('dropdown')
436
- expect(wrapper.classes()).toContain('dropleft')
437
- expect(wrapper.classes()).not.toContain('show')
438
- expect(wrapper.find('.dropdown-menu').classes()).not.toContain('show')
439
-
440
- wrapper.vm.show()
441
- await waitNT(wrapper.vm)
442
- await waitRAF()
443
-
444
- expect(wrapper.classes()).toContain('dropdown')
445
- expect(wrapper.classes()).toContain('dropleft')
446
- expect(wrapper.classes()).toContain('show')
447
- expect(wrapper.find('.dropdown-menu').classes()).toContain('show')
448
-
449
- wrapper.destroy()
450
- })
451
-
452
- it('split should have class specified in split class property', () => {
453
- const splitClass = 'custom-button-class'
454
- const wrapper = mount(BDropdown, {
455
- attachTo: document.body,
456
- propsData: {
457
- splitClass,
458
- split: true
459
- }
460
- })
461
-
462
- const $buttons = wrapper.findAll('button')
463
- const $split = $buttons.at(0)
464
- expect($split.classes()).toContain(splitClass)
465
-
466
- wrapper.destroy()
467
- })
468
-
469
- it('menu should have class dropdown-menu-right when prop right set', async () => {
470
- const wrapper = mount(BDropdown, {
471
- attachTo: document.body,
472
- propsData: {
473
- right: true
474
- }
475
- })
476
-
477
- expect(wrapper.classes()).toContain('dropdown')
478
- expect(wrapper.classes()).not.toContain('show')
479
- expect(wrapper.find('.dropdown-menu').classes()).toContain('dropdown-menu-right')
480
- expect(wrapper.find('.dropdown-menu').classes()).not.toContain('show')
481
-
482
- wrapper.vm.show()
483
- await waitNT(wrapper.vm)
484
- await waitRAF()
485
-
486
- expect(wrapper.classes()).toContain('dropdown')
487
- expect(wrapper.classes()).toContain('show')
488
- expect(wrapper.find('.dropdown-menu').classes()).toContain('dropdown-menu-right')
489
- expect(wrapper.find('.dropdown-menu').classes()).toContain('show')
490
-
491
- wrapper.destroy()
492
- })
493
-
494
- it('split mode emits click event when split button clicked', async () => {
495
- const wrapper = mount(BDropdown, {
496
- attachTo: document.body,
497
- propsData: {
498
- split: true
499
- }
500
- })
501
-
502
- expect(wrapper.element.tagName).toBe('DIV')
503
- expect(wrapper.vm).toBeDefined()
504
- expect(wrapper.emitted('click')).toBeUndefined()
505
-
506
- expect(wrapper.findAll('button').length).toBe(2)
507
- const $buttons = wrapper.findAll('button')
508
- const $split = $buttons.at(0)
509
-
510
- await $split.trigger('click')
511
-
512
- expect(wrapper.emitted('click')).toBeDefined()
513
- expect(wrapper.emitted('click').length).toBe(1)
514
-
515
- wrapper.destroy()
516
- })
517
-
518
- it('dropdown opens and closes', async () => {
519
- const App = {
520
- props: {
521
- disabled: { type: Boolean, default: false }
522
- },
523
- render(h) {
524
- const { disabled } = this
525
-
526
- return h('div', { attrs: { id: 'container' } }, [
527
- h(BDropdown, { props: { id: 'test', disabled } }, [h(BDropdownItem, 'item')]),
528
- h('input', { attrs: { id: 'input' } })
529
- ])
530
- }
531
- }
532
-
533
- const wrapper = mount(App, {
534
- attachTo: document.body
535
- })
536
-
537
- expect(wrapper.vm).toBeDefined()
538
-
539
- expect(wrapper.findAll('.dropdown').length).toBe(1)
540
- expect(wrapper.findAll('.dropdown-toggle').length).toBe(1)
541
- expect(wrapper.findAll('.dropdown-menu').length).toBe(1)
542
- expect(wrapper.findAll('.dropdown-menu .dropdown-item').length).toBe(1)
543
-
544
- const $container = wrapper.find('#container')
545
- const $dropdown = wrapper.findComponent('.dropdown')
546
- const $toggle = wrapper.find('.dropdown-toggle')
547
- const $menu = wrapper.find('.dropdown-menu')
548
- const $item = wrapper.find('.dropdown-item')
549
- const $input = wrapper.find('#input')
550
-
551
- expect($dropdown.vm).toBeDefined()
552
-
553
- expect($toggle.attributes('aria-haspopup')).toBeDefined()
554
- expect($toggle.attributes('aria-haspopup')).toEqual('menu')
555
- expect($toggle.attributes('aria-expanded')).toBeDefined()
556
- expect($toggle.attributes('aria-expanded')).toEqual('false')
557
- expect($dropdown.classes()).not.toContain('show')
558
-
559
- // Open menu by clicking toggle
560
- await $toggle.trigger('click')
561
- await waitRAF()
562
- await waitNT(wrapper.vm)
563
- await waitRAF()
564
- await waitNT(wrapper.vm)
565
-
566
- expect($toggle.attributes('aria-haspopup')).toBeDefined()
567
- expect($toggle.attributes('aria-haspopup')).toEqual('menu')
568
- expect($toggle.attributes('aria-expanded')).toBeDefined()
569
- expect($toggle.attributes('aria-expanded')).toEqual('true')
570
- expect($dropdown.classes()).toContain('show')
571
- expect(document.activeElement).toBe($menu.element)
572
-
573
- // Close menu by clicking toggle again
574
- await $toggle.trigger('click')
575
- await waitRAF()
576
- await waitNT(wrapper.vm)
577
- await waitRAF()
578
- await waitNT(wrapper.vm)
579
- expect($toggle.attributes('aria-expanded')).toEqual('false')
580
- expect($dropdown.classes()).not.toContain('show')
581
-
582
- // Open menu again
583
- await $toggle.trigger('click')
584
- await waitRAF()
585
- await waitNT(wrapper.vm)
586
- await waitRAF()
587
- await waitNT(wrapper.vm)
588
- expect($toggle.attributes('aria-expanded')).toEqual('true')
589
- expect(document.activeElement).toBe($menu.element)
590
- expect($dropdown.classes()).toContain('show')
591
-
592
- // Close by clicking dropdown-item
593
- await $item.trigger('click')
594
- await waitRAF()
595
- await waitNT(wrapper.vm)
596
- await waitRAF()
597
- await waitNT(wrapper.vm)
598
- expect($toggle.attributes('aria-expanded')).toEqual('false')
599
- expect($dropdown.classes()).not.toContain('show')
600
-
601
- // Open menu via ´.show()´ method
602
- $dropdown.vm.show()
603
- await waitRAF()
604
- await waitNT(wrapper.vm)
605
- await waitRAF()
606
- await waitNT(wrapper.vm)
607
- expect($toggle.attributes('aria-expanded')).toEqual('true')
608
- expect($dropdown.classes()).toContain('show')
609
-
610
- // Close menu via ´.hide()´ method
611
- $dropdown.vm.hide()
612
- await waitNT(wrapper.vm)
613
- await waitRAF()
614
- await waitNT(wrapper.vm)
615
- await waitRAF()
616
- await waitNT(wrapper.vm)
617
- expect($toggle.attributes('aria-expanded')).toEqual('false')
618
- expect($dropdown.classes()).not.toContain('show')
619
-
620
- // Open menu via ´.show()´ method again
621
- $dropdown.vm.show()
622
- await waitNT(wrapper.vm)
623
- await waitRAF()
624
- await waitNT(wrapper.vm)
625
- await waitRAF()
626
- await waitNT(wrapper.vm)
627
- expect($toggle.attributes('aria-expanded')).toEqual('true')
628
- expect($dropdown.classes()).toContain('show')
629
- expect(document.activeElement).toBe($menu.element)
630
-
631
- // Close menu by moving focus away from menu
632
- await $input.trigger('focusin')
633
- await waitRAF()
634
- await waitNT(wrapper.vm)
635
- await waitRAF()
636
- await waitNT(wrapper.vm)
637
- expect($dropdown.classes()).not.toContain('show')
638
- expect($toggle.attributes('aria-expanded')).toEqual('false')
639
-
640
- // Open menu via keydown.down event on toggle button
641
- await $toggle.trigger('keydown.down')
642
- await waitRAF()
643
- await waitNT(wrapper.vm)
644
- await waitRAF()
645
- await waitNT(wrapper.vm)
646
- expect($dropdown.classes()).toContain('show')
647
- expect($toggle.attributes('aria-expanded')).toEqual('true')
648
- expect(document.activeElement).toBe($menu.element)
649
-
650
- // Close menu by clicking outside
651
- await $container.trigger('click')
652
- await waitRAF()
653
- await waitNT(wrapper.vm)
654
- await waitRAF()
655
- await waitNT(wrapper.vm)
656
- expect($dropdown.classes()).not.toContain('show')
657
- expect($toggle.attributes('aria-expanded')).toEqual('false')
658
-
659
- // Open menu via ´.show()´ method again
660
- $dropdown.vm.show()
661
- await waitNT(wrapper.vm)
662
- await waitRAF()
663
- await waitNT(wrapper.vm)
664
- await waitRAF()
665
- await waitNT(wrapper.vm)
666
- expect($dropdown.classes()).toContain('show')
667
- expect($toggle.attributes('aria-expanded')).toEqual('true')
668
-
669
- // Close menu by keydown.esc event on dropdown item
670
- await $item.trigger('keydown.esc')
671
- await waitRAF()
672
- await waitNT(wrapper.vm)
673
- await waitRAF()
674
- await waitNT(wrapper.vm)
675
- expect($dropdown.classes()).not.toContain('show')
676
- expect($toggle.attributes('aria-expanded')).toEqual('false')
677
-
678
- // Open menu via ´.show()´ method again
679
- $dropdown.vm.show()
680
- await waitNT(wrapper.vm)
681
- await waitRAF()
682
- await waitNT(wrapper.vm)
683
- await waitRAF()
684
- await waitNT(wrapper.vm)
685
- expect($dropdown.classes()).toContain('show')
686
- expect($toggle.attributes('aria-expanded')).toEqual('true')
687
-
688
- // When disabled changes to true, menu should close
689
- await wrapper.setProps({ disabled: true })
690
- await waitRAF()
691
- await waitNT(wrapper.vm)
692
- await waitRAF()
693
- await waitNT(wrapper.vm)
694
- expect($dropdown.classes()).not.toContain('show')
695
- expect($toggle.attributes('aria-expanded')).toEqual('false')
696
-
697
- // When disabled, show() wont open menu
698
- $dropdown.vm.show()
699
- await waitNT(wrapper.vm)
700
- await waitRAF()
701
- await waitNT(wrapper.vm)
702
- await waitRAF()
703
- await waitNT(wrapper.vm)
704
- expect($dropdown.classes()).not.toContain('show')
705
- expect($toggle.attributes('aria-expanded')).toEqual('false')
706
-
707
- // Re-enable dropdown and open it
708
- await wrapper.setProps({ disabled: false })
709
- await waitRAF()
710
- $dropdown.vm.show()
711
- await waitNT(wrapper.vm)
712
- await waitRAF()
713
- await waitNT(wrapper.vm)
714
- await waitRAF()
715
- await waitNT(wrapper.vm)
716
- expect($dropdown.classes()).toContain('show')
717
- expect($toggle.attributes('aria-expanded')).toEqual('true')
718
-
719
- // Should close on root emit when argument is not self
720
- wrapper.vm.$root.$emit('bv::dropdown::shown')
721
- await waitRAF()
722
- await waitNT(wrapper.vm)
723
- await waitRAF()
724
- await waitNT(wrapper.vm)
725
- expect($dropdown.classes()).not.toContain('show')
726
- expect($toggle.attributes('aria-expanded')).toEqual('false')
727
-
728
- wrapper.destroy()
729
- })
730
-
731
- it('preventDefault() works on show event', async () => {
732
- let prevent = true
733
- const wrapper = mount(BDropdown, {
734
- attachTo: document.body,
735
- listeners: {
736
- show: bvEvent => {
737
- if (prevent) {
738
- bvEvent.preventDefault()
739
- }
740
- }
741
- }
742
- })
743
-
744
- expect(wrapper.element.tagName).toBe('DIV')
745
- expect(wrapper.vm).toBeDefined()
746
- await waitNT(wrapper.vm)
747
- await waitRAF()
748
-
749
- expect(wrapper.emitted('show')).toBeUndefined()
750
-
751
- expect(wrapper.findAll('button').length).toBe(1)
752
- expect(wrapper.findAll('.dropdown').length).toBe(1)
753
- const $toggle = wrapper.find('button')
754
- const $dropdown = wrapper.find('.dropdown')
755
-
756
- expect($toggle.attributes('aria-haspopup')).toBeDefined()
757
- expect($toggle.attributes('aria-haspopup')).toEqual('menu')
758
- expect($toggle.attributes('aria-expanded')).toBeDefined()
759
- expect($toggle.attributes('aria-expanded')).toEqual('false')
760
- expect($dropdown.classes()).not.toContain('show')
761
-
762
- // Should prevent menu from opening
763
- await $toggle.trigger('click')
764
- await waitRAF()
765
- expect(wrapper.emitted('show')).toBeDefined()
766
- expect(wrapper.emitted('show').length).toBe(1)
767
- expect($toggle.attributes('aria-haspopup')).toBeDefined()
768
- expect($toggle.attributes('aria-haspopup')).toEqual('menu')
769
- expect($toggle.attributes('aria-expanded')).toBeDefined()
770
- expect($toggle.attributes('aria-expanded')).toEqual('false')
771
- expect($dropdown.classes()).not.toContain('show')
772
-
773
- // Allow menu to open
774
- prevent = false
775
- await $toggle.trigger('click')
776
- await waitRAF()
777
- expect(wrapper.emitted('show')).toBeDefined()
778
- expect(wrapper.emitted('show').length).toBe(2)
779
- expect($toggle.attributes('aria-haspopup')).toBeDefined()
780
- expect($toggle.attributes('aria-haspopup')).toEqual('menu')
781
- expect($toggle.attributes('aria-expanded')).toBeDefined()
782
- expect($toggle.attributes('aria-expanded')).toEqual('true')
783
- expect($dropdown.classes()).toContain('show')
784
-
785
- wrapper.destroy()
786
- })
787
-
788
- it('Keyboard navigation works when open', async () => {
789
- const App = {
790
- render(h) {
791
- return h('div', [
792
- h(BDropdown, { props: { id: 'test' } }, [
793
- h(BDropdownItem, { attrs: { id: 'item-1' } }, 'item'),
794
- h(BDropdownItem, { attrs: { id: 'item-2' } }, 'item'),
795
- h(BDropdownItem, { attrs: { id: 'item-3' }, props: { disabled: true } }, 'item'),
796
- h(BDropdownItem, { attrs: { id: 'item-4' } }, 'item')
797
- ])
798
- ])
799
- }
800
- }
801
-
802
- const wrapper = mount(App, {
803
- attachTo: document.body
804
- })
805
-
806
- expect(wrapper.vm).toBeDefined()
807
- await waitNT(wrapper.vm)
808
- await waitRAF()
809
- await waitNT(wrapper.vm)
810
- await waitRAF()
811
-
812
- expect(wrapper.findAll('.dropdown').length).toBe(1)
813
- expect(wrapper.findAll('.dropdown-toggle').length).toBe(1)
814
- expect(wrapper.findAll('.dropdown-menu').length).toBe(1)
815
- expect(wrapper.findAll('.dropdown-menu .dropdown-item').length).toBe(4)
816
-
817
- const $toggle = wrapper.find('.dropdown-toggle')
818
- const $menu = wrapper.find('.dropdown-menu')
819
- const $items = wrapper.findAll('.dropdown-item')
820
-
821
- // Expect menu to be closed
822
- expect($toggle.attributes('aria-expanded')).toBeDefined()
823
- expect($toggle.attributes('aria-expanded')).toEqual('false')
824
-
825
- // Trigger keydown.down on toggle to open menu
826
- await $toggle.trigger('keydown.down')
827
- await waitRAF()
828
- await waitNT(wrapper.vm)
829
- await waitRAF()
830
- await waitNT(wrapper.vm)
831
- await waitRAF()
832
- expect($toggle.attributes('aria-expanded')).toEqual('true')
833
- expect(document.activeElement).toBe($menu.element)
834
-
835
- // Move to first menu item
836
- await $menu.trigger('keydown.down')
837
- await waitRAF()
838
- await waitNT(wrapper.vm)
839
- await waitRAF()
840
- await waitNT(wrapper.vm)
841
- await waitRAF()
842
- expect(document.activeElement).toBe($items.at(0).element)
843
-
844
- // Move to second menu item
845
- await $items.at(0).trigger('keydown.down')
846
- await waitRAF()
847
- await waitNT(wrapper.vm)
848
- await waitRAF()
849
- await waitNT(wrapper.vm)
850
- await waitRAF()
851
- expect(document.activeElement).toBe($items.at(1).element)
852
-
853
- // Move down to next menu item (should skip disabled item)
854
- await $items.at(1).trigger('keydown.down')
855
- await waitRAF()
856
- await waitNT(wrapper.vm)
857
- await waitRAF()
858
- await waitNT(wrapper.vm)
859
- await waitRAF()
860
- expect(document.activeElement).toBe($items.at(3).element)
861
-
862
- // Move down to next menu item (should remain on same item)
863
- await $items.at(3).trigger('keydown.down')
864
- await waitRAF()
865
- await waitNT(wrapper.vm)
866
- await waitRAF()
867
- await waitNT(wrapper.vm)
868
- await waitRAF()
869
- expect(document.activeElement).toBe($items.at(3).element)
870
-
871
- // Move up to previous menu item (should skip disabled item)
872
- await $items.at(3).trigger('keydown.up')
873
- await waitRAF()
874
- await waitNT(wrapper.vm)
875
- await waitRAF()
876
- await waitNT(wrapper.vm)
877
- await waitRAF()
878
- expect(document.activeElement).toBe($items.at(1).element)
879
-
880
- // Move up to previous menu item
881
- await $items.at(1).trigger('keydown.up')
882
- await waitRAF()
883
- await waitNT(wrapper.vm)
884
- await waitRAF()
885
- await waitNT(wrapper.vm)
886
- await waitRAF()
887
- expect(document.activeElement).toBe($items.at(0).element)
888
-
889
- // Move up to previous menu item (should remain on first item)
890
- await $items.at(0).trigger('keydown.up')
891
- await waitRAF()
892
- await waitNT(wrapper.vm)
893
- await waitRAF()
894
- await waitNT(wrapper.vm)
895
- await waitRAF()
896
- expect(document.activeElement).toBe($items.at(0).element)
897
-
898
- wrapper.destroy()
899
- })
900
-
901
- it('when boundary not set should not have class position-static', async () => {
902
- const wrapper = mount(BDropdown, {
903
- attachTo: document.body
904
- })
905
- expect(wrapper.element.tagName).toBe('DIV')
906
- expect(wrapper.vm).toBeDefined()
907
- await waitNT(wrapper.vm)
908
- expect(wrapper.classes()).not.toContain('gl-static')
909
- wrapper.destroy()
910
- })
911
-
912
- it('when boundary set to viewport should have class position-static', async () => {
913
- const wrapper = mount(BDropdown, {
914
- attachTo: document.body,
915
- propsData: {
916
- boundary: 'viewport'
917
- }
918
- })
919
- expect(wrapper.element.tagName).toBe('DIV')
920
- expect(wrapper.vm).toBeDefined()
921
- await waitNT(wrapper.vm)
922
- expect(wrapper.classes()).toContain('gl-static')
923
- wrapper.destroy()
924
- })
925
-
926
- it('toggle button size works', async () => {
927
- const wrapper = mount(BDropdown, {
928
- attachTo: document.body,
929
- propsData: {
930
- size: 'lg'
931
- }
932
- })
933
-
934
- expect(wrapper.element.tagName).toBe('DIV')
935
- expect(wrapper.vm).toBeDefined()
936
-
937
- expect(wrapper.findAll('.btn').length).toBe(1)
938
- const $toggle = wrapper.find('.btn')
939
-
940
- expect($toggle.element.tagName).toBe('BUTTON')
941
- expect($toggle.classes()).toContain('btn-lg')
942
-
943
- wrapper.destroy()
944
- })
945
-
946
- it('split button size works', async () => {
947
- const wrapper = mount(BDropdown, {
948
- attachTo: document.body,
949
- propsData: {
950
- split: true,
951
- size: 'lg'
952
- }
953
- })
954
-
955
- expect(wrapper.element.tagName).toBe('DIV')
956
- expect(wrapper.vm).toBeDefined()
957
-
958
- expect(wrapper.findAll('.btn').length).toBe(2)
959
- const $split = wrapper.findAll('.btn').at(0)
960
- const $toggle = wrapper.findAll('.btn').at(1)
961
-
962
- expect($split.element.tagName).toBe('BUTTON')
963
- expect($split.classes()).toContain('btn-lg')
964
- expect($toggle.element.tagName).toBe('BUTTON')
965
- expect($toggle.classes()).toContain('btn-lg')
966
-
967
- wrapper.destroy()
968
- })
969
-
970
- it('toggle button content works', async () => {
971
- const wrapper = mount(BDropdown, {
972
- attachTo: document.body,
973
- propsData: {
974
- text: 'foobar'
975
- }
976
- })
977
-
978
- expect(wrapper.element.tagName).toBe('DIV')
979
- expect(wrapper.vm).toBeDefined()
980
-
981
- expect(wrapper.findAll('.btn').length).toBe(1)
982
- const $toggle = wrapper.find('.btn')
983
-
984
- expect($toggle.element.tagName).toBe('BUTTON')
985
- expect($toggle.text()).toEqual('foobar')
986
-
987
- wrapper.destroy()
988
- })
989
-
990
- it('split button content works', async () => {
991
- const wrapper = mount(BDropdown, {
992
- attachTo: document.body,
993
- propsData: {
994
- split: true,
995
- text: 'foobar'
996
- }
997
- })
998
-
999
- expect(wrapper.element.tagName).toBe('DIV')
1000
- expect(wrapper.vm).toBeDefined()
1001
-
1002
- expect(wrapper.findAll('.btn').length).toBe(2)
1003
- const $split = wrapper.findAll('.btn').at(0)
1004
-
1005
- expect($split.element.tagName).toBe('BUTTON')
1006
- expect($split.text()).toEqual('foobar')
1007
-
1008
- wrapper.destroy()
1009
- })
1010
-
1011
- it('variant works on non-split button', async () => {
1012
- const wrapper = mount(BDropdown, {
1013
- attachTo: document.body,
1014
- propsData: {
1015
- variant: 'primary'
1016
- }
1017
- })
1018
-
1019
- expect(wrapper.element.tagName).toBe('DIV')
1020
- expect(wrapper.vm).toBeDefined()
1021
-
1022
- expect(wrapper.findAll('.btn').length).toBe(1)
1023
- const $toggle = wrapper.find('.btn')
1024
-
1025
- expect($toggle.element.tagName).toBe('BUTTON')
1026
- expect($toggle.classes()).toContain('btn-primary')
1027
- expect($toggle.classes()).not.toContain('btn-secondary')
1028
-
1029
- wrapper.destroy()
1030
- })
1031
-
1032
- it('variant works on split button', async () => {
1033
- const wrapper = mount(BDropdown, {
1034
- attachTo: document.body,
1035
- propsData: {
1036
- split: true,
1037
- variant: 'primary'
1038
- }
1039
- })
1040
-
1041
- expect(wrapper.element.tagName).toBe('DIV')
1042
- expect(wrapper.vm).toBeDefined()
1043
-
1044
- expect(wrapper.findAll('.btn').length).toBe(2)
1045
- const $split = wrapper.findAll('.btn').at(0)
1046
- const $toggle = wrapper.findAll('.btn').at(1)
1047
-
1048
- expect($split.element.tagName).toBe('BUTTON')
1049
- expect($split.classes()).toContain('btn-primary')
1050
- expect($split.classes()).not.toContain('btn-secondary')
1051
-
1052
- expect($toggle.element.tagName).toBe('BUTTON')
1053
- expect($toggle.classes()).toContain('btn-primary')
1054
- expect($toggle.classes()).not.toContain('btn-secondary')
1055
-
1056
- // Change split button variant
1057
- await wrapper.setProps({
1058
- splitVariant: 'danger'
1059
- })
1060
- expect($split.classes()).toContain('btn-danger')
1061
- expect($toggle.classes()).toContain('btn-primary')
1062
-
1063
- wrapper.destroy()
1064
- })
1065
-
1066
- it('split mode has href when prop split-href set', async () => {
1067
- const wrapper = mount(BDropdown, {
1068
- attachTo: document.body,
1069
- propsData: {
1070
- split: true,
1071
- splitHref: '/foo'
1072
- }
1073
- })
1074
-
1075
- expect(wrapper.element.tagName).toBe('DIV')
1076
- expect(wrapper.vm).toBeDefined()
1077
-
1078
- expect(wrapper.findAll('.btn').length).toBe(2)
1079
- const $buttons = wrapper.findAll('.btn')
1080
- const $split = $buttons.at(0)
1081
- const $toggle = $buttons.at(1)
1082
-
1083
- expect($toggle.element.tagName).toBe('BUTTON')
1084
-
1085
- expect($split.element.tagName).toBe('A')
1086
- expect($split.classes()).toContain('btn')
1087
- expect($split.classes()).toContain('btn-secondary')
1088
- expect($split.attributes('href')).toBeDefined()
1089
- expect($split.attributes('href')).toEqual('/foo')
1090
-
1091
- wrapper.destroy()
1092
- })
1093
-
1094
- it('split mode has href when prop split-to set', async () => {
1095
- const wrapper = mount(BDropdown, {
1096
- attachTo: document.body,
1097
- propsData: {
1098
- split: true,
1099
- splitTo: '/foo'
1100
- }
1101
- })
1102
-
1103
- expect(wrapper.element.tagName).toBe('DIV')
1104
- expect(wrapper.vm).toBeDefined()
1105
-
1106
- expect(wrapper.findAll('.btn').length).toBe(2)
1107
- const $buttons = wrapper.findAll('.btn')
1108
- const $split = $buttons.at(0)
1109
- const $toggle = $buttons.at(1)
1110
-
1111
- expect($toggle.element.tagName).toBe('BUTTON')
1112
-
1113
- expect($split.element.tagName).toBe('A')
1114
- expect($split.classes()).toContain('btn')
1115
- expect($split.classes()).toContain('btn-secondary')
1116
- expect($split.attributes('href')).toBeDefined()
1117
- expect($split.attributes('href')).toEqual('/foo')
1118
-
1119
- wrapper.destroy()
1120
- })
1121
- })