@ministryofjustice/frontend 3.3.1 → 3.4.0
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/README.md +4 -10
- package/govuk-prototype-kit.config.json +5 -16
- package/moj/all.jquery.min.js +77 -3
- package/moj/all.js +2021 -1436
- package/moj/all.scss +2 -0
- package/moj/all.spec.js +15 -13
- package/moj/components/_all.scss +1 -0
- package/moj/components/action-bar/_action-bar.scss +4 -6
- package/moj/components/add-another/_add-another.scss +9 -7
- package/moj/components/add-another/add-another.js +90 -69
- package/moj/components/add-another/add-another.spec.js +165 -0
- package/moj/components/alert/README.md +0 -0
- package/moj/components/alert/_alert.scss +142 -0
- package/moj/components/alert/alert.js +247 -0
- package/moj/components/alert/alert.spec.helper.js +67 -0
- package/moj/components/alert/alert.spec.js +229 -0
- package/moj/components/alert/macro.njk +3 -0
- package/moj/components/alert/template.njk +83 -0
- package/moj/components/badge/_badge.scss +3 -4
- package/moj/components/banner/_banner.scss +5 -10
- package/moj/components/button-menu/_button-menu.scss +10 -9
- package/moj/components/button-menu/button-menu.js +139 -136
- package/moj/components/button-menu/button-menu.spec.js +295 -296
- package/moj/components/cookie-banner/_cookie-banner.scss +6 -5
- package/moj/components/currency-input/_currency-input.scss +4 -4
- package/moj/components/date-picker/README.md +14 -17
- package/moj/components/date-picker/_date-picker.scss +122 -106
- package/moj/components/date-picker/date-picker.js +473 -471
- package/moj/components/date-picker/date-picker.spec.js +971 -923
- package/moj/components/filter/README.md +1 -1
- package/moj/components/filter/_filter.scss +53 -75
- package/moj/components/filter-toggle-button/filter-toggle-button.js +71 -67
- package/moj/components/filter-toggle-button/filter-toggle-button.spec.js +203 -205
- package/moj/components/form-validator/form-validator.js +117 -109
- package/moj/components/header/_header.scss +17 -19
- package/moj/components/identity-bar/_identity-bar.scss +5 -5
- package/moj/components/interruption-card/_interruption-card.scss +2 -2
- package/moj/components/messages/_messages.scss +12 -19
- package/moj/components/multi-file-upload/README.md +1 -1
- package/moj/components/multi-file-upload/_multi-file-upload.scss +34 -30
- package/moj/components/multi-file-upload/multi-file-upload.js +188 -152
- package/moj/components/multi-file-upload/multi-file-upload.spec.js +510 -0
- package/moj/components/multi-select/_multi-select.scss +4 -3
- package/moj/components/multi-select/multi-select.js +55 -50
- package/moj/components/multi-select/multi-select.spec.js +72 -79
- package/moj/components/notification-badge/_notification-badge.scss +12 -12
- package/moj/components/organisation-switcher/_organisation-switcher.scss +1 -1
- package/moj/components/page-header-actions/_page-header-actions.scss +3 -2
- package/moj/components/pagination/_pagination.scss +26 -31
- package/moj/components/password-reveal/_password-reveal.scss +1 -2
- package/moj/components/password-reveal/password-reveal.js +22 -21
- package/moj/components/password-reveal/password-reveal.spec.js +39 -37
- package/moj/components/primary-navigation/_primary-navigation.scss +26 -29
- package/moj/components/progress-bar/_progress-bar.scss +21 -26
- package/moj/components/rich-text-editor/_rich-text-editor.scss +17 -16
- package/moj/components/rich-text-editor/rich-text-editor.js +117 -103
- package/moj/components/search/_search.scss +6 -4
- package/moj/components/search-toggle/search-toggle.js +29 -30
- package/moj/components/search-toggle/search-toggle.scss +21 -15
- package/moj/components/search-toggle/search-toggle.spec.js +65 -70
- package/moj/components/side-navigation/_side-navigation.scss +12 -21
- package/moj/components/sortable-table/_sortable-table.scss +25 -23
- package/moj/components/sortable-table/sortable-table.js +139 -117
- package/moj/components/sortable-table/sortable-table.spec.js +362 -0
- package/moj/components/sub-navigation/_sub-navigation.scss +24 -28
- package/moj/components/tag/_tag.scss +8 -9
- package/moj/components/task-list/_task-list.scss +8 -7
- package/moj/components/ticket-panel/_ticket-panel.scss +14 -6
- package/moj/components/timeline/_timeline.scss +18 -20
- package/moj/filters/all.js +28 -30
- package/moj/filters/prototype-kit-13-filters.js +2 -1
- package/moj/helpers/_all.scss +1 -0
- package/moj/helpers/_hidden.scss +1 -1
- package/moj/helpers/_links.scss +20 -0
- package/moj/helpers.js +160 -31
- package/moj/helpers.spec.js +235 -0
- package/moj/init.js +2 -2
- package/moj/moj-frontend.min.css +2 -2
- package/moj/moj-frontend.min.js +77 -3
- package/moj/namespace.js +2 -1
- package/moj/objects/_filter-layout.scss +11 -10
- package/moj/objects/_scrollable-pane.scss +11 -14
- package/moj/settings/_colours.scss +5 -0
- package/moj/settings/_measurements.scss +0 -2
- package/moj/utilities/_hidden.scss +3 -3
- package/moj/utilities/_width-container.scss +1 -1
- package/package.json +1 -1
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
queryByRole,
|
|
3
|
-
} = require("@testing-library/dom");
|
|
4
|
-
const { userEvent } = require("@testing-library/user-event");
|
|
5
|
-
const { configureAxe } = require("jest-axe");
|
|
6
|
-
const merge = require("lodash.merge");
|
|
7
|
-
const { setMedia } = require("mock-match-media");
|
|
1
|
+
/* eslint-disable no-new */
|
|
8
2
|
|
|
9
|
-
require(
|
|
3
|
+
const { queryByRole } = require('@testing-library/dom')
|
|
4
|
+
const { userEvent } = require('@testing-library/user-event')
|
|
5
|
+
const { configureAxe } = require('jest-axe')
|
|
6
|
+
const merge = require('lodash/merge')
|
|
7
|
+
const { setMedia } = require('mock-match-media')
|
|
10
8
|
|
|
11
|
-
|
|
9
|
+
require('./filter-toggle-button.js')
|
|
10
|
+
|
|
11
|
+
const user = userEvent.setup()
|
|
12
12
|
const axe = configureAxe({
|
|
13
13
|
rules: {
|
|
14
14
|
// disable landmark rules when testing isolated components.
|
|
15
|
-
region: { enabled: false }
|
|
16
|
-
}
|
|
17
|
-
})
|
|
15
|
+
region: { enabled: false }
|
|
16
|
+
}
|
|
17
|
+
})
|
|
18
18
|
|
|
19
19
|
const createTemplate = () => {
|
|
20
|
-
html = `
|
|
20
|
+
const html = `
|
|
21
21
|
<div class="moj-filter">
|
|
22
22
|
<div class="moj-filter__header">
|
|
23
23
|
<div class="moj-filter__header-title">
|
|
@@ -28,277 +28,275 @@ const createTemplate = () => {
|
|
|
28
28
|
</div>
|
|
29
29
|
<div class="moj-action-bar">
|
|
30
30
|
<div class="moj-action-bar__filter"></div>
|
|
31
|
-
</div
|
|
32
|
-
document.body.insertAdjacentHTML(
|
|
31
|
+
</div>`
|
|
32
|
+
document.body.insertAdjacentHTML('afterbegin', html)
|
|
33
33
|
|
|
34
|
-
const buttonContainer = document.querySelector(
|
|
34
|
+
const buttonContainer = document.querySelector('.moj-action-bar__filter')
|
|
35
35
|
const closeButtonContainer = document.querySelector(
|
|
36
|
-
|
|
37
|
-
)
|
|
38
|
-
const filterContainer = document.querySelector(
|
|
36
|
+
'.moj-filter__header-action'
|
|
37
|
+
)
|
|
38
|
+
const filterContainer = document.querySelector('.moj-filter')
|
|
39
39
|
|
|
40
40
|
return {
|
|
41
|
-
buttonContainer
|
|
42
|
-
closeButtonContainer
|
|
43
|
-
filterContainer
|
|
44
|
-
}
|
|
45
|
-
}
|
|
41
|
+
buttonContainer,
|
|
42
|
+
closeButtonContainer,
|
|
43
|
+
filterContainer
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
46
|
|
|
47
|
-
let baseConfig
|
|
47
|
+
let baseConfig
|
|
48
48
|
|
|
49
49
|
beforeEach(() => {
|
|
50
50
|
baseConfig = {
|
|
51
|
-
bigModeMediaQuery:
|
|
51
|
+
bigModeMediaQuery: '(min-width: 600px)',
|
|
52
52
|
startHidden: true,
|
|
53
53
|
toggleButton: {
|
|
54
|
-
container: document.querySelector(
|
|
55
|
-
showText:
|
|
56
|
-
hideText:
|
|
57
|
-
classes:
|
|
54
|
+
container: document.querySelector('.moj-action-bar__filter'),
|
|
55
|
+
showText: 'Show filter',
|
|
56
|
+
hideText: 'Hide filter',
|
|
57
|
+
classes: 'govuk-button--secondary'
|
|
58
58
|
},
|
|
59
59
|
closeButton: {
|
|
60
|
-
container: document.querySelector(
|
|
61
|
-
text:
|
|
60
|
+
container: document.querySelector('.moj-filter__header-action'),
|
|
61
|
+
text: 'Close'
|
|
62
62
|
},
|
|
63
63
|
filter: {
|
|
64
|
-
container: document.querySelector(
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
})
|
|
64
|
+
container: document.querySelector('.moj-filter')
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
})
|
|
68
68
|
|
|
69
|
-
describe(
|
|
70
|
-
let defaultConfig, buttonContainer,
|
|
69
|
+
describe('Filter toggle in big mode', () => {
|
|
70
|
+
let defaultConfig, buttonContainer, filterContainer
|
|
71
71
|
|
|
72
72
|
beforeEach(() => {
|
|
73
73
|
setMedia({
|
|
74
|
-
width:
|
|
75
|
-
})
|
|
76
|
-
|
|
77
|
-
({ buttonContainer, closeButtonContainer, filterContainer } = createTemplate());
|
|
74
|
+
width: '800px'
|
|
75
|
+
})
|
|
76
|
+
;({ buttonContainer, filterContainer } = createTemplate())
|
|
78
77
|
|
|
79
78
|
defaultConfig = merge(baseConfig, {
|
|
80
79
|
toggleButton: {
|
|
81
|
-
container: document.querySelector(
|
|
80
|
+
container: document.querySelector('.moj-action-bar__filter')
|
|
82
81
|
},
|
|
83
82
|
closeButton: {
|
|
84
|
-
container: document.querySelector(
|
|
83
|
+
container: document.querySelector('.moj-filter__header-action')
|
|
85
84
|
},
|
|
86
|
-
filter: { container: document.querySelector(
|
|
87
|
-
})
|
|
88
|
-
})
|
|
85
|
+
filter: { container: document.querySelector('.moj-filter') }
|
|
86
|
+
})
|
|
87
|
+
})
|
|
89
88
|
|
|
90
89
|
afterEach(() => {
|
|
91
|
-
document.body.innerHTML =
|
|
92
|
-
})
|
|
90
|
+
document.body.innerHTML = ''
|
|
91
|
+
})
|
|
93
92
|
|
|
94
|
-
test(
|
|
95
|
-
new MOJFrontend.FilterToggleButton(defaultConfig)
|
|
96
|
-
const toggleButton = queryByRole(buttonContainer,
|
|
93
|
+
test('creates toggle button', () => {
|
|
94
|
+
new MOJFrontend.FilterToggleButton(defaultConfig)
|
|
95
|
+
const toggleButton = queryByRole(buttonContainer, 'button')
|
|
97
96
|
|
|
98
|
-
expect(toggleButton).
|
|
99
|
-
expect(toggleButton.innerHTML).toBe(
|
|
100
|
-
expect(toggleButton).toHaveAttribute(
|
|
101
|
-
expect(toggleButton).toHaveClass(
|
|
97
|
+
expect(toggleButton).toBeInTheDocument()
|
|
98
|
+
expect(toggleButton.innerHTML).toBe('Show filter')
|
|
99
|
+
expect(toggleButton).toHaveAttribute('aria-expanded', 'false')
|
|
100
|
+
expect(toggleButton).toHaveClass('govuk-button--secondary')
|
|
102
101
|
|
|
103
|
-
expect(filterContainer).toHaveAttribute(
|
|
104
|
-
expect(filterContainer).toHaveClass(
|
|
105
|
-
})
|
|
102
|
+
expect(filterContainer).toHaveAttribute('tabindex', '-1')
|
|
103
|
+
expect(filterContainer).toHaveClass('moj-js-hidden')
|
|
104
|
+
})
|
|
106
105
|
|
|
107
|
-
test(
|
|
108
|
-
new MOJFrontend.FilterToggleButton(defaultConfig)
|
|
109
|
-
const toggleButton = queryByRole(buttonContainer,
|
|
106
|
+
test('toggle button reveals filters', async () => {
|
|
107
|
+
new MOJFrontend.FilterToggleButton(defaultConfig)
|
|
108
|
+
const toggleButton = queryByRole(buttonContainer, 'button')
|
|
110
109
|
|
|
111
|
-
expect(filterContainer).toHaveAttribute(
|
|
112
|
-
expect(filterContainer).toHaveClass(
|
|
110
|
+
expect(filterContainer).toHaveAttribute('tabindex', '-1')
|
|
111
|
+
expect(filterContainer).toHaveClass('moj-js-hidden')
|
|
113
112
|
|
|
114
|
-
await user.click(toggleButton)
|
|
113
|
+
await user.click(toggleButton)
|
|
115
114
|
|
|
116
|
-
expect(toggleButton).toHaveAttribute(
|
|
117
|
-
expect(toggleButton.innerHTML).toBe(
|
|
118
|
-
expect(filterContainer).not.toHaveClass(
|
|
119
|
-
expect(filterContainer).toHaveFocus()
|
|
115
|
+
expect(toggleButton).toHaveAttribute('aria-expanded', 'true')
|
|
116
|
+
expect(toggleButton.innerHTML).toBe('Hide filter')
|
|
117
|
+
expect(filterContainer).not.toHaveClass('moj-js-hidden')
|
|
118
|
+
expect(filterContainer).toHaveFocus()
|
|
120
119
|
|
|
121
|
-
await user.click(toggleButton)
|
|
120
|
+
await user.click(toggleButton)
|
|
122
121
|
|
|
123
|
-
expect(toggleButton).toHaveAttribute(
|
|
124
|
-
expect(toggleButton.innerHTML).toBe(
|
|
125
|
-
expect(filterContainer).toHaveClass(
|
|
122
|
+
expect(toggleButton).toHaveAttribute('aria-expanded', 'false')
|
|
123
|
+
expect(toggleButton.innerHTML).toBe('Show filter')
|
|
124
|
+
expect(filterContainer).toHaveClass('moj-js-hidden')
|
|
126
125
|
|
|
127
|
-
expect(toggleButton).toHaveFocus()
|
|
128
|
-
})
|
|
126
|
+
expect(toggleButton).toHaveFocus()
|
|
127
|
+
})
|
|
129
128
|
|
|
130
|
-
test(
|
|
131
|
-
const config = merge(defaultConfig, { startHidden: false })
|
|
132
|
-
new MOJFrontend.FilterToggleButton(config)
|
|
133
|
-
const toggleButton = queryByRole(buttonContainer,
|
|
129
|
+
test('start visible', () => {
|
|
130
|
+
const config = merge(defaultConfig, { startHidden: false })
|
|
131
|
+
new MOJFrontend.FilterToggleButton(config)
|
|
132
|
+
const toggleButton = queryByRole(buttonContainer, 'button')
|
|
134
133
|
|
|
135
|
-
expect(toggleButton.innerHTML).toBe(
|
|
136
|
-
expect(filterContainer).not.toHaveClass(
|
|
137
|
-
})
|
|
134
|
+
expect(toggleButton.innerHTML).toBe('Hide filter')
|
|
135
|
+
expect(filterContainer).not.toHaveClass('moj-js-hidden')
|
|
136
|
+
})
|
|
138
137
|
|
|
139
|
-
test(
|
|
138
|
+
test('custom button text', async () => {
|
|
140
139
|
const config = merge(defaultConfig, {
|
|
141
|
-
toggleButton: { showText:
|
|
142
|
-
})
|
|
143
|
-
new MOJFrontend.FilterToggleButton(config)
|
|
144
|
-
const toggleButton = queryByRole(buttonContainer,
|
|
140
|
+
toggleButton: { showText: 'Custom label', hideText: 'Hide me' }
|
|
141
|
+
})
|
|
142
|
+
new MOJFrontend.FilterToggleButton(config)
|
|
143
|
+
const toggleButton = queryByRole(buttonContainer, 'button')
|
|
145
144
|
|
|
146
|
-
expect(toggleButton.innerHTML).toBe(
|
|
147
|
-
await user.click(toggleButton)
|
|
148
|
-
expect(toggleButton.innerHTML).toBe(
|
|
149
|
-
})
|
|
145
|
+
expect(toggleButton.innerHTML).toBe('Custom label')
|
|
146
|
+
await user.click(toggleButton)
|
|
147
|
+
expect(toggleButton.innerHTML).toBe('Hide me')
|
|
148
|
+
})
|
|
150
149
|
|
|
151
|
-
test(
|
|
150
|
+
test('custom toggle button classes', () => {
|
|
152
151
|
const config = merge(defaultConfig, {
|
|
153
|
-
toggleButton: { classes:
|
|
154
|
-
})
|
|
155
|
-
new MOJFrontend.FilterToggleButton(config)
|
|
156
|
-
const toggleButton = queryByRole(buttonContainer,
|
|
157
|
-
|
|
158
|
-
expect(toggleButton).toHaveClass(
|
|
159
|
-
})
|
|
160
|
-
|
|
161
|
-
describe(
|
|
162
|
-
test(
|
|
163
|
-
new MOJFrontend.FilterToggleButton(defaultConfig)
|
|
164
|
-
const toggleButton = queryByRole(buttonContainer,
|
|
165
|
-
expect(await axe(document.body)).toHaveNoViolations()
|
|
166
|
-
await user.click(toggleButton)
|
|
167
|
-
expect(await axe(document.body)).toHaveNoViolations()
|
|
168
|
-
})
|
|
169
|
-
})
|
|
170
|
-
})
|
|
171
|
-
|
|
172
|
-
describe(
|
|
173
|
-
let defaultConfig, buttonContainer, closeButtonContainer, filterContainer
|
|
152
|
+
toggleButton: { classes: 'classname-1 classname-2' }
|
|
153
|
+
})
|
|
154
|
+
new MOJFrontend.FilterToggleButton(config)
|
|
155
|
+
const toggleButton = queryByRole(buttonContainer, 'button')
|
|
156
|
+
|
|
157
|
+
expect(toggleButton).toHaveClass('classname-1 classname-2')
|
|
158
|
+
})
|
|
159
|
+
|
|
160
|
+
describe('accessibility', () => {
|
|
161
|
+
test('component has no wcag violations', async () => {
|
|
162
|
+
new MOJFrontend.FilterToggleButton(defaultConfig)
|
|
163
|
+
const toggleButton = queryByRole(buttonContainer, 'button')
|
|
164
|
+
expect(await axe(document.body)).toHaveNoViolations()
|
|
165
|
+
await user.click(toggleButton)
|
|
166
|
+
expect(await axe(document.body)).toHaveNoViolations()
|
|
167
|
+
})
|
|
168
|
+
})
|
|
169
|
+
})
|
|
170
|
+
|
|
171
|
+
describe('Filter toggle in small mode', () => {
|
|
172
|
+
let defaultConfig, buttonContainer, closeButtonContainer, filterContainer
|
|
174
173
|
|
|
175
174
|
beforeEach(() => {
|
|
176
175
|
setMedia({
|
|
177
|
-
width:
|
|
178
|
-
})
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
176
|
+
width: '500px'
|
|
177
|
+
})
|
|
178
|
+
;({ buttonContainer, closeButtonContainer, filterContainer } =
|
|
179
|
+
createTemplate())
|
|
182
180
|
defaultConfig = merge(baseConfig, {
|
|
183
181
|
toggleButton: {
|
|
184
|
-
container: document.querySelector(
|
|
182
|
+
container: document.querySelector('.moj-action-bar__filter')
|
|
185
183
|
},
|
|
186
184
|
closeButton: {
|
|
187
|
-
container: document.querySelector(
|
|
185
|
+
container: document.querySelector('.moj-filter__header-action')
|
|
188
186
|
},
|
|
189
|
-
filter: { container: document.querySelector(
|
|
190
|
-
})
|
|
191
|
-
})
|
|
187
|
+
filter: { container: document.querySelector('.moj-filter') }
|
|
188
|
+
})
|
|
189
|
+
})
|
|
192
190
|
|
|
193
191
|
afterEach(() => {
|
|
194
|
-
document.body.innerHTML =
|
|
195
|
-
})
|
|
192
|
+
document.body.innerHTML = ''
|
|
193
|
+
})
|
|
196
194
|
|
|
197
|
-
test(
|
|
198
|
-
new MOJFrontend.FilterToggleButton(defaultConfig)
|
|
199
|
-
const toggleButton = queryByRole(buttonContainer,
|
|
195
|
+
test('creates toggle button', () => {
|
|
196
|
+
new MOJFrontend.FilterToggleButton(defaultConfig)
|
|
197
|
+
const toggleButton = queryByRole(buttonContainer, 'button')
|
|
200
198
|
|
|
201
|
-
expect(toggleButton).
|
|
202
|
-
expect(toggleButton.innerHTML).toBe(
|
|
203
|
-
expect(toggleButton).toHaveAttribute(
|
|
204
|
-
expect(toggleButton).toHaveClass(
|
|
199
|
+
expect(toggleButton).toBeInTheDocument()
|
|
200
|
+
expect(toggleButton.innerHTML).toBe('Show filter')
|
|
201
|
+
expect(toggleButton).toHaveAttribute('aria-expanded', 'false')
|
|
202
|
+
expect(toggleButton).toHaveClass('govuk-button--secondary')
|
|
205
203
|
|
|
206
|
-
expect(filterContainer).toHaveAttribute(
|
|
207
|
-
expect(filterContainer).toHaveClass(
|
|
208
|
-
})
|
|
204
|
+
expect(filterContainer).toHaveAttribute('tabindex', '-1')
|
|
205
|
+
expect(filterContainer).toHaveClass('moj-js-hidden')
|
|
206
|
+
})
|
|
209
207
|
|
|
210
|
-
test(
|
|
211
|
-
new MOJFrontend.FilterToggleButton(defaultConfig)
|
|
212
|
-
const toggleButton = queryByRole(buttonContainer,
|
|
208
|
+
test('toggle button reveals filters', async () => {
|
|
209
|
+
new MOJFrontend.FilterToggleButton(defaultConfig)
|
|
210
|
+
const toggleButton = queryByRole(buttonContainer, 'button')
|
|
213
211
|
|
|
214
|
-
expect(filterContainer).toHaveAttribute(
|
|
215
|
-
expect(filterContainer).toHaveClass(
|
|
212
|
+
expect(filterContainer).toHaveAttribute('tabindex', '-1')
|
|
213
|
+
expect(filterContainer).toHaveClass('moj-js-hidden')
|
|
216
214
|
|
|
217
|
-
await user.click(toggleButton)
|
|
215
|
+
await user.click(toggleButton)
|
|
218
216
|
|
|
219
|
-
expect(toggleButton).toHaveAttribute(
|
|
220
|
-
expect(toggleButton.innerHTML).toBe(
|
|
221
|
-
expect(filterContainer).not.toHaveClass(
|
|
222
|
-
expect(filterContainer).toHaveFocus()
|
|
217
|
+
expect(toggleButton).toHaveAttribute('aria-expanded', 'true')
|
|
218
|
+
expect(toggleButton.innerHTML).toBe('Hide filter')
|
|
219
|
+
expect(filterContainer).not.toHaveClass('moj-js-hidden')
|
|
220
|
+
expect(filterContainer).toHaveFocus()
|
|
223
221
|
|
|
224
|
-
await user.click(toggleButton)
|
|
222
|
+
await user.click(toggleButton)
|
|
225
223
|
|
|
226
|
-
expect(toggleButton).toHaveAttribute(
|
|
227
|
-
expect(toggleButton.innerHTML).toBe(
|
|
228
|
-
expect(filterContainer).toHaveClass(
|
|
224
|
+
expect(toggleButton).toHaveAttribute('aria-expanded', 'false')
|
|
225
|
+
expect(toggleButton.innerHTML).toBe('Show filter')
|
|
226
|
+
expect(filterContainer).toHaveClass('moj-js-hidden')
|
|
229
227
|
|
|
230
|
-
expect(toggleButton).toHaveFocus()
|
|
231
|
-
})
|
|
228
|
+
expect(toggleButton).toHaveFocus()
|
|
229
|
+
})
|
|
232
230
|
|
|
233
|
-
test(
|
|
234
|
-
const config = merge(defaultConfig, { startHidden: false })
|
|
235
|
-
new MOJFrontend.FilterToggleButton(config)
|
|
236
|
-
const toggleButton = queryByRole(buttonContainer,
|
|
231
|
+
test('start visible is ignored', () => {
|
|
232
|
+
const config = merge(defaultConfig, { startHidden: false })
|
|
233
|
+
new MOJFrontend.FilterToggleButton(config)
|
|
234
|
+
const toggleButton = queryByRole(buttonContainer, 'button')
|
|
237
235
|
|
|
238
|
-
expect(toggleButton.innerHTML).toBe(
|
|
239
|
-
expect(filterContainer).toHaveClass(
|
|
240
|
-
})
|
|
236
|
+
expect(toggleButton.innerHTML).toBe('Show filter')
|
|
237
|
+
expect(filterContainer).toHaveClass('moj-js-hidden')
|
|
238
|
+
})
|
|
241
239
|
|
|
242
|
-
test(
|
|
243
|
-
const config = merge(defaultConfig, { startHidden: false })
|
|
244
|
-
new MOJFrontend.FilterToggleButton(config)
|
|
245
|
-
const toggleButton = queryByRole(buttonContainer,
|
|
240
|
+
test('adds a close button', async () => {
|
|
241
|
+
const config = merge(defaultConfig, { startHidden: false })
|
|
242
|
+
new MOJFrontend.FilterToggleButton(config)
|
|
243
|
+
const toggleButton = queryByRole(buttonContainer, 'button')
|
|
246
244
|
|
|
247
|
-
await user.click(toggleButton)
|
|
245
|
+
await user.click(toggleButton)
|
|
248
246
|
|
|
249
|
-
const closeButton = queryByRole(closeButtonContainer,
|
|
247
|
+
const closeButton = queryByRole(closeButtonContainer, 'button')
|
|
250
248
|
|
|
251
|
-
expect(closeButton).
|
|
252
|
-
expect(closeButton.innerHTML).toBe(
|
|
253
|
-
})
|
|
249
|
+
expect(closeButton).toBeInTheDocument()
|
|
250
|
+
expect(closeButton.innerHTML).toBe('Close')
|
|
251
|
+
})
|
|
254
252
|
|
|
255
|
-
test(
|
|
253
|
+
test('hides on resize from big to small', async () => {
|
|
256
254
|
setMedia({
|
|
257
|
-
width:
|
|
258
|
-
})
|
|
255
|
+
width: '800px'
|
|
256
|
+
})
|
|
259
257
|
|
|
260
|
-
const config = merge(defaultConfig, { startHidden: false })
|
|
261
|
-
new MOJFrontend.FilterToggleButton(config)
|
|
262
|
-
const toggleButton = queryByRole(buttonContainer,
|
|
258
|
+
const config = merge(defaultConfig, { startHidden: false })
|
|
259
|
+
new MOJFrontend.FilterToggleButton(config)
|
|
260
|
+
const toggleButton = queryByRole(buttonContainer, 'button')
|
|
263
261
|
|
|
264
|
-
expect(toggleButton.innerHTML).toBe(
|
|
265
|
-
expect(filterContainer).not.toHaveClass(
|
|
262
|
+
expect(toggleButton.innerHTML).toBe('Hide filter')
|
|
263
|
+
expect(filterContainer).not.toHaveClass('moj-js-hidden')
|
|
266
264
|
|
|
267
265
|
setMedia({
|
|
268
|
-
width:
|
|
269
|
-
})
|
|
266
|
+
width: '500px'
|
|
267
|
+
})
|
|
270
268
|
|
|
271
|
-
expect(toggleButton.innerHTML).toBe(
|
|
272
|
-
expect(filterContainer).toHaveClass(
|
|
273
|
-
})
|
|
269
|
+
expect(toggleButton.innerHTML).toBe('Show filter')
|
|
270
|
+
expect(filterContainer).toHaveClass('moj-js-hidden')
|
|
271
|
+
})
|
|
274
272
|
|
|
275
|
-
test(
|
|
273
|
+
test('shows on resize from small to big', async () => {
|
|
276
274
|
setMedia({
|
|
277
|
-
width:
|
|
278
|
-
})
|
|
275
|
+
width: '500px'
|
|
276
|
+
})
|
|
279
277
|
|
|
280
|
-
const config = merge(defaultConfig)
|
|
281
|
-
new MOJFrontend.FilterToggleButton(config)
|
|
282
|
-
const toggleButton = queryByRole(buttonContainer,
|
|
278
|
+
const config = merge(defaultConfig)
|
|
279
|
+
new MOJFrontend.FilterToggleButton(config)
|
|
280
|
+
const toggleButton = queryByRole(buttonContainer, 'button')
|
|
283
281
|
|
|
284
|
-
expect(toggleButton.innerHTML).toBe(
|
|
285
|
-
expect(filterContainer).toHaveClass(
|
|
282
|
+
expect(toggleButton.innerHTML).toBe('Show filter')
|
|
283
|
+
expect(filterContainer).toHaveClass('moj-js-hidden')
|
|
286
284
|
|
|
287
285
|
setMedia({
|
|
288
|
-
width:
|
|
289
|
-
})
|
|
290
|
-
|
|
291
|
-
expect(toggleButton.innerHTML).toBe(
|
|
292
|
-
expect(filterContainer).not.toHaveClass(
|
|
293
|
-
})
|
|
294
|
-
|
|
295
|
-
describe(
|
|
296
|
-
test(
|
|
297
|
-
new MOJFrontend.FilterToggleButton(defaultConfig)
|
|
298
|
-
const toggleButton = queryByRole(buttonContainer,
|
|
299
|
-
expect(await axe(document.body)).toHaveNoViolations()
|
|
300
|
-
await user.click(toggleButton)
|
|
301
|
-
expect(await axe(document.body)).toHaveNoViolations()
|
|
302
|
-
})
|
|
303
|
-
})
|
|
304
|
-
})
|
|
286
|
+
width: '800px'
|
|
287
|
+
})
|
|
288
|
+
|
|
289
|
+
expect(toggleButton.innerHTML).toBe('Hide filter')
|
|
290
|
+
expect(filterContainer).not.toHaveClass('moj-js-hidden')
|
|
291
|
+
})
|
|
292
|
+
|
|
293
|
+
describe('accessibility', () => {
|
|
294
|
+
test('component has no wcag violations', async () => {
|
|
295
|
+
new MOJFrontend.FilterToggleButton(defaultConfig)
|
|
296
|
+
const toggleButton = queryByRole(buttonContainer, 'button')
|
|
297
|
+
expect(await axe(document.body)).toHaveNoViolations()
|
|
298
|
+
await user.click(toggleButton)
|
|
299
|
+
expect(await axe(document.body)).toHaveNoViolations()
|
|
300
|
+
})
|
|
301
|
+
})
|
|
302
|
+
})
|