@ons/design-system 70.0.7 → 70.0.8
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 +11 -17
- package/components/access-code/_macro.spec.js +145 -145
- package/components/access-code/access-code.dom.js +5 -5
- package/components/access-code/access-code.js +16 -16
- package/components/access-code/access-code.scss +22 -22
- package/components/access-code/access-code.spec.js +17 -17
- package/components/accordion/_macro.spec.js +154 -154
- package/components/accordion/accordion.dom.js +10 -10
- package/components/accordion/accordion.js +50 -50
- package/components/accordion/accordion.spec.js +104 -104
- package/components/address-input/_macro.spec.js +420 -420
- package/components/address-input/autosuggest.address.dom.js +5 -5
- package/components/address-input/autosuggest.address.error.js +77 -77
- package/components/address-input/autosuggest.address.js +357 -357
- package/components/address-input/autosuggest.address.setter.js +95 -95
- package/components/address-input/autosuggest.address.spec.js +668 -651
- package/components/address-input/example-address-input-editable.njk +1 -1
- package/components/address-input/example-address-input.njk +1 -1
- package/components/address-output/_address-output.scss +3 -3
- package/components/address-output/_macro.spec.js +84 -84
- package/components/autosuggest/_autosuggest.scss +114 -114
- package/components/autosuggest/_macro.spec.js +255 -255
- package/components/autosuggest/autosuggest.dom.js +5 -5
- package/components/autosuggest/autosuggest.helpers.js +11 -11
- package/components/autosuggest/autosuggest.helpers.spec.js +73 -73
- package/components/autosuggest/autosuggest.js +20 -20
- package/components/autosuggest/autosuggest.spec.js +542 -536
- package/components/autosuggest/autosuggest.ui.js +478 -475
- package/components/autosuggest/fuse-config.js +17 -17
- package/components/back-to-top/_back-to-top.scss +27 -27
- package/components/back-to-top/_macro.spec.js +49 -49
- package/components/back-to-top/back-to-top.dom.js +5 -5
- package/components/back-to-top/back-to-top.js +52 -52
- package/components/back-to-top/back-to-top.spec.js +106 -106
- package/components/back-to-top/example-back-to-top.njk +6 -6
- package/components/breadcrumbs/_breadcrumbs.scss +63 -65
- package/components/breadcrumbs/_macro.spec.js +91 -91
- package/components/browser-banner/_browser-banner.scss +23 -23
- package/components/browser-banner/_macro.spec.js +92 -92
- package/components/button/_button.scss +482 -483
- package/components/button/_macro.spec.js +363 -363
- package/components/button/button.dom.js +15 -15
- package/components/button/button.js +53 -53
- package/components/button/button.spec.js +248 -240
- package/components/call-to-action/_call-to-action.scss +5 -5
- package/components/call-to-action/_macro.spec.js +28 -28
- package/components/card/_card.scss +23 -23
- package/components/card/_macro.spec.js +180 -180
- package/components/char-check-limit/_macro.spec.js +48 -48
- package/components/char-check-limit/character-check.js +58 -58
- package/components/char-check-limit/character-check.spec.js +173 -173
- package/components/char-check-limit/character-limit.js +40 -40
- package/components/checkboxes/_checkbox-macro.spec.js +355 -355
- package/components/checkboxes/_checkbox.scss +180 -180
- package/components/checkboxes/_checkboxes.scss +37 -27
- package/components/checkboxes/_macro.spec.js +261 -261
- package/components/checkboxes/checkbox-with-autoselect.js +32 -32
- package/components/checkboxes/checkbox-with-fieldset.js +21 -21
- package/components/checkboxes/checkboxes-with-reveal.js +10 -10
- package/components/checkboxes/checkboxes.dom.js +27 -27
- package/components/checkboxes/checkboxes.spec.js +183 -183
- package/components/content-pagination/_content-pagination.scss +41 -41
- package/components/content-pagination/_macro.spec.js +159 -159
- package/components/cookies-banner/_cookies-banner.scss +22 -22
- package/components/cookies-banner/_macro.spec.js +177 -177
- package/components/cookies-banner/cookies-banner.dom.js +7 -7
- package/components/cookies-banner/cookies-banner.js +76 -76
- package/components/cookies-banner/cookies-banner.spec.js +72 -68
- package/components/date-input/_macro.spec.js +338 -338
- package/components/description-list/_description-list.scss +23 -23
- package/components/description-list/_macro.spec.js +144 -144
- package/components/details/_details.scss +109 -109
- package/components/details/_macro.spec.js +132 -132
- package/components/details/details.dom.js +6 -6
- package/components/details/details.js +60 -60
- package/components/details/details.spec.js +106 -106
- package/components/document-list/_macro.spec.js +444 -444
- package/components/document-list/document-list.scss +145 -149
- package/components/download-resources/_download-resources.scss +109 -108
- package/components/download-resources/download-resources.js +907 -900
- package/components/download-resources/download-resources.spec.js +461 -461
- package/components/duration/_macro.spec.js +291 -291
- package/components/error/_macro.spec.js +72 -72
- package/components/external-link/_external-link.scss +19 -19
- package/components/external-link/_macro.spec.js +68 -68
- package/components/feedback/_feedback.scss +31 -31
- package/components/feedback/_macro.spec.js +72 -72
- package/components/field/_field-group.scss +10 -10
- package/components/field/_field.scss +16 -16
- package/components/field/_macro.spec.js +80 -80
- package/components/fieldset/_fieldset.scss +27 -27
- package/components/fieldset/_macro.spec.js +161 -161
- package/components/footer/_footer.scss +45 -45
- package/components/footer/_macro.spec.js +452 -452
- package/components/header/_header.scss +202 -202
- package/components/header/_macro.spec.js +833 -829
- package/components/helpers/_grid.scss +4 -4
- package/components/hero/_hero.scss +48 -48
- package/components/hero/_macro.spec.js +59 -59
- package/components/icon/_icon.scss +44 -44
- package/components/icon/_macro.spec.js +110 -110
- package/components/image/_image.scss +11 -11
- package/components/image/_macro.spec.js +81 -81
- package/components/input/_input-type.scss +86 -89
- package/components/input/_input.scss +123 -124
- package/components/input/_macro.spec.js +604 -604
- package/components/input/character-check.dom.js +5 -5
- package/components/input/input.dom.js +5 -5
- package/components/input/input.js +10 -10
- package/components/input/input.spec.js +18 -18
- package/components/label/_label.scss +24 -24
- package/components/label/_macro.spec.js +173 -170
- package/components/language-selector/_macro.spec.js +97 -97
- package/components/language-selector/language.scss +7 -7
- package/components/list/_list.scss +84 -84
- package/components/list/_macro.spec.js +583 -583
- package/components/message/_macro.njk +5 -5
- package/components/message/_macro.spec.js +74 -74
- package/components/message/_message.scss +39 -39
- package/components/message-list/_macro.spec.js +86 -86
- package/components/message-list/_message-list.scss +16 -16
- package/components/modal/_macro.spec.js +69 -69
- package/components/modal/_modal.scss +36 -36
- package/components/modal/modal.dom.js +6 -6
- package/components/modal/modal.js +89 -89
- package/components/modal/modal.spec.js +50 -50
- package/components/mutually-exclusive/_macro.spec.js +140 -140
- package/components/mutually-exclusive/mutually-exclusive.checkboxes.spec.js +188 -188
- package/components/mutually-exclusive/mutually-exclusive.date.spec.js +211 -211
- package/components/mutually-exclusive/mutually-exclusive.dom.js +5 -5
- package/components/mutually-exclusive/mutually-exclusive.duration.spec.js +210 -210
- package/components/mutually-exclusive/mutually-exclusive.email.spec.js +90 -90
- package/components/mutually-exclusive/mutually-exclusive.js +137 -137
- package/components/mutually-exclusive/mutually-exclusive.multiple-options.checkboxes.spec.js +197 -197
- package/components/mutually-exclusive/mutually-exclusive.number.spec.js +96 -96
- package/components/mutually-exclusive/mutually-exclusive.textarea.spec.js +102 -102
- package/components/navigation/_macro.spec.js +360 -354
- package/components/navigation/_navigation.scss +122 -123
- package/components/navigation/navigation.dom.js +35 -35
- package/components/navigation/navigation.js +49 -49
- package/components/navigation/navigation.spec.js +249 -249
- package/components/pagination/_macro.spec.js +342 -335
- package/components/pagination/_pagination.scss +58 -58
- package/components/panel/_macro.spec.js +372 -372
- package/components/panel/_panel.scss +200 -199
- package/components/password/_macro.spec.js +95 -95
- package/components/password/password.dom.js +5 -5
- package/components/password/password.js +10 -10
- package/components/password/password.spec.js +26 -26
- package/components/phase-banner/_macro.spec.js +86 -86
- package/components/phase-banner/_phase-banner.scss +16 -16
- package/components/question/_macro.spec.js +235 -235
- package/components/question/_question.scss +24 -24
- package/components/quote/_macro.spec.js +52 -52
- package/components/quote/_quote.scss +24 -24
- package/components/radios/_macro.spec.js +524 -524
- package/components/radios/_radio.scss +49 -48
- package/components/radios/_radios.scss +14 -20
- package/components/radios/check-radios.js +21 -21
- package/components/radios/clear-radios.js +45 -45
- package/components/radios/radio-with-fieldset.js +22 -22
- package/components/radios/radios.dom.js +32 -32
- package/components/radios/radios.spec.js +251 -251
- package/components/related-content/_macro.spec.js +109 -109
- package/components/related-content/_related-content.scss +12 -12
- package/components/related-content/_section-macro.spec.js +20 -20
- package/components/relationships/_macro.spec.js +94 -94
- package/components/relationships/_relationships.scss +9 -9
- package/components/relationships/relationships.dom.js +5 -5
- package/components/relationships/relationships.js +18 -18
- package/components/relationships/relationships.spec.js +71 -71
- package/components/reply/_macro.spec.js +47 -47
- package/components/reply/reply-input.js +15 -15
- package/components/reply/reply.dom.js +5 -5
- package/components/reply/reply.spec.js +57 -57
- package/components/section-navigation/_macro.spec.js +210 -210
- package/components/section-navigation/_section-navigation.scss +76 -76
- package/components/select/_macro.spec.js +166 -166
- package/components/share-page/_macro.spec.js +68 -68
- package/components/skip-to-content/_macro.spec.js +54 -54
- package/components/skip-to-content/_skip.scss +30 -30
- package/components/skip-to-content/skip-to-content.dom.js +6 -6
- package/components/skip-to-content/skip-to-content.js +7 -7
- package/components/skip-to-content/skip-to-content.spec.js +21 -21
- package/components/status/_macro.spec.js +53 -53
- package/components/status/_status.scss +32 -32
- package/components/summary/_macro.spec.js +551 -535
- package/components/summary/_summary.scss +191 -195
- package/components/table/_macro.spec.js +499 -499
- package/components/table/_table.scss +204 -201
- package/components/table/scrollable-table.dom.js +5 -5
- package/components/table/scrollable-table.js +60 -60
- package/components/table/sortable-table.dom.js +5 -5
- package/components/table/sortable-table.js +135 -135
- package/components/table/table.spec.js +144 -140
- package/components/table-of-contents/_macro.spec.js +125 -125
- package/components/table-of-contents/_toc.scss +9 -9
- package/components/table-of-contents/toc.dom.js +5 -5
- package/components/table-of-contents/toc.js +30 -30
- package/components/table-of-contents/toc.spec.js +88 -88
- package/components/tabs/_macro.spec.js +92 -92
- package/components/tabs/_tabs.scss +120 -115
- package/components/tabs/tabs.dom.js +5 -5
- package/components/tabs/tabs.js +266 -266
- package/components/tabs/tabs.spec.js +268 -268
- package/components/text-indent/_macro.spec.js +33 -33
- package/components/text-indent/_text-indent.scss +3 -3
- package/components/textarea/_macro.spec.js +238 -238
- package/components/textarea/textarea.dom.js +5 -5
- package/components/textarea/textarea.spec.js +78 -74
- package/components/timeline/_macro.spec.js +83 -83
- package/components/timeline/_timeline.scss +26 -26
- package/components/timeout-modal/_macro.spec.js +47 -47
- package/components/timeout-modal/timeout-modal.dom.js +9 -9
- package/components/timeout-modal/timeout-modal.js +66 -66
- package/components/timeout-modal/timeout-modal.spec.js +157 -157
- package/components/timeout-panel/_macro.spec.js +41 -41
- package/components/timeout-panel/timeout-panel.dom.js +8 -8
- package/components/timeout-panel/timeout-panel.spec.js +118 -118
- package/components/upload/_macro.spec.js +52 -52
- package/components/upload/_upload.scss +28 -28
- package/components/video/_macro.spec.js +42 -42
- package/components/video/_video.scss +16 -16
- package/components/video/video.dom.js +5 -5
- package/components/video/video.js +32 -32
- package/components/video/video.spec.js +103 -97
- package/css/main.css +1 -1
- package/favicons/manifest.json +25 -25
- package/js/abortable-fetch.js +23 -23
- package/js/analytics.js +53 -53
- package/js/cookies-functions.js +135 -135
- package/js/cookies-settings.dom.js +7 -7
- package/js/cookies-settings.js +77 -77
- package/js/cookies-settings.spec.js +106 -106
- package/js/domready.js +8 -8
- package/js/fetch.js +14 -14
- package/js/inpagelink.dom.js +5 -5
- package/js/inpagelink.js +19 -19
- package/js/polyfills.js +0 -1
- package/js/print-button.js +6 -6
- package/js/timeout.js +211 -211
- package/layout/_template.njk +5 -7
- package/package.json +131 -128
- package/scss/base/_forms.scss +10 -10
- package/scss/base/_global.scss +45 -44
- package/scss/base/_typography.scss +20 -20
- package/scss/helpers/_functions.scss +18 -15
- package/scss/helpers/_mixins.scss +59 -53
- package/scss/helpers/_mq.scss +62 -65
- package/scss/objects/_container.scss +20 -20
- package/scss/objects/_page.scss +33 -33
- package/scss/objects/_spacing.scss +10 -10
- package/scss/overrides/hcm.scss +237 -237
- package/scss/overrides/rtl.scss +95 -95
- package/scss/print.scss +47 -47
- package/scss/utilities/_border.scss +7 -7
- package/scss/utilities/_colors.scss +6 -6
- package/scss/utilities/_display.scss +8 -8
- package/scss/utilities/_float.scss +7 -7
- package/scss/utilities/_grid.scss +144 -144
- package/scss/utilities/_highlight.scss +4 -4
- package/scss/utilities/_margin.scss +17 -17
- package/scss/utilities/_pad.scss +15 -15
- package/scss/utilities/_typography.scss +35 -33
- package/scss/utilities/_utilities.scss +8 -8
- package/scss/utilities/_visibility.scss +25 -25
- package/scss/vars/_colors.scss +116 -116
- package/scss/vars/_forms.scss +22 -22
- package/scss/vars/_grid.scss +11 -9
- package/scss/vars/_typography.scss +54 -54
|
@@ -6,350 +6,350 @@ import axe from '../../tests/helpers/axe';
|
|
|
6
6
|
import { renderComponent, templateFaker } from '../../tests/helpers/rendering';
|
|
7
7
|
|
|
8
8
|
const EXAMPLE_DURATION_INPUT_BASE = {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
id: 'duration',
|
|
10
|
+
legendOrLabel: 'How long have you lived at this address?',
|
|
11
|
+
description: 'Enter “0” into the years field if you have lived at this address for less than a year',
|
|
12
12
|
};
|
|
13
13
|
|
|
14
14
|
const EXAMPLE_DURATION_INPUT_BASE_WITH_ERROR = {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
15
|
+
id: 'duration',
|
|
16
|
+
legendOrLabel: 'How long have you lived at this address?',
|
|
17
|
+
description: 'Enter “0” into the years field if you have lived at this address for less than a year',
|
|
18
|
+
error: {
|
|
19
|
+
text: 'Enter how long you have lived at this address',
|
|
20
|
+
},
|
|
21
21
|
};
|
|
22
22
|
|
|
23
23
|
const EXAMPLE_FIELD_1 = {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
24
|
+
field1: {
|
|
25
|
+
id: 'address-duration-years',
|
|
26
|
+
name: 'address-duration-years',
|
|
27
|
+
value: '0',
|
|
28
|
+
suffix: {
|
|
29
|
+
text: 'Years',
|
|
30
|
+
id: 'address-duration-years-suffix',
|
|
31
|
+
},
|
|
31
32
|
},
|
|
32
|
-
},
|
|
33
33
|
};
|
|
34
34
|
|
|
35
35
|
const EXAMPLE_FIELD_2 = {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
36
|
+
field2: {
|
|
37
|
+
id: 'address-duration-months',
|
|
38
|
+
name: 'address-duration-months',
|
|
39
|
+
value: '0',
|
|
40
|
+
suffix: {
|
|
41
|
+
text: 'Months',
|
|
42
|
+
id: 'address-duration-months-suffix',
|
|
43
|
+
},
|
|
43
44
|
},
|
|
44
|
-
},
|
|
45
45
|
};
|
|
46
46
|
|
|
47
47
|
const EXAMPLE_FIELD_1_WITH_ERROR = {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
48
|
+
field1: {
|
|
49
|
+
id: 'address-duration-years',
|
|
50
|
+
name: 'address-duration-years',
|
|
51
|
+
value: '0',
|
|
52
|
+
error: true,
|
|
53
|
+
suffix: {
|
|
54
|
+
text: 'Years',
|
|
55
|
+
id: 'address-duration-years-suffix',
|
|
56
|
+
},
|
|
56
57
|
},
|
|
57
|
-
},
|
|
58
58
|
};
|
|
59
59
|
|
|
60
60
|
const EXAMPLE_FIELD_2_WITH_ERROR = {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
61
|
+
field2: {
|
|
62
|
+
id: 'address-duration-months',
|
|
63
|
+
name: 'address-duration-months',
|
|
64
|
+
value: '0',
|
|
65
|
+
error: true,
|
|
66
|
+
suffix: {
|
|
67
|
+
text: 'Months',
|
|
68
|
+
id: 'address-duration-months-suffix',
|
|
69
|
+
},
|
|
69
70
|
},
|
|
70
|
-
},
|
|
71
71
|
};
|
|
72
72
|
|
|
73
73
|
const EXAMPLE_FIELD_1_WITH_ERROR_FALSE = {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
74
|
+
field1: {
|
|
75
|
+
id: 'address-duration-years',
|
|
76
|
+
name: 'address-duration-years',
|
|
77
|
+
value: '0',
|
|
78
|
+
error: false,
|
|
79
|
+
suffix: {
|
|
80
|
+
text: 'Years',
|
|
81
|
+
id: 'address-duration-years-suffix',
|
|
82
|
+
},
|
|
82
83
|
},
|
|
83
|
-
},
|
|
84
84
|
};
|
|
85
85
|
|
|
86
86
|
const EXAMPLE_DURATION_SINGLE_FIELD = {
|
|
87
|
-
|
|
88
|
-
|
|
87
|
+
...EXAMPLE_DURATION_INPUT_BASE,
|
|
88
|
+
...EXAMPLE_FIELD_1,
|
|
89
89
|
};
|
|
90
90
|
|
|
91
91
|
const EXAMPLE_DURATION_MULTIPLE_FIELDS = {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
92
|
+
...EXAMPLE_DURATION_INPUT_BASE,
|
|
93
|
+
...EXAMPLE_FIELD_1,
|
|
94
|
+
...EXAMPLE_FIELD_2,
|
|
95
95
|
};
|
|
96
96
|
|
|
97
97
|
const EXAMPLE_DURATION_MULTIPLE_FIELDS_WITH_SINGLE_ERROR = {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
...EXAMPLE_DURATION_INPUT_BASE_WITH_ERROR,
|
|
99
|
+
...EXAMPLE_FIELD_1,
|
|
100
|
+
...EXAMPLE_FIELD_2_WITH_ERROR,
|
|
101
101
|
};
|
|
102
102
|
|
|
103
103
|
const EXAMPLE_DURATION_MULTIPLE_FIELDS_WITH_ERROR = {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
104
|
+
...EXAMPLE_DURATION_INPUT_BASE_WITH_ERROR,
|
|
105
|
+
...EXAMPLE_FIELD_1_WITH_ERROR,
|
|
106
|
+
...EXAMPLE_FIELD_2_WITH_ERROR,
|
|
107
107
|
};
|
|
108
108
|
|
|
109
109
|
const EXAMPLE_DURATION_MULTIPLE_FIELDS_WITH_ERROR_FALSE = {
|
|
110
|
-
|
|
111
|
-
|
|
110
|
+
...EXAMPLE_DURATION_INPUT_BASE,
|
|
111
|
+
...EXAMPLE_FIELD_1_WITH_ERROR_FALSE,
|
|
112
112
|
};
|
|
113
113
|
|
|
114
114
|
describe('macro: duration', () => {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
115
|
+
describe('mode: multiple fields', () => {
|
|
116
|
+
it('passes jest-axe checks', async () => {
|
|
117
|
+
const $ = cheerio.load(renderComponent('duration', EXAMPLE_DURATION_MULTIPLE_FIELDS));
|
|
118
|
+
const results = await axe($.html());
|
|
119
|
+
expect(results).toHaveNoViolations();
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
it('has the expected `input` output for `field1`', () => {
|
|
123
|
+
const faker = templateFaker();
|
|
124
|
+
const inputSpy = faker.spy('input');
|
|
125
|
+
|
|
126
|
+
faker.renderComponent('duration', EXAMPLE_DURATION_MULTIPLE_FIELDS);
|
|
127
|
+
|
|
128
|
+
expect(inputSpy.occurrences[0]).toEqual({
|
|
129
|
+
id: 'address-duration-years',
|
|
130
|
+
type: 'number',
|
|
131
|
+
width: '2',
|
|
132
|
+
classes: '',
|
|
133
|
+
value: '0',
|
|
134
|
+
attributes: undefined,
|
|
135
|
+
classes: '',
|
|
136
|
+
error: '',
|
|
137
|
+
fieldId: '',
|
|
138
|
+
label: {
|
|
139
|
+
description: '',
|
|
140
|
+
text: '',
|
|
141
|
+
},
|
|
142
|
+
name: 'address-duration-years',
|
|
143
|
+
suffix: {
|
|
144
|
+
id: 'address-duration-years-suffix',
|
|
145
|
+
text: 'Years',
|
|
146
|
+
},
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
expect(inputSpy.occurrences[1]).toEqual({
|
|
150
|
+
id: 'address-duration-months',
|
|
151
|
+
type: 'number',
|
|
152
|
+
width: '2',
|
|
153
|
+
classes: '',
|
|
154
|
+
value: '0',
|
|
155
|
+
attributes: undefined,
|
|
156
|
+
classes: '',
|
|
157
|
+
error: '',
|
|
158
|
+
fieldId: '',
|
|
159
|
+
label: {
|
|
160
|
+
description: '',
|
|
161
|
+
text: '',
|
|
162
|
+
},
|
|
163
|
+
name: 'address-duration-months',
|
|
164
|
+
suffix: {
|
|
165
|
+
id: 'address-duration-months-suffix',
|
|
166
|
+
text: 'Months',
|
|
167
|
+
},
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
it('has the group class div', () => {
|
|
172
|
+
const $ = cheerio.load(renderComponent('duration', EXAMPLE_DURATION_MULTIPLE_FIELDS));
|
|
173
|
+
const div = $('.ons-field:first-child').parent();
|
|
174
|
+
expect($(div).hasClass('ons-field-group')).toBe(true);
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
it('has the correct number of inputs', () => {
|
|
178
|
+
const $ = cheerio.load(renderComponent('duration', EXAMPLE_DURATION_MULTIPLE_FIELDS));
|
|
179
|
+
const $inputs = $('.ons-input');
|
|
180
|
+
expect($inputs.length).toBe(2);
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
it('has the expected `fieldset` output', () => {
|
|
184
|
+
const faker = templateFaker();
|
|
185
|
+
const fieldsetSpy = faker.spy('fieldset');
|
|
186
|
+
|
|
187
|
+
faker.renderComponent('duration', {
|
|
188
|
+
...EXAMPLE_DURATION_MULTIPLE_FIELDS,
|
|
189
|
+
legendClasses: 'custom-legend-class',
|
|
190
|
+
dontWrap: true,
|
|
191
|
+
legendIsQuestionTitle: true,
|
|
192
|
+
error: false,
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
expect(fieldsetSpy.occurrences[0]).toEqual({
|
|
196
|
+
id: 'duration',
|
|
197
|
+
legend: 'How long have you lived at this address?',
|
|
198
|
+
description: 'Enter “0” into the years field if you have lived at this address for less than a year',
|
|
199
|
+
legendClasses: 'custom-legend-class',
|
|
200
|
+
dontWrap: true,
|
|
201
|
+
legendIsQuestionTitle: true,
|
|
202
|
+
error: false,
|
|
203
|
+
});
|
|
204
|
+
});
|
|
169
205
|
});
|
|
170
206
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
207
|
+
describe('mode: multiple fields with mutually exclusive', () => {
|
|
208
|
+
it('has the correct class on each input', async () => {
|
|
209
|
+
const $ = cheerio.load(
|
|
210
|
+
renderComponent('duration', {
|
|
211
|
+
...EXAMPLE_DURATION_MULTIPLE_FIELDS,
|
|
212
|
+
mutuallyExclusive: {
|
|
213
|
+
legendClasses: 'custom-legend-class',
|
|
214
|
+
dontWrap: true,
|
|
215
|
+
classes: undefined,
|
|
216
|
+
legendIsQuestionTitle: true,
|
|
217
|
+
error: false,
|
|
218
|
+
mutuallyExclusive: {
|
|
219
|
+
exclusiveOptions: {},
|
|
220
|
+
or: 'Or',
|
|
221
|
+
deselectMessage: 'Deselect message',
|
|
222
|
+
deselectGroupAdjective: 'Deselect group adjective',
|
|
223
|
+
deselectExclusiveOptionAdjective: 'Deselect checkbox adjective',
|
|
224
|
+
},
|
|
225
|
+
},
|
|
226
|
+
}),
|
|
227
|
+
);
|
|
228
|
+
|
|
229
|
+
const exclusiveClassCount = $('.ons-js-exclusive-group-item').length;
|
|
230
|
+
expect(exclusiveClassCount).toBe(2);
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
it('has the expected `mutuallyExclusive` output', () => {
|
|
234
|
+
const faker = templateFaker();
|
|
235
|
+
const mutuallyExclusiveSpy = faker.spy('mutually-exclusive');
|
|
236
|
+
|
|
237
|
+
faker.renderComponent('duration', {
|
|
238
|
+
...EXAMPLE_DURATION_MULTIPLE_FIELDS,
|
|
239
|
+
legendClasses: 'custom-legend-class',
|
|
240
|
+
dontWrap: true,
|
|
241
|
+
classes: undefined,
|
|
242
|
+
legendIsQuestionTitle: true,
|
|
243
|
+
error: false,
|
|
244
|
+
mutuallyExclusive: {
|
|
245
|
+
or: 'Or',
|
|
246
|
+
deselectMessage: 'Deselect message',
|
|
247
|
+
deselectGroupAdjective: 'Deselect group adjective',
|
|
248
|
+
deselectExclusiveOptionAdjective: 'Deselect checkbox adjective',
|
|
249
|
+
},
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
expect(mutuallyExclusiveSpy.occurrences[0]).toEqual({
|
|
253
|
+
id: 'duration',
|
|
254
|
+
legend: 'How long have you lived at this address?',
|
|
255
|
+
description: 'Enter “0” into the years field if you have lived at this address for less than a year',
|
|
256
|
+
legendClasses: 'custom-legend-class',
|
|
257
|
+
dontWrap: true,
|
|
258
|
+
classes: undefined,
|
|
259
|
+
legendIsQuestionTitle: true,
|
|
260
|
+
error: false,
|
|
261
|
+
or: 'Or',
|
|
262
|
+
deselectMessage: 'Deselect message',
|
|
263
|
+
deselectGroupAdjective: 'Deselect group adjective',
|
|
264
|
+
deselectExclusiveOptionAdjective: 'Deselect checkbox adjective',
|
|
265
|
+
});
|
|
266
|
+
});
|
|
175
267
|
});
|
|
176
268
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
269
|
+
describe('mode: single field', () => {
|
|
270
|
+
it('passes jest-axe checks', async () => {
|
|
271
|
+
const $ = cheerio.load(renderComponent('duration', EXAMPLE_DURATION_SINGLE_FIELD));
|
|
272
|
+
|
|
273
|
+
const results = await axe($.html());
|
|
274
|
+
expect(results).toHaveNoViolations();
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
it('has the expected `input` output for the field', () => {
|
|
278
|
+
const faker = templateFaker();
|
|
279
|
+
const inputSpy = faker.spy('input');
|
|
280
|
+
|
|
281
|
+
faker.renderComponent('duration', EXAMPLE_DURATION_SINGLE_FIELD);
|
|
282
|
+
|
|
283
|
+
expect(inputSpy.occurrences[0]).toEqual({
|
|
284
|
+
id: 'address-duration-years',
|
|
285
|
+
type: 'number',
|
|
286
|
+
width: '2',
|
|
287
|
+
classes: '',
|
|
288
|
+
value: '0',
|
|
289
|
+
attributes: undefined,
|
|
290
|
+
error: undefined,
|
|
291
|
+
fieldId: 'duration',
|
|
292
|
+
label: {
|
|
293
|
+
text: 'How long have you lived at this address?',
|
|
294
|
+
description: 'Enter “0” into the years field if you have lived at this address for less than a year',
|
|
295
|
+
},
|
|
296
|
+
name: 'address-duration-years',
|
|
297
|
+
suffix: {
|
|
298
|
+
id: 'address-duration-years-suffix',
|
|
299
|
+
text: 'Years',
|
|
300
|
+
title: undefined,
|
|
301
|
+
},
|
|
302
|
+
});
|
|
303
|
+
});
|
|
304
|
+
|
|
305
|
+
it('has the correct number of inputs', () => {
|
|
306
|
+
const $ = cheerio.load(renderComponent('duration', EXAMPLE_DURATION_SINGLE_FIELD));
|
|
307
|
+
const $inputs = $('.ons-input');
|
|
308
|
+
expect($inputs.length).toBe(1);
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
it('has the expected `error` output', () => {
|
|
312
|
+
const faker = templateFaker();
|
|
313
|
+
const errorSpy = faker.spy('error');
|
|
314
|
+
|
|
315
|
+
faker.renderComponent('duration', {
|
|
316
|
+
...EXAMPLE_DURATION_SINGLE_FIELD,
|
|
317
|
+
error: { text: 'Put something else' },
|
|
318
|
+
});
|
|
319
|
+
|
|
320
|
+
expect(errorSpy.occurrences[0]).toEqual({
|
|
321
|
+
text: 'Put something else',
|
|
322
|
+
});
|
|
323
|
+
});
|
|
204
324
|
});
|
|
205
|
-
});
|
|
206
|
-
|
|
207
|
-
describe('mode: multiple fields with mutually exclusive', () => {
|
|
208
|
-
it('has the correct class on each input', async () => {
|
|
209
|
-
const $ = cheerio.load(
|
|
210
|
-
renderComponent('duration', {
|
|
211
|
-
...EXAMPLE_DURATION_MULTIPLE_FIELDS,
|
|
212
|
-
mutuallyExclusive: {
|
|
213
|
-
legendClasses: 'custom-legend-class',
|
|
214
|
-
dontWrap: true,
|
|
215
|
-
classes: undefined,
|
|
216
|
-
legendIsQuestionTitle: true,
|
|
217
|
-
error: false,
|
|
218
|
-
mutuallyExclusive: {
|
|
219
|
-
exclusiveOptions: {},
|
|
220
|
-
or: 'Or',
|
|
221
|
-
deselectMessage: 'Deselect message',
|
|
222
|
-
deselectGroupAdjective: 'Deselect group adjective',
|
|
223
|
-
deselectExclusiveOptionAdjective: 'Deselect checkbox adjective',
|
|
224
|
-
},
|
|
225
|
-
},
|
|
226
|
-
}),
|
|
227
|
-
);
|
|
228
|
-
|
|
229
|
-
const exclusiveClassCount = $('.ons-js-exclusive-group-item').length;
|
|
230
|
-
expect(exclusiveClassCount).toBe(2);
|
|
231
|
-
});
|
|
232
|
-
|
|
233
|
-
it('has the expected `mutuallyExclusive` output', () => {
|
|
234
|
-
const faker = templateFaker();
|
|
235
|
-
const mutuallyExclusiveSpy = faker.spy('mutually-exclusive');
|
|
236
325
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
dontWrap: true,
|
|
241
|
-
classes: undefined,
|
|
242
|
-
legendIsQuestionTitle: true,
|
|
243
|
-
error: false,
|
|
244
|
-
mutuallyExclusive: {
|
|
245
|
-
or: 'Or',
|
|
246
|
-
deselectMessage: 'Deselect message',
|
|
247
|
-
deselectGroupAdjective: 'Deselect group adjective',
|
|
248
|
-
deselectExclusiveOptionAdjective: 'Deselect checkbox adjective',
|
|
249
|
-
},
|
|
250
|
-
});
|
|
251
|
-
|
|
252
|
-
expect(mutuallyExclusiveSpy.occurrences[0]).toEqual({
|
|
253
|
-
id: 'duration',
|
|
254
|
-
legend: 'How long have you lived at this address?',
|
|
255
|
-
description: 'Enter “0” into the years field if you have lived at this address for less than a year',
|
|
256
|
-
legendClasses: 'custom-legend-class',
|
|
257
|
-
dontWrap: true,
|
|
258
|
-
classes: undefined,
|
|
259
|
-
legendIsQuestionTitle: true,
|
|
260
|
-
error: false,
|
|
261
|
-
or: 'Or',
|
|
262
|
-
deselectMessage: 'Deselect message',
|
|
263
|
-
deselectGroupAdjective: 'Deselect group adjective',
|
|
264
|
-
deselectExclusiveOptionAdjective: 'Deselect checkbox adjective',
|
|
265
|
-
});
|
|
266
|
-
});
|
|
267
|
-
});
|
|
326
|
+
describe('mode: multiple fields with errors', () => {
|
|
327
|
+
it('passes jest-axe checks', async () => {
|
|
328
|
+
const $ = cheerio.load(renderComponent('duration', EXAMPLE_DURATION_MULTIPLE_FIELDS_WITH_SINGLE_ERROR));
|
|
268
329
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
330
|
+
const results = await axe($.html());
|
|
331
|
+
expect(results).toHaveNoViolations();
|
|
332
|
+
});
|
|
272
333
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
334
|
+
it('has the provided error class on one input', async () => {
|
|
335
|
+
const $ = cheerio.load(renderComponent('duration', EXAMPLE_DURATION_MULTIPLE_FIELDS_WITH_SINGLE_ERROR));
|
|
336
|
+
const $errorContent = $('.ons-input--error');
|
|
276
337
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
const inputSpy = faker.spy('input');
|
|
338
|
+
expect($errorContent.length).toBe(1);
|
|
339
|
+
});
|
|
280
340
|
|
|
281
|
-
|
|
341
|
+
it('has the provided error class on multiple inputs', async () => {
|
|
342
|
+
const $ = cheerio.load(renderComponent('duration', EXAMPLE_DURATION_MULTIPLE_FIELDS_WITH_ERROR));
|
|
343
|
+
const $errorContent = $('.ons-input--error');
|
|
282
344
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
type: 'number',
|
|
286
|
-
width: '2',
|
|
287
|
-
classes: '',
|
|
288
|
-
value: '0',
|
|
289
|
-
attributes: undefined,
|
|
290
|
-
error: undefined,
|
|
291
|
-
fieldId: 'duration',
|
|
292
|
-
label: {
|
|
293
|
-
text: 'How long have you lived at this address?',
|
|
294
|
-
description: 'Enter “0” into the years field if you have lived at this address for less than a year',
|
|
295
|
-
},
|
|
296
|
-
name: 'address-duration-years',
|
|
297
|
-
suffix: {
|
|
298
|
-
id: 'address-duration-years-suffix',
|
|
299
|
-
text: 'Years',
|
|
300
|
-
title: undefined,
|
|
301
|
-
},
|
|
302
|
-
});
|
|
303
|
-
});
|
|
304
|
-
|
|
305
|
-
it('has the correct number of inputs', () => {
|
|
306
|
-
const $ = cheerio.load(renderComponent('duration', EXAMPLE_DURATION_SINGLE_FIELD));
|
|
307
|
-
const $inputs = $('.ons-input');
|
|
308
|
-
expect($inputs.length).toBe(1);
|
|
309
|
-
});
|
|
310
|
-
|
|
311
|
-
it('has the expected `error` output', () => {
|
|
312
|
-
const faker = templateFaker();
|
|
313
|
-
const errorSpy = faker.spy('error');
|
|
314
|
-
|
|
315
|
-
faker.renderComponent('duration', {
|
|
316
|
-
...EXAMPLE_DURATION_SINGLE_FIELD,
|
|
317
|
-
error: { text: 'Put something else' },
|
|
318
|
-
});
|
|
319
|
-
|
|
320
|
-
expect(errorSpy.occurrences[0]).toEqual({
|
|
321
|
-
text: 'Put something else',
|
|
322
|
-
});
|
|
323
|
-
});
|
|
324
|
-
});
|
|
325
|
-
|
|
326
|
-
describe('mode: multiple fields with errors', () => {
|
|
327
|
-
it('passes jest-axe checks', async () => {
|
|
328
|
-
const $ = cheerio.load(renderComponent('duration', EXAMPLE_DURATION_MULTIPLE_FIELDS_WITH_SINGLE_ERROR));
|
|
329
|
-
|
|
330
|
-
const results = await axe($.html());
|
|
331
|
-
expect(results).toHaveNoViolations();
|
|
332
|
-
});
|
|
333
|
-
|
|
334
|
-
it('has the provided error class on one input', async () => {
|
|
335
|
-
const $ = cheerio.load(renderComponent('duration', EXAMPLE_DURATION_MULTIPLE_FIELDS_WITH_SINGLE_ERROR));
|
|
336
|
-
const $errorContent = $('.ons-input--error');
|
|
337
|
-
|
|
338
|
-
expect($errorContent.length).toBe(1);
|
|
339
|
-
});
|
|
340
|
-
|
|
341
|
-
it('has the provided error class on multiple inputs', async () => {
|
|
342
|
-
const $ = cheerio.load(renderComponent('duration', EXAMPLE_DURATION_MULTIPLE_FIELDS_WITH_ERROR));
|
|
343
|
-
const $errorContent = $('.ons-input--error');
|
|
344
|
-
|
|
345
|
-
expect($errorContent.length).toBe(2);
|
|
346
|
-
});
|
|
345
|
+
expect($errorContent.length).toBe(2);
|
|
346
|
+
});
|
|
347
347
|
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
348
|
+
it('does not provide error class when error parameter set to false', async () => {
|
|
349
|
+
const $ = cheerio.load(renderComponent('duration', EXAMPLE_DURATION_MULTIPLE_FIELDS_WITH_ERROR_FALSE));
|
|
350
|
+
const $errorContent = $('.ons-input--error');
|
|
351
351
|
|
|
352
|
-
|
|
352
|
+
expect($errorContent.length).toBe(0);
|
|
353
|
+
});
|
|
353
354
|
});
|
|
354
|
-
});
|
|
355
355
|
});
|