@gitlab/ui 114.1.0 → 114.1.2
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.
- package/dist/components/base/breadcrumb/breadcrumb.js +4 -16
- package/dist/index.css +1 -1
- package/dist/index.css.map +1 -1
- package/package.json +7 -26
- package/src/components/base/breadcrumb/breadcrumb.scss +18 -2
- package/src/components/base/breadcrumb/breadcrumb.vue +4 -17
- package/CHANGELOG.md +0 -13139
- package/src/vendor/bootstrap/LICENSE +0 -11
- package/src/vendor/bootstrap-vue/LICENSE +0 -11
- package/src/vendor/bootstrap-vue/package.json +0 -144
- package/src/vendor/bootstrap-vue/src/components/button/MODIFICATIONS.md +0 -16
- package/src/vendor/bootstrap-vue/src/components/button/README.md +0 -240
- package/src/vendor/bootstrap-vue/src/components/button/button-close.spec.js +0 -210
- package/src/vendor/bootstrap-vue/src/components/button/button.spec.js +0 -349
- package/src/vendor/bootstrap-vue/src/components/button/package.json +0 -105
- package/src/vendor/bootstrap-vue/src/components/dropdown/README.md +0 -730
- package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-divider.spec.js +0 -58
- package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-form.spec.js +0 -110
- package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-group.spec.js +0 -94
- package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-header.spec.js +0 -73
- package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-item-button.spec.js +0 -117
- package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-item.spec.js +0 -147
- package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-text.spec.js +0 -59
- package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown.spec.js +0 -1121
- package/src/vendor/bootstrap-vue/src/components/dropdown/package.json +0 -368
- package/src/vendor/bootstrap-vue/src/components/form/README.md +0 -365
- package/src/vendor/bootstrap-vue/src/components/form/form-invalid-feedback.spec.js +0 -170
- package/src/vendor/bootstrap-vue/src/components/form/form-text.spec.js +0 -93
- package/src/vendor/bootstrap-vue/src/components/form/form-valid-feedback.spec.js +0 -157
- package/src/vendor/bootstrap-vue/src/components/form/form.spec.js +0 -97
- package/src/vendor/bootstrap-vue/src/components/form/package.json +0 -112
- package/src/vendor/bootstrap-vue/src/components/form-checkbox/README.md +0 -691
- package/src/vendor/bootstrap-vue/src/components/form-checkbox/form-checkbox-group.spec.js +0 -525
- package/src/vendor/bootstrap-vue/src/components/form-checkbox/form-checkbox.spec.js +0 -922
- package/src/vendor/bootstrap-vue/src/components/form-checkbox/package.json +0 -172
- package/src/vendor/bootstrap-vue/src/components/form-group/README.md +0 -339
- package/src/vendor/bootstrap-vue/src/components/form-group/form-group.spec.js +0 -477
- package/src/vendor/bootstrap-vue/src/components/form-group/package.json +0 -183
- package/src/vendor/bootstrap-vue/src/components/form-radio/README.md +0 -437
- package/src/vendor/bootstrap-vue/src/components/form-radio/form-radio-group.spec.js +0 -357
- package/src/vendor/bootstrap-vue/src/components/form-radio/form-radio.spec.js +0 -587
- package/src/vendor/bootstrap-vue/src/components/form-radio/package.json +0 -162
- package/src/vendor/bootstrap-vue/src/components/form-select/README.md +0 -504
- package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option-group.spec.js +0 -138
- package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option.spec.js +0 -75
- package/src/vendor/bootstrap-vue/src/components/form-select/form-select.spec.js +0 -723
- package/src/vendor/bootstrap-vue/src/components/form-select/package.json +0 -132
- package/src/vendor/bootstrap-vue/src/components/form-textarea/README.md +0 -453
- package/src/vendor/bootstrap-vue/src/components/form-textarea/form-textarea.spec.js +0 -1000
- package/src/vendor/bootstrap-vue/src/components/form-textarea/package.json +0 -122
- package/src/vendor/bootstrap-vue/src/components/layout/README.md +0 -791
- package/src/vendor/bootstrap-vue/src/components/layout/col.spec.js +0 -192
- package/src/vendor/bootstrap-vue/src/components/layout/form-row.spec.js +0 -45
- package/src/vendor/bootstrap-vue/src/components/layout/package.json +0 -99
- package/src/vendor/bootstrap-vue/src/components/link/README.md +0 -76
- package/src/vendor/bootstrap-vue/src/components/link/link.spec.js +0 -434
- package/src/vendor/bootstrap-vue/src/components/link/package.json +0 -57
- package/src/vendor/bootstrap-vue/src/components/modal/MODIFICATIONS.md +0 -30
- package/src/vendor/bootstrap-vue/src/components/modal/README.md +0 -1067
- package/src/vendor/bootstrap-vue/src/components/modal/helpers/bv-modal-event.class.spec.js +0 -82
- package/src/vendor/bootstrap-vue/src/components/modal/modal.spec.js +0 -1418
- package/src/vendor/bootstrap-vue/src/components/modal/package.json +0 -544
- package/src/vendor/bootstrap-vue/src/components/nav/README.md +0 -362
- package/src/vendor/bootstrap-vue/src/components/nav/nav-item.spec.js +0 -127
- package/src/vendor/bootstrap-vue/src/components/nav/nav.spec.js +0 -177
- package/src/vendor/bootstrap-vue/src/components/nav/package.json +0 -73
- package/src/vendor/bootstrap-vue/src/components/popover/README.md +0 -919
- package/src/vendor/bootstrap-vue/src/components/popover/package.json +0 -261
- package/src/vendor/bootstrap-vue/src/components/popover/popover.spec.js +0 -198
- package/src/vendor/bootstrap-vue/src/components/table/README.md +0 -3157
- package/src/vendor/bootstrap-vue/src/components/table/helpers/default-sort-compare.spec.js +0 -112
- package/src/vendor/bootstrap-vue/src/components/table/helpers/normalize-fields.spec.js +0 -93
- package/src/vendor/bootstrap-vue/src/components/table/package.json +0 -1763
- package/src/vendor/bootstrap-vue/src/components/table/table-busy.spec.js +0 -150
- package/src/vendor/bootstrap-vue/src/components/table/table-caption.spec.js +0 -176
- package/src/vendor/bootstrap-vue/src/components/table/table-colgroup.spec.js +0 -81
- package/src/vendor/bootstrap-vue/src/components/table/table-filtering.spec.js +0 -409
- package/src/vendor/bootstrap-vue/src/components/table/table-item-formatter.spec.js +0 -56
- package/src/vendor/bootstrap-vue/src/components/table/table-lite.spec.js +0 -682
- package/src/vendor/bootstrap-vue/src/components/table/table-pagination.spec.js +0 -133
- package/src/vendor/bootstrap-vue/src/components/table/table-primarykey.spec.js +0 -83
- package/src/vendor/bootstrap-vue/src/components/table/table-provider.spec.js +0 -411
- package/src/vendor/bootstrap-vue/src/components/table/table-row-details.spec.js +0 -459
- package/src/vendor/bootstrap-vue/src/components/table/table-selectable.spec.js +0 -1182
- package/src/vendor/bootstrap-vue/src/components/table/table-simple.spec.js +0 -206
- package/src/vendor/bootstrap-vue/src/components/table/table-sorting.spec.js +0 -858
- package/src/vendor/bootstrap-vue/src/components/table/table-sticky-column.spec.js +0 -377
- package/src/vendor/bootstrap-vue/src/components/table/table-tbody-bottom-row.spec.js +0 -94
- package/src/vendor/bootstrap-vue/src/components/table/table-tbody-row-events.spec.js +0 -529
- package/src/vendor/bootstrap-vue/src/components/table/table-tbody-top-row.spec.js +0 -88
- package/src/vendor/bootstrap-vue/src/components/table/table-tbody-transition.spec.js +0 -83
- package/src/vendor/bootstrap-vue/src/components/table/table-tfoot-custom.spec.js +0 -91
- package/src/vendor/bootstrap-vue/src/components/table/table-tfoot-events.spec.js +0 -137
- package/src/vendor/bootstrap-vue/src/components/table/table-thead-events.spec.js +0 -155
- package/src/vendor/bootstrap-vue/src/components/table/table-thead-top.spec.js +0 -96
- package/src/vendor/bootstrap-vue/src/components/table/table.spec.js +0 -692
- package/src/vendor/bootstrap-vue/src/components/tabs/README.md +0 -433
- package/src/vendor/bootstrap-vue/src/components/tabs/package.json +0 -205
- package/src/vendor/bootstrap-vue/src/components/tabs/tab.spec.js +0 -330
- package/src/vendor/bootstrap-vue/src/components/tabs/tabs.spec.js +0 -778
- package/src/vendor/bootstrap-vue/src/components/toast/README.md +0 -655
- package/src/vendor/bootstrap-vue/src/components/toast/helpers/bv-toast.spec.js +0 -117
- package/src/vendor/bootstrap-vue/src/components/toast/package.json +0 -184
- package/src/vendor/bootstrap-vue/src/components/toast/toast.spec.js +0 -294
- package/src/vendor/bootstrap-vue/src/components/toast/toaster.spec.js +0 -77
- package/src/vendor/bootstrap-vue/src/components/tooltip/README.md +0 -559
- package/src/vendor/bootstrap-vue/src/components/tooltip/package.json +0 -258
- package/src/vendor/bootstrap-vue/src/components/tooltip/tooltip.spec.js +0 -1240
- package/src/vendor/bootstrap-vue/src/components/transition/package.json +0 -5
- package/src/vendor/bootstrap-vue/src/components/transporter/package.json +0 -5
- package/src/vendor/bootstrap-vue/src/components/transporter/transporter.spec.js +0 -85
- package/src/vendor/bootstrap-vue/src/directives/modal/modal.spec.js +0 -191
- package/src/vendor/bootstrap-vue/src/directives/tooltip/README.md +0 -521
- package/src/vendor/bootstrap-vue/src/directives/tooltip/package.json +0 -131
- package/src/vendor/bootstrap-vue/src/directives/tooltip/tooltip.spec.js +0 -190
- package/src/vendor/bootstrap-vue/src/directives/visible/README.md +0 -244
- package/src/vendor/bootstrap-vue/src/directives/visible/package.json +0 -24
- package/src/vendor/bootstrap-vue/src/mixins/attrs.spec.js +0 -194
- package/src/vendor/bootstrap-vue/src/mixins/click-out.spec.js +0 -52
- package/src/vendor/bootstrap-vue/src/mixins/focus-in.spec.js +0 -53
- package/src/vendor/bootstrap-vue/src/mixins/listen-on-document.spec.js +0 -117
- package/src/vendor/bootstrap-vue/src/mixins/listen-on-root.spec.js +0 -77
- package/src/vendor/bootstrap-vue/src/mixins/listen-on-window.spec.js +0 -115
- package/src/vendor/bootstrap-vue/src/mixins/listeners.spec.js +0 -245
- package/src/vendor/bootstrap-vue/src/utils/bv-event.class.spec.js +0 -66
- package/src/vendor/bootstrap-vue/src/utils/clone-deep.spec.js +0 -70
- package/src/vendor/bootstrap-vue/src/utils/config.spec.js +0 -169
- package/src/vendor/bootstrap-vue/src/utils/css-escape.spec.js +0 -82
- package/src/vendor/bootstrap-vue/src/utils/dom.spec.js +0 -291
- package/src/vendor/bootstrap-vue/src/utils/events.spec.js +0 -41
- package/src/vendor/bootstrap-vue/src/utils/get.spec.js +0 -109
- package/src/vendor/bootstrap-vue/src/utils/inspect.spec.js +0 -251
- package/src/vendor/bootstrap-vue/src/utils/loose-equal.spec.js +0 -203
- package/src/vendor/bootstrap-vue/src/utils/normalize-slot.spec.js +0 -63
- package/src/vendor/bootstrap-vue/src/utils/number.spec.js +0 -72
- package/src/vendor/bootstrap-vue/src/utils/object.spec.js +0 -61
- package/src/vendor/bootstrap-vue/src/utils/props.spec.js +0 -112
- package/src/vendor/bootstrap-vue/src/utils/router.spec.js +0 -248
- package/src/vendor/bootstrap-vue/src/utils/string.spec.js +0 -65
- package/src/vendor/bootstrap-vue/src/utils/stringify-object-values.spec.js +0 -47
- package/src/vendor/bootstrap-vue/src/utils/warn.spec.js +0 -54
|
@@ -1,858 +0,0 @@
|
|
|
1
|
-
import { mount } from '@vue/test-utils'
|
|
2
|
-
import { waitNT } from '../../../tests/utils'
|
|
3
|
-
import { defaultSortCompare } from './helpers/default-sort-compare'
|
|
4
|
-
import { BTable } from './table'
|
|
5
|
-
|
|
6
|
-
const testItems = [{ a: 3, b: 'b', c: 'x' }, { a: 1, b: 'c', c: 'y' }, { a: 2, b: 'a', c: 'z' }]
|
|
7
|
-
const testFields = [
|
|
8
|
-
{ key: 'a', label: 'A', sortable: true },
|
|
9
|
-
{ key: 'b', label: 'B', sortable: true },
|
|
10
|
-
{ key: 'c', label: 'C', sortable: false }
|
|
11
|
-
]
|
|
12
|
-
|
|
13
|
-
describe('table > sorting', () => {
|
|
14
|
-
it('should not be sorted by default', async () => {
|
|
15
|
-
const wrapper = mount(BTable, {
|
|
16
|
-
propsData: {
|
|
17
|
-
fields: testFields,
|
|
18
|
-
items: testItems
|
|
19
|
-
}
|
|
20
|
-
})
|
|
21
|
-
|
|
22
|
-
await waitNT(wrapper.vm)
|
|
23
|
-
|
|
24
|
-
expect(wrapper).toBeDefined()
|
|
25
|
-
expect(wrapper.findAll('tbody > tr').exists()).toBe(true)
|
|
26
|
-
expect(wrapper.findAll('tbody > tr').length).toBe(3)
|
|
27
|
-
|
|
28
|
-
expect(wrapper.emitted('input')).toBeDefined()
|
|
29
|
-
expect(wrapper.emitted('input').length).toBe(1)
|
|
30
|
-
expect(wrapper.emitted('input')[0][0]).toEqual(testItems)
|
|
31
|
-
const $rows = wrapper.findAll('tbody > tr').wrappers
|
|
32
|
-
expect($rows.length).toBe(3)
|
|
33
|
-
// Map the rows to the first column text value
|
|
34
|
-
const columnA = $rows.map(row => {
|
|
35
|
-
return row
|
|
36
|
-
.findAll('td')
|
|
37
|
-
.at(0)
|
|
38
|
-
.text()
|
|
39
|
-
})
|
|
40
|
-
expect(columnA[0]).toBe('3')
|
|
41
|
-
expect(columnA[1]).toBe('1')
|
|
42
|
-
expect(columnA[2]).toBe('2')
|
|
43
|
-
|
|
44
|
-
wrapper.destroy()
|
|
45
|
-
})
|
|
46
|
-
|
|
47
|
-
it('should emit `field.sortKey` if specified and no local sorting', async () => {
|
|
48
|
-
const wrapper = mount(BTable, {
|
|
49
|
-
propsData: {
|
|
50
|
-
fields: [...testFields, { key: 'd', label: 'D', sortable: true, sortKey: 'non-local' }],
|
|
51
|
-
items: testItems,
|
|
52
|
-
noLocalSorting: true
|
|
53
|
-
}
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
expect(wrapper).toBeDefined()
|
|
57
|
-
|
|
58
|
-
await wrapper
|
|
59
|
-
.findAll('thead > tr > th')
|
|
60
|
-
.at(3)
|
|
61
|
-
.trigger('keydown.enter')
|
|
62
|
-
expect(wrapper.emitted('sort-changed').length).toBe(1)
|
|
63
|
-
expect(wrapper.emitted('sort-changed')[0][0].sortBy).toEqual('non-local')
|
|
64
|
-
})
|
|
65
|
-
|
|
66
|
-
it('should set `aria-sort` when `field.sortKey` and `no-local-sorting` is used', async () => {
|
|
67
|
-
const wrapper = mount(BTable, {
|
|
68
|
-
propsData: {
|
|
69
|
-
fields: [...testFields, { key: 'd', label: 'D', sortable: true, sortKey: 'non-local' }],
|
|
70
|
-
items: testItems,
|
|
71
|
-
noLocalSorting: true
|
|
72
|
-
}
|
|
73
|
-
})
|
|
74
|
-
|
|
75
|
-
expect(wrapper).toBeDefined()
|
|
76
|
-
const $header = wrapper.findAll('thead > tr > th').at(3)
|
|
77
|
-
|
|
78
|
-
await $header.trigger('keydown.enter')
|
|
79
|
-
expect(wrapper.emitted('sort-changed').length).toBe(1)
|
|
80
|
-
expect(wrapper.emitted('sort-changed')[0][0].sortBy).toEqual('non-local')
|
|
81
|
-
|
|
82
|
-
expect($header.attributes('aria-sort')).toBe('ascending')
|
|
83
|
-
})
|
|
84
|
-
|
|
85
|
-
it('should sort column descending when sortBy set and sortDesc changed, with proper attributes', async () => {
|
|
86
|
-
const wrapper = mount(BTable, {
|
|
87
|
-
propsData: {
|
|
88
|
-
fields: testFields,
|
|
89
|
-
items: testItems,
|
|
90
|
-
sortBy: 'a',
|
|
91
|
-
sortDesc: false
|
|
92
|
-
}
|
|
93
|
-
})
|
|
94
|
-
|
|
95
|
-
await waitNT(wrapper.vm)
|
|
96
|
-
|
|
97
|
-
expect(wrapper).toBeDefined()
|
|
98
|
-
expect(wrapper.findAll('tbody > tr').exists()).toBe(true)
|
|
99
|
-
expect(wrapper.findAll('tbody > tr').length).toBe(3)
|
|
100
|
-
|
|
101
|
-
expect(wrapper.emitted('input')).toBeDefined()
|
|
102
|
-
expect(wrapper.emitted('input').length).toBe(1)
|
|
103
|
-
let $rows = wrapper.findAll('tbody > tr').wrappers
|
|
104
|
-
expect($rows.length).toBe(3)
|
|
105
|
-
// Map the rows to the first column text value
|
|
106
|
-
let columnA = $rows.map(row => {
|
|
107
|
-
return row
|
|
108
|
-
.findAll('td')
|
|
109
|
-
.at(0)
|
|
110
|
-
.text()
|
|
111
|
-
})
|
|
112
|
-
expect(columnA[0]).toBe('1')
|
|
113
|
-
expect(columnA[1]).toBe('2')
|
|
114
|
-
expect(columnA[2]).toBe('3')
|
|
115
|
-
|
|
116
|
-
let $ths = wrapper.findAll('thead > tr > th')
|
|
117
|
-
|
|
118
|
-
// Currently sorted as ascending
|
|
119
|
-
expect($ths.at(0).attributes('aria-sort')).toBe('ascending')
|
|
120
|
-
expect($ths.at(0).attributes('tabindex')).toBe('0')
|
|
121
|
-
// For switching to descending
|
|
122
|
-
expect(
|
|
123
|
-
$ths
|
|
124
|
-
.at(0)
|
|
125
|
-
.find('.gl-sr-only')
|
|
126
|
-
.text()
|
|
127
|
-
).toContain(wrapper.vm.labelSortDesc)
|
|
128
|
-
|
|
129
|
-
// Not sorted by this column
|
|
130
|
-
expect($ths.at(1).attributes('aria-sort')).toBe('none')
|
|
131
|
-
expect($ths.at(1).attributes('tabindex')).toBe('0')
|
|
132
|
-
// For sorting by ascending
|
|
133
|
-
expect(
|
|
134
|
-
$ths
|
|
135
|
-
.at(1)
|
|
136
|
-
.find('.gl-sr-only')
|
|
137
|
-
.text()
|
|
138
|
-
).toContain(wrapper.vm.labelSortAsc)
|
|
139
|
-
|
|
140
|
-
// Not a sortable column
|
|
141
|
-
expect($ths.at(2).attributes('aria-sort')).toBeUndefined()
|
|
142
|
-
expect($ths.at(2).attributes('tabindex')).toBeUndefined()
|
|
143
|
-
// For clearing sorting
|
|
144
|
-
expect(
|
|
145
|
-
$ths
|
|
146
|
-
.at(2)
|
|
147
|
-
.find('.gl-sr-only')
|
|
148
|
-
.text()
|
|
149
|
-
).toContain(wrapper.vm.labelSortClear)
|
|
150
|
-
|
|
151
|
-
// Change sort direction
|
|
152
|
-
await wrapper.setProps({ sortDesc: true })
|
|
153
|
-
expect(wrapper.emitted('input').length).toBe(2)
|
|
154
|
-
$rows = wrapper.findAll('tbody > tr').wrappers
|
|
155
|
-
expect($rows.length).toBe(3)
|
|
156
|
-
// Map the rows to the first column text value
|
|
157
|
-
columnA = $rows.map(row => {
|
|
158
|
-
return row
|
|
159
|
-
.findAll('td')
|
|
160
|
-
.at(0)
|
|
161
|
-
.text()
|
|
162
|
-
})
|
|
163
|
-
expect(columnA[0]).toBe('3')
|
|
164
|
-
expect(columnA[1]).toBe('2')
|
|
165
|
-
expect(columnA[2]).toBe('1')
|
|
166
|
-
|
|
167
|
-
$ths = wrapper.findAll('thead > tr > th')
|
|
168
|
-
|
|
169
|
-
// Currently sorted as descending
|
|
170
|
-
expect($ths.at(0).attributes('aria-sort')).toBe('descending')
|
|
171
|
-
// For switching to ascending
|
|
172
|
-
expect(
|
|
173
|
-
$ths
|
|
174
|
-
.at(0)
|
|
175
|
-
.find('.gl-sr-only')
|
|
176
|
-
.text()
|
|
177
|
-
).toContain(wrapper.vm.labelSortAsc)
|
|
178
|
-
|
|
179
|
-
// Not sorted by this column
|
|
180
|
-
expect($ths.at(1).attributes('aria-sort')).toBe('none')
|
|
181
|
-
// For sorting by ascending
|
|
182
|
-
expect(
|
|
183
|
-
$ths
|
|
184
|
-
.at(1)
|
|
185
|
-
.find('.gl-sr-only')
|
|
186
|
-
.text()
|
|
187
|
-
).toContain(wrapper.vm.labelSortAsc)
|
|
188
|
-
|
|
189
|
-
// Not a sortable column
|
|
190
|
-
expect($ths.at(2).attributes('aria-sort')).toBeUndefined()
|
|
191
|
-
// For clearing sorting
|
|
192
|
-
expect(
|
|
193
|
-
$ths
|
|
194
|
-
.at(2)
|
|
195
|
-
.find('.gl-sr-only')
|
|
196
|
-
.text()
|
|
197
|
-
).toContain(wrapper.vm.labelSortClear)
|
|
198
|
-
|
|
199
|
-
// Clear sort
|
|
200
|
-
await wrapper.setProps({
|
|
201
|
-
sortBy: null,
|
|
202
|
-
sortDesc: false
|
|
203
|
-
})
|
|
204
|
-
const [[lastInput]] = wrapper.emitted('input').reverse()
|
|
205
|
-
expect(lastInput).toStrictEqual([
|
|
206
|
-
{ a: 3, b: 'b', c: 'x' },
|
|
207
|
-
{ a: 1, b: 'c', c: 'y' },
|
|
208
|
-
{ a: 2, b: 'a', c: 'z' }
|
|
209
|
-
])
|
|
210
|
-
$rows = wrapper.findAll('tbody > tr').wrappers
|
|
211
|
-
expect($rows.length).toBe(3)
|
|
212
|
-
// Map the rows to the first column text value
|
|
213
|
-
columnA = $rows.map(row => {
|
|
214
|
-
return row
|
|
215
|
-
.findAll('td')
|
|
216
|
-
.at(0)
|
|
217
|
-
.text()
|
|
218
|
-
})
|
|
219
|
-
expect(columnA[0]).toBe('3')
|
|
220
|
-
expect(columnA[1]).toBe('1')
|
|
221
|
-
expect(columnA[2]).toBe('2')
|
|
222
|
-
|
|
223
|
-
$ths = wrapper.findAll('thead > tr > th')
|
|
224
|
-
|
|
225
|
-
// Currently not sorted
|
|
226
|
-
expect($ths.at(0).attributes('aria-sort')).toBe('none')
|
|
227
|
-
// For sorting by ascending
|
|
228
|
-
expect(
|
|
229
|
-
$ths
|
|
230
|
-
.at(0)
|
|
231
|
-
.find('.gl-sr-only')
|
|
232
|
-
.text()
|
|
233
|
-
).toContain(wrapper.vm.labelSortAsc)
|
|
234
|
-
|
|
235
|
-
// Not sorted by this column
|
|
236
|
-
expect($ths.at(1).attributes('aria-sort')).toBe('none')
|
|
237
|
-
// For sorting by ascending
|
|
238
|
-
expect(
|
|
239
|
-
$ths
|
|
240
|
-
.at(1)
|
|
241
|
-
.find('.gl-sr-only')
|
|
242
|
-
.text()
|
|
243
|
-
).toContain(wrapper.vm.labelSortAsc)
|
|
244
|
-
|
|
245
|
-
// Not a sortable column
|
|
246
|
-
expect($ths.at(2).attributes('aria-sort')).toBeUndefined()
|
|
247
|
-
// For clearing sorting
|
|
248
|
-
expect(
|
|
249
|
-
$ths
|
|
250
|
-
.at(2)
|
|
251
|
-
.find('.gl-sr-only')
|
|
252
|
-
.exists()
|
|
253
|
-
).toBe(false)
|
|
254
|
-
|
|
255
|
-
wrapper.destroy()
|
|
256
|
-
})
|
|
257
|
-
|
|
258
|
-
it('should accept custom sort compare', async () => {
|
|
259
|
-
const wrapper = mount(BTable, {
|
|
260
|
-
propsData: {
|
|
261
|
-
fields: testFields,
|
|
262
|
-
items: testItems,
|
|
263
|
-
sortBy: 'a',
|
|
264
|
-
sortDesc: false,
|
|
265
|
-
sortCompare: (a, b, sortBy) => {
|
|
266
|
-
// We just use our default sort compare to test passing a function
|
|
267
|
-
return defaultSortCompare(a, b, { sortBy })
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
})
|
|
271
|
-
|
|
272
|
-
await waitNT(wrapper.vm)
|
|
273
|
-
|
|
274
|
-
expect(wrapper).toBeDefined()
|
|
275
|
-
expect(wrapper.findAll('tbody > tr').exists()).toBe(true)
|
|
276
|
-
expect(wrapper.findAll('tbody > tr').length).toBe(3)
|
|
277
|
-
|
|
278
|
-
expect(wrapper.emitted('input')).toBeDefined()
|
|
279
|
-
expect(wrapper.emitted('input').length).toBe(1)
|
|
280
|
-
const $rows = wrapper.findAll('tbody > tr').wrappers
|
|
281
|
-
expect($rows.length).toBe(3)
|
|
282
|
-
// Map the rows to the first column text value
|
|
283
|
-
const columnA = $rows.map(row => {
|
|
284
|
-
return row
|
|
285
|
-
.findAll('td')
|
|
286
|
-
.at(0)
|
|
287
|
-
.text()
|
|
288
|
-
})
|
|
289
|
-
expect(columnA[0]).toBe('1')
|
|
290
|
-
expect(columnA[1]).toBe('2')
|
|
291
|
-
expect(columnA[2]).toBe('3')
|
|
292
|
-
|
|
293
|
-
wrapper.destroy()
|
|
294
|
-
})
|
|
295
|
-
|
|
296
|
-
it('should sort columns when clicking headers', async () => {
|
|
297
|
-
const wrapper = mount(BTable, {
|
|
298
|
-
propsData: {
|
|
299
|
-
fields: testFields,
|
|
300
|
-
items: testItems
|
|
301
|
-
}
|
|
302
|
-
})
|
|
303
|
-
|
|
304
|
-
await waitNT(wrapper.vm)
|
|
305
|
-
|
|
306
|
-
expect(wrapper).toBeDefined()
|
|
307
|
-
expect(wrapper.findAll('tbody > tr').exists()).toBe(true)
|
|
308
|
-
expect(wrapper.findAll('tbody > tr').length).toBe(3)
|
|
309
|
-
|
|
310
|
-
// Should not be sorted
|
|
311
|
-
expect(wrapper.emitted('input')).toBeDefined()
|
|
312
|
-
expect(wrapper.emitted('sort-changed')).toBeUndefined()
|
|
313
|
-
let $rows = wrapper.findAll('tbody > tr').wrappers
|
|
314
|
-
expect($rows.length).toBe(3)
|
|
315
|
-
// Map the rows to the first column text value
|
|
316
|
-
let columnA = $rows.map(row => {
|
|
317
|
-
return row
|
|
318
|
-
.findAll('td')
|
|
319
|
-
.at(0)
|
|
320
|
-
.text()
|
|
321
|
-
})
|
|
322
|
-
expect(columnA[0]).toBe('3')
|
|
323
|
-
expect(columnA[1]).toBe('1')
|
|
324
|
-
expect(columnA[2]).toBe('2')
|
|
325
|
-
|
|
326
|
-
// Sort by first column
|
|
327
|
-
await wrapper
|
|
328
|
-
.findAll('thead > tr > th')
|
|
329
|
-
.at(0)
|
|
330
|
-
.trigger('click')
|
|
331
|
-
expect(wrapper.emitted('sort-changed')).toBeDefined()
|
|
332
|
-
expect(wrapper.emitted('sort-changed').length).toBe(1)
|
|
333
|
-
expect(wrapper.emitted('sort-changed')[0][0]).toEqual(wrapper.vm.context)
|
|
334
|
-
$rows = wrapper.findAll('tbody > tr').wrappers
|
|
335
|
-
expect($rows.length).toBe(3)
|
|
336
|
-
// Map the rows to the column text value
|
|
337
|
-
columnA = $rows.map(row => {
|
|
338
|
-
return row
|
|
339
|
-
.findAll('td')
|
|
340
|
-
.at(0)
|
|
341
|
-
.text()
|
|
342
|
-
})
|
|
343
|
-
expect(columnA[0]).toBe('1')
|
|
344
|
-
expect(columnA[1]).toBe('2')
|
|
345
|
-
expect(columnA[2]).toBe('3')
|
|
346
|
-
|
|
347
|
-
// Click first column header again to reverse sort
|
|
348
|
-
await wrapper
|
|
349
|
-
.findAll('thead > tr > th')
|
|
350
|
-
.at(0)
|
|
351
|
-
.trigger('click')
|
|
352
|
-
expect(wrapper.emitted('sort-changed').length).toBe(2)
|
|
353
|
-
expect(wrapper.emitted('sort-changed')[1][0]).toEqual(wrapper.vm.context)
|
|
354
|
-
$rows = wrapper.findAll('tbody > tr').wrappers
|
|
355
|
-
expect($rows.length).toBe(3)
|
|
356
|
-
// Map the rows to the column text value
|
|
357
|
-
columnA = $rows.map(row => {
|
|
358
|
-
return row
|
|
359
|
-
.findAll('td')
|
|
360
|
-
.at(0)
|
|
361
|
-
.text()
|
|
362
|
-
})
|
|
363
|
-
expect(columnA[0]).toBe('3')
|
|
364
|
-
expect(columnA[1]).toBe('2')
|
|
365
|
-
expect(columnA[2]).toBe('1')
|
|
366
|
-
|
|
367
|
-
// Click second column header to sort by it (by using keydown.enter)
|
|
368
|
-
await wrapper
|
|
369
|
-
.findAll('thead > tr > th')
|
|
370
|
-
.at(1)
|
|
371
|
-
.trigger('keydown.enter')
|
|
372
|
-
expect(wrapper.emitted('sort-changed').length).toBe(3)
|
|
373
|
-
expect(wrapper.emitted('sort-changed')[2][0]).toEqual(wrapper.vm.context)
|
|
374
|
-
$rows = wrapper.findAll('tbody > tr').wrappers
|
|
375
|
-
expect($rows.length).toBe(3)
|
|
376
|
-
// Map the rows to the column text value
|
|
377
|
-
const columnB = $rows.map(row => {
|
|
378
|
-
return row
|
|
379
|
-
.findAll('td')
|
|
380
|
-
.at(1)
|
|
381
|
-
.text()
|
|
382
|
-
})
|
|
383
|
-
expect(columnB[0]).toBe('a')
|
|
384
|
-
expect(columnB[1]).toBe('b')
|
|
385
|
-
expect(columnB[2]).toBe('c')
|
|
386
|
-
|
|
387
|
-
// Click third column header to clear sort
|
|
388
|
-
await wrapper
|
|
389
|
-
.findAll('thead > tr > th')
|
|
390
|
-
.at(2)
|
|
391
|
-
.trigger('click')
|
|
392
|
-
expect(wrapper.emitted('sort-changed').length).toBe(4)
|
|
393
|
-
expect(wrapper.emitted('sort-changed')[3][0]).toEqual(wrapper.vm.context)
|
|
394
|
-
$rows = wrapper.findAll('tbody > tr').wrappers
|
|
395
|
-
expect($rows.length).toBe(3)
|
|
396
|
-
// Map the rows to the column text value
|
|
397
|
-
columnA = $rows.map(row => {
|
|
398
|
-
return row
|
|
399
|
-
.findAll('td')
|
|
400
|
-
.at(0)
|
|
401
|
-
.text()
|
|
402
|
-
})
|
|
403
|
-
expect(columnA[0]).toBe('3')
|
|
404
|
-
expect(columnA[1]).toBe('1')
|
|
405
|
-
expect(columnA[2]).toBe('2')
|
|
406
|
-
|
|
407
|
-
wrapper.destroy()
|
|
408
|
-
})
|
|
409
|
-
|
|
410
|
-
it('should sort columns when clicking footers', async () => {
|
|
411
|
-
const wrapper = mount(BTable, {
|
|
412
|
-
propsData: {
|
|
413
|
-
fields: testFields,
|
|
414
|
-
items: testItems,
|
|
415
|
-
footClone: true
|
|
416
|
-
}
|
|
417
|
-
})
|
|
418
|
-
|
|
419
|
-
await waitNT(wrapper.vm)
|
|
420
|
-
|
|
421
|
-
expect(wrapper).toBeDefined()
|
|
422
|
-
expect(wrapper.findAll('tbody > tr').exists()).toBe(true)
|
|
423
|
-
expect(wrapper.findAll('tbody > tr').length).toBe(3)
|
|
424
|
-
|
|
425
|
-
// Should not be sorted
|
|
426
|
-
expect(wrapper.emitted('input')).toBeDefined()
|
|
427
|
-
expect(wrapper.emitted('sort-changed')).toBeUndefined()
|
|
428
|
-
let $rows = wrapper.findAll('tbody > tr').wrappers
|
|
429
|
-
expect($rows.length).toBe(3)
|
|
430
|
-
// Map the rows to the first column text value
|
|
431
|
-
let columnA = $rows.map(row => {
|
|
432
|
-
return row
|
|
433
|
-
.findAll('td')
|
|
434
|
-
.at(0)
|
|
435
|
-
.text()
|
|
436
|
-
})
|
|
437
|
-
expect(columnA[0]).toBe('3')
|
|
438
|
-
expect(columnA[1]).toBe('1')
|
|
439
|
-
expect(columnA[2]).toBe('2')
|
|
440
|
-
// Should have aria-* labels
|
|
441
|
-
expect(wrapper.findAll('tfoot > tr > th[aria-sort]').length).toBe(2)
|
|
442
|
-
expect(wrapper.findAll('tfoot > tr > th > .gl-sr-only').length).toBe(2)
|
|
443
|
-
|
|
444
|
-
// Sort by first column
|
|
445
|
-
await wrapper
|
|
446
|
-
.findAll('tfoot > tr > th')
|
|
447
|
-
.at(0)
|
|
448
|
-
.trigger('click')
|
|
449
|
-
expect(wrapper.emitted('sort-changed')).toBeDefined()
|
|
450
|
-
expect(wrapper.emitted('sort-changed').length).toBe(1)
|
|
451
|
-
expect(wrapper.emitted('sort-changed')[0][0]).toEqual(wrapper.vm.context)
|
|
452
|
-
$rows = wrapper.findAll('tbody > tr').wrappers
|
|
453
|
-
expect($rows.length).toBe(3)
|
|
454
|
-
// Map the rows to the column text value
|
|
455
|
-
columnA = $rows.map(row => {
|
|
456
|
-
return row
|
|
457
|
-
.findAll('td')
|
|
458
|
-
.at(0)
|
|
459
|
-
.text()
|
|
460
|
-
})
|
|
461
|
-
expect(columnA[0]).toBe('1')
|
|
462
|
-
expect(columnA[1]).toBe('2')
|
|
463
|
-
expect(columnA[2]).toBe('3')
|
|
464
|
-
// Should have aria-* labels
|
|
465
|
-
expect(wrapper.findAll('tfoot > tr > th[aria-sort]').length).toBe(2)
|
|
466
|
-
expect(wrapper.findAll('tfoot > tr > th > .gl-sr-only').length).toBe(3)
|
|
467
|
-
|
|
468
|
-
// Click first column header again to reverse sort
|
|
469
|
-
await wrapper
|
|
470
|
-
.findAll('tfoot > tr > th')
|
|
471
|
-
.at(0)
|
|
472
|
-
.trigger('click')
|
|
473
|
-
expect(wrapper.emitted('sort-changed').length).toBe(2)
|
|
474
|
-
expect(wrapper.emitted('sort-changed')[1][0]).toEqual(wrapper.vm.context)
|
|
475
|
-
$rows = wrapper.findAll('tbody > tr').wrappers
|
|
476
|
-
expect($rows.length).toBe(3)
|
|
477
|
-
// Map the rows to the column text value
|
|
478
|
-
columnA = $rows.map(row => {
|
|
479
|
-
return row
|
|
480
|
-
.findAll('td')
|
|
481
|
-
.at(0)
|
|
482
|
-
.text()
|
|
483
|
-
})
|
|
484
|
-
expect(columnA[0]).toBe('3')
|
|
485
|
-
expect(columnA[1]).toBe('2')
|
|
486
|
-
expect(columnA[2]).toBe('1')
|
|
487
|
-
// Should have aria-* labels
|
|
488
|
-
expect(wrapper.findAll('tfoot > tr > th[aria-sort]').length).toBe(2)
|
|
489
|
-
expect(wrapper.findAll('tfoot > tr > th > .gl-sr-only').length).toBe(3)
|
|
490
|
-
|
|
491
|
-
// Click second column header to sort by it (by using keydown.enter)
|
|
492
|
-
await wrapper
|
|
493
|
-
.findAll('tfoot > tr > th')
|
|
494
|
-
.at(1)
|
|
495
|
-
.trigger('keydown.enter')
|
|
496
|
-
expect(wrapper.emitted('sort-changed').length).toBe(3)
|
|
497
|
-
expect(wrapper.emitted('sort-changed')[2][0]).toEqual(wrapper.vm.context)
|
|
498
|
-
$rows = wrapper.findAll('tbody > tr').wrappers
|
|
499
|
-
expect($rows.length).toBe(3)
|
|
500
|
-
// Map the rows to the column text value
|
|
501
|
-
const columnB = $rows.map(row => {
|
|
502
|
-
return row
|
|
503
|
-
.findAll('td')
|
|
504
|
-
.at(1)
|
|
505
|
-
.text()
|
|
506
|
-
})
|
|
507
|
-
expect(columnB[0]).toBe('a')
|
|
508
|
-
expect(columnB[1]).toBe('b')
|
|
509
|
-
expect(columnB[2]).toBe('c')
|
|
510
|
-
|
|
511
|
-
// Click third column header to clear sort
|
|
512
|
-
await wrapper
|
|
513
|
-
.findAll('tfoot > tr > th')
|
|
514
|
-
.at(2)
|
|
515
|
-
.trigger('click')
|
|
516
|
-
expect(wrapper.emitted('sort-changed').length).toBe(4)
|
|
517
|
-
expect(wrapper.emitted('sort-changed')[3][0]).toEqual(wrapper.vm.context)
|
|
518
|
-
$rows = wrapper.findAll('tbody > tr').wrappers
|
|
519
|
-
expect($rows.length).toBe(3)
|
|
520
|
-
// Map the rows to the column text value
|
|
521
|
-
columnA = $rows.map(row => {
|
|
522
|
-
return row
|
|
523
|
-
.findAll('td')
|
|
524
|
-
.at(0)
|
|
525
|
-
.text()
|
|
526
|
-
})
|
|
527
|
-
expect(columnA[0]).toBe('3')
|
|
528
|
-
expect(columnA[1]).toBe('1')
|
|
529
|
-
expect(columnA[2]).toBe('2')
|
|
530
|
-
// Should have aria-* labels
|
|
531
|
-
expect(wrapper.findAll('tfoot > tr > th[aria-sort]').length).toBe(2)
|
|
532
|
-
expect(wrapper.findAll('tfoot > tr > th > .gl-sr-only').length).toBe(2)
|
|
533
|
-
|
|
534
|
-
wrapper.destroy()
|
|
535
|
-
})
|
|
536
|
-
|
|
537
|
-
it('should not sort columns when clicking footers and no-footer-sorting set', async () => {
|
|
538
|
-
const wrapper = mount(BTable, {
|
|
539
|
-
propsData: {
|
|
540
|
-
fields: testFields,
|
|
541
|
-
items: testItems,
|
|
542
|
-
footClone: true,
|
|
543
|
-
noFooterSorting: true
|
|
544
|
-
}
|
|
545
|
-
})
|
|
546
|
-
|
|
547
|
-
await waitNT(wrapper.vm)
|
|
548
|
-
|
|
549
|
-
expect(wrapper).toBeDefined()
|
|
550
|
-
expect(wrapper.findAll('tbody > tr').exists()).toBe(true)
|
|
551
|
-
expect(wrapper.findAll('tbody > tr').length).toBe(3)
|
|
552
|
-
|
|
553
|
-
// Should not be sorted
|
|
554
|
-
expect(wrapper.emitted('input')).toBeDefined()
|
|
555
|
-
expect(wrapper.emitted('sort-changed')).toBeUndefined()
|
|
556
|
-
let $rows = wrapper.findAll('tbody > tr').wrappers
|
|
557
|
-
expect($rows.length).toBe(3)
|
|
558
|
-
// Map the rows to the first column text value
|
|
559
|
-
let columnA = $rows.map(row => {
|
|
560
|
-
return row
|
|
561
|
-
.findAll('td')
|
|
562
|
-
.at(0)
|
|
563
|
-
.text()
|
|
564
|
-
})
|
|
565
|
-
expect(columnA[0]).toBe('3')
|
|
566
|
-
expect(columnA[1]).toBe('1')
|
|
567
|
-
expect(columnA[2]).toBe('2')
|
|
568
|
-
// Shouldn't have aria-* labels
|
|
569
|
-
expect(wrapper.findAll('tfoot > tr > th[aria-sort]').length).toBe(0)
|
|
570
|
-
expect(wrapper.findAll('tfoot > tr > th > .gl-sr-only').length).toBe(0)
|
|
571
|
-
|
|
572
|
-
// Click first column
|
|
573
|
-
await wrapper
|
|
574
|
-
.findAll('tfoot > tr > th')
|
|
575
|
-
.at(0)
|
|
576
|
-
.trigger('click')
|
|
577
|
-
expect(wrapper.emitted('sort-changed')).toBeUndefined()
|
|
578
|
-
$rows = wrapper.findAll('tbody > tr').wrappers
|
|
579
|
-
expect($rows.length).toBe(3)
|
|
580
|
-
// Map the rows to the column text value
|
|
581
|
-
columnA = $rows.map(row => {
|
|
582
|
-
return row
|
|
583
|
-
.findAll('td')
|
|
584
|
-
.at(0)
|
|
585
|
-
.text()
|
|
586
|
-
})
|
|
587
|
-
expect(columnA[0]).toBe('3')
|
|
588
|
-
expect(columnA[1]).toBe('1')
|
|
589
|
-
expect(columnA[2]).toBe('2')
|
|
590
|
-
// Shouldn't have aria-* labels
|
|
591
|
-
expect(wrapper.findAll('tfoot > tr > th[aria-sort]').length).toBe(0)
|
|
592
|
-
expect(wrapper.findAll('tfoot > tr > th > .gl-sr-only').length).toBe(0)
|
|
593
|
-
|
|
594
|
-
// Click third column header
|
|
595
|
-
await wrapper
|
|
596
|
-
.findAll('tfoot > tr > th')
|
|
597
|
-
.at(2)
|
|
598
|
-
.trigger('click')
|
|
599
|
-
expect(wrapper.emitted('sort-changed')).toBeUndefined()
|
|
600
|
-
$rows = wrapper.findAll('tbody > tr').wrappers
|
|
601
|
-
expect($rows.length).toBe(3)
|
|
602
|
-
// Map the rows to the column text value
|
|
603
|
-
columnA = $rows.map(row => {
|
|
604
|
-
return row
|
|
605
|
-
.findAll('td')
|
|
606
|
-
.at(0)
|
|
607
|
-
.text()
|
|
608
|
-
})
|
|
609
|
-
expect(columnA[0]).toBe('3')
|
|
610
|
-
expect(columnA[1]).toBe('1')
|
|
611
|
-
expect(columnA[2]).toBe('2')
|
|
612
|
-
// Shouldn't have aria-* labels
|
|
613
|
-
expect(wrapper.findAll('tfoot > tr > th[aria-sort]').length).toBe(0)
|
|
614
|
-
expect(wrapper.findAll('tfoot > tr > th > .gl-sr-only').length).toBe(0)
|
|
615
|
-
|
|
616
|
-
wrapper.destroy()
|
|
617
|
-
})
|
|
618
|
-
|
|
619
|
-
it('should sort column descending first, when sort-direction=desc', async () => {
|
|
620
|
-
const wrapper = mount(BTable, {
|
|
621
|
-
propsData: {
|
|
622
|
-
fields: testFields,
|
|
623
|
-
items: testItems,
|
|
624
|
-
sortDesc: false,
|
|
625
|
-
sortDirection: 'desc'
|
|
626
|
-
}
|
|
627
|
-
})
|
|
628
|
-
|
|
629
|
-
await waitNT(wrapper.vm)
|
|
630
|
-
|
|
631
|
-
expect(wrapper).toBeDefined()
|
|
632
|
-
expect(wrapper.findAll('tbody > tr').exists()).toBe(true)
|
|
633
|
-
expect(wrapper.findAll('tbody > tr').length).toBe(3)
|
|
634
|
-
|
|
635
|
-
let $rows = wrapper.findAll('tbody > tr').wrappers
|
|
636
|
-
expect($rows.length).toBe(3)
|
|
637
|
-
// Map the rows to the first column text value
|
|
638
|
-
let columnA = $rows.map(row => {
|
|
639
|
-
return row
|
|
640
|
-
.findAll('td')
|
|
641
|
-
.at(0)
|
|
642
|
-
.text()
|
|
643
|
-
})
|
|
644
|
-
expect(columnA[0]).toBe('3')
|
|
645
|
-
expect(columnA[1]).toBe('1')
|
|
646
|
-
expect(columnA[2]).toBe('2')
|
|
647
|
-
|
|
648
|
-
let $ths = wrapper.findAll('thead > tr > th')
|
|
649
|
-
|
|
650
|
-
// Currently not sorted
|
|
651
|
-
expect($ths.at(0).attributes('aria-sort')).toBe('none')
|
|
652
|
-
// For switching to descending
|
|
653
|
-
expect(
|
|
654
|
-
$ths
|
|
655
|
-
.at(0)
|
|
656
|
-
.find('.gl-sr-only')
|
|
657
|
-
.text()
|
|
658
|
-
).toContain(wrapper.vm.labelSortDesc)
|
|
659
|
-
|
|
660
|
-
// Not sorted by this column
|
|
661
|
-
expect($ths.at(1).attributes('aria-sort')).toBe('none')
|
|
662
|
-
// For sorting by ascending
|
|
663
|
-
expect(
|
|
664
|
-
$ths
|
|
665
|
-
.at(1)
|
|
666
|
-
.find('.gl-sr-only')
|
|
667
|
-
.text()
|
|
668
|
-
).toContain(wrapper.vm.labelSortDesc)
|
|
669
|
-
|
|
670
|
-
// Not a sortable column
|
|
671
|
-
expect($ths.at(2).attributes('aria-sort')).toBeUndefined()
|
|
672
|
-
// For clearing sorting
|
|
673
|
-
expect(
|
|
674
|
-
$ths
|
|
675
|
-
.at(2)
|
|
676
|
-
.find('.gl-sr-only')
|
|
677
|
-
.exists()
|
|
678
|
-
).toBe(false)
|
|
679
|
-
|
|
680
|
-
// Change sort direction (should be descending first)
|
|
681
|
-
await wrapper
|
|
682
|
-
.findAll('thead > tr > th')
|
|
683
|
-
.at(0)
|
|
684
|
-
.trigger('click')
|
|
685
|
-
|
|
686
|
-
$rows = wrapper.findAll('tbody > tr').wrappers
|
|
687
|
-
expect($rows.length).toBe(3)
|
|
688
|
-
// Map the rows to the first column text value
|
|
689
|
-
columnA = $rows.map(row => {
|
|
690
|
-
return row
|
|
691
|
-
.findAll('td')
|
|
692
|
-
.at(0)
|
|
693
|
-
.text()
|
|
694
|
-
})
|
|
695
|
-
expect(columnA[0]).toBe('3')
|
|
696
|
-
expect(columnA[1]).toBe('2')
|
|
697
|
-
expect(columnA[2]).toBe('1')
|
|
698
|
-
|
|
699
|
-
$ths = wrapper.findAll('thead > tr > th')
|
|
700
|
-
|
|
701
|
-
// Currently sorted as descending
|
|
702
|
-
expect($ths.at(0).attributes('aria-sort')).toBe('descending')
|
|
703
|
-
// For switching to ascending
|
|
704
|
-
expect(
|
|
705
|
-
$ths
|
|
706
|
-
.at(0)
|
|
707
|
-
.find('.gl-sr-only')
|
|
708
|
-
.text()
|
|
709
|
-
).toContain(wrapper.vm.labelSortAsc)
|
|
710
|
-
|
|
711
|
-
// Not sorted by this column
|
|
712
|
-
expect($ths.at(1).attributes('aria-sort')).toBe('none')
|
|
713
|
-
// For sorting by ascending
|
|
714
|
-
expect(
|
|
715
|
-
$ths
|
|
716
|
-
.at(1)
|
|
717
|
-
.find('.gl-sr-only')
|
|
718
|
-
.text()
|
|
719
|
-
).toContain(wrapper.vm.labelSortDesc)
|
|
720
|
-
|
|
721
|
-
// Not a sortable column
|
|
722
|
-
expect($ths.at(2).attributes('aria-sort')).toBeUndefined()
|
|
723
|
-
// For clearing sorting
|
|
724
|
-
expect(
|
|
725
|
-
$ths
|
|
726
|
-
.at(2)
|
|
727
|
-
.find('.gl-sr-only')
|
|
728
|
-
.text()
|
|
729
|
-
).toContain(wrapper.vm.labelSortClear)
|
|
730
|
-
|
|
731
|
-
wrapper.destroy()
|
|
732
|
-
})
|
|
733
|
-
|
|
734
|
-
it('non-sortable header th should not emit a sort-changed event when clicked and prop no-sort-reset is set', async () => {
|
|
735
|
-
const wrapper = mount(BTable, {
|
|
736
|
-
propsData: {
|
|
737
|
-
fields: testFields,
|
|
738
|
-
items: testItems,
|
|
739
|
-
noSortReset: true
|
|
740
|
-
}
|
|
741
|
-
})
|
|
742
|
-
|
|
743
|
-
await waitNT(wrapper.vm)
|
|
744
|
-
|
|
745
|
-
expect(wrapper).toBeDefined()
|
|
746
|
-
expect(wrapper.findAll('tbody > tr').exists()).toBe(true)
|
|
747
|
-
expect(wrapper.findAll('tbody > tr').length).toBe(3)
|
|
748
|
-
|
|
749
|
-
// Should not be sorted
|
|
750
|
-
expect(wrapper.emitted('input')).toBeDefined()
|
|
751
|
-
expect(wrapper.emitted('sort-changed')).toBeUndefined()
|
|
752
|
-
let $rows = wrapper.findAll('tbody > tr').wrappers
|
|
753
|
-
expect($rows.length).toBe(3)
|
|
754
|
-
// Map the rows to the first column text value
|
|
755
|
-
let columnA = $rows.map(row => {
|
|
756
|
-
return row
|
|
757
|
-
.findAll('td')
|
|
758
|
-
.at(0)
|
|
759
|
-
.text()
|
|
760
|
-
})
|
|
761
|
-
expect(columnA[0]).toBe('3')
|
|
762
|
-
expect(columnA[1]).toBe('1')
|
|
763
|
-
expect(columnA[2]).toBe('2')
|
|
764
|
-
|
|
765
|
-
// Click first column to sort
|
|
766
|
-
await wrapper
|
|
767
|
-
.findAll('thead > tr > th')
|
|
768
|
-
.at(0)
|
|
769
|
-
.trigger('click')
|
|
770
|
-
expect(wrapper.emitted('sort-changed')).toBeDefined()
|
|
771
|
-
expect(wrapper.emitted('sort-changed').length).toBe(1)
|
|
772
|
-
$rows = wrapper.findAll('tbody > tr').wrappers
|
|
773
|
-
expect($rows.length).toBe(3)
|
|
774
|
-
// Map the rows to the column text value
|
|
775
|
-
columnA = $rows.map(row => {
|
|
776
|
-
return row
|
|
777
|
-
.findAll('td')
|
|
778
|
-
.at(0)
|
|
779
|
-
.text()
|
|
780
|
-
})
|
|
781
|
-
expect(columnA[0]).toBe('1')
|
|
782
|
-
expect(columnA[1]).toBe('2')
|
|
783
|
-
expect(columnA[2]).toBe('3')
|
|
784
|
-
|
|
785
|
-
// Click third column header (should not clear sorting)
|
|
786
|
-
await wrapper
|
|
787
|
-
.findAll('thead > tr > th')
|
|
788
|
-
.at(2)
|
|
789
|
-
.trigger('click')
|
|
790
|
-
expect(wrapper.emitted('sort-changed').length).toBe(1)
|
|
791
|
-
$rows = wrapper.findAll('tbody > tr').wrappers
|
|
792
|
-
expect($rows.length).toBe(3)
|
|
793
|
-
// Map the rows to the column text value
|
|
794
|
-
columnA = $rows.map(row => {
|
|
795
|
-
return row
|
|
796
|
-
.findAll('td')
|
|
797
|
-
.at(0)
|
|
798
|
-
.text()
|
|
799
|
-
})
|
|
800
|
-
expect(columnA[0]).toBe('1')
|
|
801
|
-
expect(columnA[1]).toBe('2')
|
|
802
|
-
expect(columnA[2]).toBe('3')
|
|
803
|
-
|
|
804
|
-
wrapper.destroy()
|
|
805
|
-
})
|
|
806
|
-
|
|
807
|
-
it('sorting by virtual column formatter works', async () => {
|
|
808
|
-
const wrapper = mount(BTable, {
|
|
809
|
-
propsData: {
|
|
810
|
-
items: [{ a: 5, b: 2 }, { a: 10, b: 9 }],
|
|
811
|
-
fields: [
|
|
812
|
-
'a',
|
|
813
|
-
'b',
|
|
814
|
-
{
|
|
815
|
-
key: 'c',
|
|
816
|
-
sortable: true,
|
|
817
|
-
formatter(value, key, item) {
|
|
818
|
-
return item.a - item.b
|
|
819
|
-
},
|
|
820
|
-
sortByFormatted: true
|
|
821
|
-
}
|
|
822
|
-
],
|
|
823
|
-
// Initially unsorted
|
|
824
|
-
sortBy: ''
|
|
825
|
-
}
|
|
826
|
-
})
|
|
827
|
-
|
|
828
|
-
expect(wrapper).toBeDefined()
|
|
829
|
-
|
|
830
|
-
let $trs = wrapper.findAll('tbody > tr')
|
|
831
|
-
expect($trs.length).toBe(2)
|
|
832
|
-
|
|
833
|
-
// First Row - unsorted
|
|
834
|
-
let $tds = $trs.at(0).findAll('td')
|
|
835
|
-
expect($tds.length).toBe(3)
|
|
836
|
-
expect($tds.at(0).text()).toBe('5')
|
|
837
|
-
expect($tds.at(1).text()).toBe('2')
|
|
838
|
-
expect($tds.at(2).text()).toBe('3') // 5 - 2
|
|
839
|
-
|
|
840
|
-
await wrapper.setProps({
|
|
841
|
-
sortBy: 'c',
|
|
842
|
-
sortDesc: false
|
|
843
|
-
})
|
|
844
|
-
|
|
845
|
-
// Grab the sorted TRs
|
|
846
|
-
$trs = wrapper.findAll('tbody > tr')
|
|
847
|
-
expect($trs.length).toBe(2)
|
|
848
|
-
|
|
849
|
-
// First Row - sorted (smallest first)
|
|
850
|
-
$tds = $trs.at(0).findAll('td')
|
|
851
|
-
expect($tds.length).toBe(3)
|
|
852
|
-
expect($tds.at(0).text()).toBe('10')
|
|
853
|
-
expect($tds.at(1).text()).toBe('9')
|
|
854
|
-
expect($tds.at(2).text()).toBe('1') // 10 - 9
|
|
855
|
-
|
|
856
|
-
wrapper.destroy()
|
|
857
|
-
})
|
|
858
|
-
})
|