@ons/design-system 70.0.6 → 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.njk +2 -2
- 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/android-chrome-192x192.png +0 -0
- package/favicons/android-chrome-512x512.png +0 -0
- package/favicons/apple-touch-icon.png +0 -0
- package/favicons/favicon-16x16.png +0 -0
- package/favicons/favicon-32x32.png +0 -0
- package/favicons/favicon.ico +0 -0
- package/favicons/manifest.json +25 -25
- package/favicons/maskable_icon.png +0 -0
- package/favicons/opengraph.png +0 -0
- package/favicons/twitter.png +0 -0
- package/img/large/alison-pritchard-featured.jpg +0 -0
- package/img/large/alison-pritchard.jpg +0 -0
- package/img/large/census-monuments-lights-featured.jpg +0 -0
- package/img/large/census-monuments-lights.jpg +0 -0
- package/img/large/mother-and-daughter-in-ireland.jpg +0 -0
- package/img/large/mum-and-child-healthcare-belfast.jpg +0 -0
- package/img/large/ons-award-winners.jpg +0 -0
- package/img/large/placeholder-card.png +0 -0
- package/img/large/placeholder-news-medium.png +0 -0
- package/img/large/placeholder-news.png +0 -0
- package/img/large/placeholder-portrait.png +0 -0
- package/img/large/students.jpg +0 -0
- package/img/large/woman-in-purple-dress-shirt.jpg +0 -0
- package/img/small/alison-pritchard-featured.jpg +0 -0
- package/img/small/alison-pritchard.jpg +0 -0
- package/img/small/census-monuments-lights-featured.jpg +0 -0
- package/img/small/census-monuments-lights.jpg +0 -0
- package/img/small/mother-and-daughter-in-ireland.jpg +0 -0
- package/img/small/mum-and-child-healthcare-belfast.jpg +0 -0
- package/img/small/ons-award-winners.jpg +0 -0
- package/img/small/placeholder-card.png +0 -0
- package/img/small/placeholder-news-medium.png +0 -0
- package/img/small/placeholder-news.png +0 -0
- package/img/small/placeholder-portrait.png +0 -0
- package/img/small/students.jpg +0 -0
- package/img/small/woman-in-purple-dress-shirt.jpg +0 -0
- 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 -127
- package/scripts/main.es5.js +1 -1
- package/scripts/main.js +1 -1
- 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
|
@@ -7,976 +7,980 @@ import { renderComponent, templateFaker } from '../../tests/helpers/rendering';
|
|
|
7
7
|
import { mapAll } from '../../tests/helpers/cheerio';
|
|
8
8
|
|
|
9
9
|
const EXAMPLE_HEADER_BASIC = {
|
|
10
|
-
|
|
10
|
+
title: 'Header title',
|
|
11
11
|
};
|
|
12
12
|
|
|
13
13
|
const EXAMPLE_SERVICE_LINKS_CONFIG = {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
14
|
+
id: 'service-links',
|
|
15
|
+
ariaLabel: 'Services menu',
|
|
16
|
+
classes: 'custom-class',
|
|
17
|
+
toggleServicesButton: {
|
|
18
|
+
text: 'Menu',
|
|
19
|
+
ariaLabel: 'Toggle services menu',
|
|
20
|
+
},
|
|
21
21
|
};
|
|
22
22
|
|
|
23
23
|
const EXAMPLE_HEADER_SERVICE_LIST_ITEMS = {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
24
|
+
...EXAMPLE_HEADER_BASIC,
|
|
25
|
+
serviceLinks: {
|
|
26
|
+
...EXAMPLE_SERVICE_LINKS_CONFIG,
|
|
27
|
+
itemsList: [
|
|
28
|
+
{
|
|
29
|
+
title: 'Title 1',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
title: 'Title 2',
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
title: 'Title 3',
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
39
|
};
|
|
40
40
|
|
|
41
41
|
const EXAMPLE_HEADER_SERVICE_LINKS_MULTIPLE = {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
42
|
+
...EXAMPLE_HEADER_BASIC,
|
|
43
|
+
serviceLinks: {
|
|
44
|
+
...EXAMPLE_SERVICE_LINKS_CONFIG,
|
|
45
|
+
itemsList: [
|
|
46
|
+
{
|
|
47
|
+
title: 'Title 1',
|
|
48
|
+
url: '#1',
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
title: 'Title 2',
|
|
52
|
+
url: '#2',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
title: 'Title 3',
|
|
56
|
+
url: '#3',
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
},
|
|
60
60
|
};
|
|
61
61
|
|
|
62
62
|
const EXAMPLE_HEADER_SERVICE_LINKS_SINGLE = {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
63
|
+
...EXAMPLE_HEADER_BASIC,
|
|
64
|
+
serviceLinks: {
|
|
65
|
+
...EXAMPLE_SERVICE_LINKS_CONFIG,
|
|
66
|
+
itemsList: [
|
|
67
|
+
{
|
|
68
|
+
title: 'Title',
|
|
69
|
+
url: '#0',
|
|
70
|
+
},
|
|
71
|
+
],
|
|
72
|
+
},
|
|
73
73
|
};
|
|
74
74
|
|
|
75
75
|
const EXAMPLE_HEADER_LANGUAGE_CONFIG = {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
76
|
+
language: {
|
|
77
|
+
languages: [
|
|
78
|
+
{
|
|
79
|
+
url: '#0',
|
|
80
|
+
ISOCode: 'en',
|
|
81
|
+
text: 'English',
|
|
82
|
+
buttonAriaLabel: 'Language selector. Current language: English',
|
|
83
|
+
chooseLanguage: 'Choose language',
|
|
84
|
+
current: true,
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
url: '#0',
|
|
88
|
+
ISOCode: 'cy',
|
|
89
|
+
text: 'Cymraeg',
|
|
90
|
+
buttonAriaLabel: 'Dewisydd iaith. Iaith gyfredol: Cymraeg',
|
|
91
|
+
chooseLanguage: 'Dewiswch iaith',
|
|
92
|
+
current: false,
|
|
93
|
+
},
|
|
94
|
+
],
|
|
95
|
+
},
|
|
96
96
|
};
|
|
97
97
|
|
|
98
98
|
const EXAMPLE_HEADER_NAVIGATION_CONFIG = {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
99
|
+
navigation: {
|
|
100
|
+
id: 'main-nav',
|
|
101
|
+
ariaLabel: 'Main menu',
|
|
102
|
+
currentPath: '#home',
|
|
103
|
+
itemsList: [
|
|
104
|
+
{
|
|
105
|
+
title: 'Home',
|
|
106
|
+
url: '#home',
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
title: 'Guidance',
|
|
110
|
+
url: '#0',
|
|
111
|
+
},
|
|
112
|
+
],
|
|
113
|
+
toggleNavigationButton: {
|
|
114
|
+
text: 'Menu',
|
|
115
|
+
ariaLabel: 'Toggle main menu',
|
|
116
|
+
},
|
|
116
117
|
},
|
|
117
|
-
},
|
|
118
118
|
};
|
|
119
119
|
|
|
120
120
|
const EXAMPLE_HEADER_NAVIGATION_WITH_SUBNAVIGATION_CONFIG = {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
},
|
|
140
|
-
subNavigation: {
|
|
141
|
-
id: 'sub-nav',
|
|
142
|
-
overviewURL: '#overview',
|
|
143
|
-
overviewText: 'Overview',
|
|
144
|
-
ariaLabel: 'Section menu',
|
|
145
|
-
currentPath: '#1',
|
|
146
|
-
itemsList: [
|
|
147
|
-
{
|
|
148
|
-
title: 'Sub nav item 1',
|
|
149
|
-
url: '#0',
|
|
150
|
-
classes: 'custom-class-sub-item-1',
|
|
151
|
-
id: 'sub-item-1',
|
|
121
|
+
navigation: {
|
|
122
|
+
id: 'main-nav',
|
|
123
|
+
ariaLabel: 'Main menu',
|
|
124
|
+
currentPath: '#1',
|
|
125
|
+
currentPageTitle: 'Guidance',
|
|
126
|
+
itemsList: [
|
|
127
|
+
{
|
|
128
|
+
title: 'Home',
|
|
129
|
+
url: '#0',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
title: 'Guidance',
|
|
133
|
+
url: '#1',
|
|
134
|
+
},
|
|
135
|
+
],
|
|
136
|
+
toggleNavigationButton: {
|
|
137
|
+
text: 'Menu',
|
|
138
|
+
ariaLabel: 'Toggle main menu',
|
|
152
139
|
},
|
|
153
|
-
{
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
140
|
+
subNavigation: {
|
|
141
|
+
id: 'sub-nav',
|
|
142
|
+
overviewURL: '#overview',
|
|
143
|
+
overviewText: 'Overview',
|
|
144
|
+
ariaLabel: 'Section menu',
|
|
145
|
+
currentPath: '#1',
|
|
146
|
+
itemsList: [
|
|
147
|
+
{
|
|
148
|
+
title: 'Sub nav item 1',
|
|
149
|
+
url: '#0',
|
|
150
|
+
classes: 'custom-class-sub-item-1',
|
|
151
|
+
id: 'sub-item-1',
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
title: 'Sub nav item 2',
|
|
155
|
+
url: '#1',
|
|
156
|
+
classes: 'custom-class-sub-item-2',
|
|
157
|
+
id: 'sub-item-2',
|
|
158
|
+
},
|
|
159
|
+
],
|
|
158
160
|
},
|
|
159
|
-
],
|
|
160
161
|
},
|
|
161
|
-
},
|
|
162
162
|
};
|
|
163
163
|
|
|
164
164
|
const EXAMPLE_HEADER_NAVIGATION_WITH_SITESEARCHAUTOSUGGEST = {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
165
|
+
navigation: {
|
|
166
|
+
id: 'main-nav',
|
|
167
|
+
ariaLabel: 'Main menu',
|
|
168
|
+
currentPath: '#home',
|
|
169
|
+
itemsList: [
|
|
170
|
+
{
|
|
171
|
+
title: 'Home',
|
|
172
|
+
url: '#home',
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
title: 'Guidance',
|
|
176
|
+
url: '#0',
|
|
177
|
+
},
|
|
178
|
+
],
|
|
179
|
+
toggleNavigationButton: {
|
|
180
|
+
text: 'Menu',
|
|
181
|
+
ariaLabel: 'Toggle main menu',
|
|
182
|
+
},
|
|
183
|
+
},
|
|
184
|
+
siteSearchAutosuggest: {
|
|
185
|
+
label: 'label',
|
|
186
|
+
instructions: 'Use up and down keys to navigate.',
|
|
187
|
+
ariaYouHaveSelected: 'You have selected',
|
|
188
|
+
ariaMinChars: 'Enter 3 or more characters for suggestions.',
|
|
189
|
+
minChars: 3,
|
|
190
|
+
ariaResultsLabel: 'Country suggestions',
|
|
191
|
+
ariaOneResult: 'There is one suggestion available.',
|
|
192
|
+
ariaNResults: 'There are {n} suggestions available.',
|
|
193
|
+
ariaLimitedResults: 'Type more characters to improve your search',
|
|
194
|
+
moreResults: 'Continue entering to improve suggestions',
|
|
195
|
+
resultsTitle: 'Suggestions',
|
|
196
|
+
resultsTitleId: 'country-of-birth-suggestions',
|
|
197
|
+
noResults: 'No suggestions found.',
|
|
198
|
+
typeMore: 'Continue entering to get suggestions',
|
|
199
|
+
language: 'en-gb',
|
|
182
200
|
},
|
|
183
|
-
},
|
|
184
|
-
siteSearchAutosuggest: {
|
|
185
|
-
label: 'label',
|
|
186
|
-
instructions: 'Use up and down keys to navigate.',
|
|
187
|
-
ariaYouHaveSelected: 'You have selected',
|
|
188
|
-
ariaMinChars: 'Enter 3 or more characters for suggestions.',
|
|
189
|
-
minChars: 3,
|
|
190
|
-
ariaResultsLabel: 'Country suggestions',
|
|
191
|
-
ariaOneResult: 'There is one suggestion available.',
|
|
192
|
-
ariaNResults: 'There are {n} suggestions available.',
|
|
193
|
-
ariaLimitedResults: 'Type more characters to improve your search',
|
|
194
|
-
moreResults: 'Continue entering to improve suggestions',
|
|
195
|
-
resultsTitle: 'Suggestions',
|
|
196
|
-
resultsTitleId: 'country-of-birth-suggestions',
|
|
197
|
-
noResults: 'No suggestions found.',
|
|
198
|
-
typeMore: 'Continue entering to get suggestions',
|
|
199
|
-
language: 'en-gb',
|
|
200
|
-
},
|
|
201
201
|
};
|
|
202
202
|
|
|
203
203
|
describe('macro: header', () => {
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
const results = await axe($.html());
|
|
209
|
-
expect(results).toHaveNoViolations();
|
|
210
|
-
});
|
|
204
|
+
describe('mode: basic', () => {
|
|
205
|
+
it('passes jest-axe checks', async () => {
|
|
206
|
+
const $ = cheerio.load(renderComponent('header', EXAMPLE_HEADER_BASIC));
|
|
211
207
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
...EXAMPLE_HEADER_BASIC,
|
|
216
|
-
variants: ['variant-a', 'variant-b'],
|
|
217
|
-
}),
|
|
218
|
-
);
|
|
219
|
-
|
|
220
|
-
expect($('.ons-header--variant-a').length).toBe(1);
|
|
221
|
-
expect($('.ons-header--variant-b').length).toBe(1);
|
|
222
|
-
});
|
|
208
|
+
const results = await axe($.html());
|
|
209
|
+
expect(results).toHaveNoViolations();
|
|
210
|
+
});
|
|
223
211
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
212
|
+
it('has provided variant style classes', () => {
|
|
213
|
+
const $ = cheerio.load(
|
|
214
|
+
renderComponent('header', {
|
|
215
|
+
...EXAMPLE_HEADER_BASIC,
|
|
216
|
+
variants: ['variant-a', 'variant-b'],
|
|
217
|
+
}),
|
|
218
|
+
);
|
|
231
219
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
220
|
+
expect($('.ons-header--variant-a').length).toBe(1);
|
|
221
|
+
expect($('.ons-header--variant-b').length).toBe(1);
|
|
222
|
+
});
|
|
235
223
|
|
|
236
|
-
|
|
237
|
-
|
|
224
|
+
it('has additionally provided `classes`', () => {
|
|
225
|
+
const $ = cheerio.load(
|
|
226
|
+
renderComponent('header', {
|
|
227
|
+
...EXAMPLE_HEADER_BASIC,
|
|
228
|
+
classes: 'extra-class another-extra-class',
|
|
229
|
+
}),
|
|
230
|
+
);
|
|
238
231
|
|
|
239
|
-
|
|
240
|
-
|
|
232
|
+
expect($('.ons-header').hasClass('extra-class')).toBe(true);
|
|
233
|
+
expect($('.ons-header').hasClass('another-extra-class')).toBe(true);
|
|
234
|
+
});
|
|
241
235
|
|
|
242
|
-
|
|
243
|
-
|
|
236
|
+
it('has the correct container if `fullWidth`', () => {
|
|
237
|
+
const $ = cheerio.load(renderComponent('header', { ...EXAMPLE_HEADER_BASIC, fullWidth: true }));
|
|
244
238
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
it('has the correct masthead logo link', () => {
|
|
249
|
-
const $ = cheerio.load(renderComponent('header', { ...EXAMPLE_HEADER_BASIC, mastheadLogoUrl: '#0' }));
|
|
239
|
+
expect($('.ons-container').hasClass('ons-container--full-width')).toBe(true);
|
|
240
|
+
});
|
|
250
241
|
|
|
251
|
-
|
|
252
|
-
|
|
242
|
+
it('has the correct container if `wide`', () => {
|
|
243
|
+
const $ = cheerio.load(renderComponent('header', { ...EXAMPLE_HEADER_BASIC, wide: true }));
|
|
253
244
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
const iconsSpy = faker.spy('icon');
|
|
245
|
+
expect($('.ons-container').hasClass('ons-container--wide')).toBe(true);
|
|
246
|
+
});
|
|
257
247
|
|
|
258
|
-
|
|
248
|
+
it('has the correct masthead logo link', () => {
|
|
249
|
+
const $ = cheerio.load(renderComponent('header', { ...EXAMPLE_HEADER_BASIC, mastheadLogoUrl: '#0' }));
|
|
259
250
|
|
|
260
|
-
|
|
261
|
-
|
|
251
|
+
expect($('.ons-header__org-logo-link').attr('href')).toBe('#0');
|
|
252
|
+
});
|
|
262
253
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
254
|
+
it('has the default masthead logo icon', () => {
|
|
255
|
+
const faker = templateFaker();
|
|
256
|
+
const iconsSpy = faker.spy('icon');
|
|
266
257
|
|
|
267
|
-
|
|
258
|
+
faker.renderComponent('header', EXAMPLE_HEADER_BASIC);
|
|
268
259
|
|
|
269
|
-
|
|
270
|
-
|
|
260
|
+
expect(iconsSpy.occurrences[0].iconType).toBe('ons-logo-en');
|
|
261
|
+
});
|
|
271
262
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
263
|
+
it('has the default masthead mobile logo icon', () => {
|
|
264
|
+
const faker = templateFaker();
|
|
265
|
+
const iconsSpy = faker.spy('icon');
|
|
275
266
|
|
|
276
|
-
|
|
267
|
+
faker.renderComponent('header', EXAMPLE_HEADER_BASIC);
|
|
277
268
|
|
|
278
|
-
|
|
279
|
-
|
|
269
|
+
expect(iconsSpy.occurrences[1].iconType).toBe('ons-logo-stacked-en');
|
|
270
|
+
});
|
|
280
271
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
272
|
+
it('has the default masthead logo icon alt text', () => {
|
|
273
|
+
const faker = templateFaker();
|
|
274
|
+
const iconsSpy = faker.spy('icon');
|
|
284
275
|
|
|
285
|
-
|
|
276
|
+
faker.renderComponent('header', EXAMPLE_HEADER_BASIC);
|
|
286
277
|
|
|
287
|
-
|
|
288
|
-
|
|
278
|
+
expect(iconsSpy.occurrences[0].altText).toBe('Office for National Statistics homepage');
|
|
279
|
+
});
|
|
289
280
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
);
|
|
281
|
+
it('has the default masthead mobile logo icon alt text', () => {
|
|
282
|
+
const faker = templateFaker();
|
|
283
|
+
const iconsSpy = faker.spy('icon');
|
|
294
284
|
|
|
295
|
-
|
|
296
|
-
});
|
|
285
|
+
faker.renderComponent('header', EXAMPLE_HEADER_BASIC);
|
|
297
286
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
renderComponent('header', {
|
|
301
|
-
...EXAMPLE_HEADER_BASIC,
|
|
302
|
-
mastheadLogo: { large: '<img src="another-logo.svg">', classes: 'custom-class another-custom-class' },
|
|
303
|
-
}),
|
|
304
|
-
);
|
|
287
|
+
expect(iconsSpy.occurrences[1].altText).toBe('Office for National Statistics logo');
|
|
288
|
+
});
|
|
305
289
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
290
|
+
it('has the provided large masthead logo', () => {
|
|
291
|
+
const $ = cheerio.load(
|
|
292
|
+
renderComponent('header', { ...EXAMPLE_HEADER_BASIC, mastheadLogo: { large: '<img src="another-logo.svg">' } }),
|
|
293
|
+
);
|
|
309
294
|
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
renderComponent('header', {
|
|
313
|
-
...EXAMPLE_HEADER_BASIC,
|
|
314
|
-
mastheadLogo: { large: 'another-logo.svg', small: '<img src="another-logo-small.svg">' },
|
|
315
|
-
}),
|
|
316
|
-
);
|
|
295
|
+
expect($('.ons-header__org-logo--large img').attr('src')).toBe('another-logo.svg');
|
|
296
|
+
});
|
|
317
297
|
|
|
318
|
-
|
|
319
|
-
|
|
298
|
+
it('has the provided masthead logo custom classes', () => {
|
|
299
|
+
const $ = cheerio.load(
|
|
300
|
+
renderComponent('header', {
|
|
301
|
+
...EXAMPLE_HEADER_BASIC,
|
|
302
|
+
mastheadLogo: { large: '<img src="another-logo.svg">', classes: 'custom-class another-custom-class' },
|
|
303
|
+
}),
|
|
304
|
+
);
|
|
320
305
|
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
const iconsSpy = faker.spy('icon');
|
|
325
|
-
|
|
326
|
-
faker.renderComponent('header', {
|
|
327
|
-
...EXAMPLE_HEADER_BASIC,
|
|
328
|
-
mastheadLogo: {
|
|
329
|
-
multipleLogos: {
|
|
330
|
-
logo1: {
|
|
331
|
-
logoImage: 'ONS Logo',
|
|
332
|
-
},
|
|
333
|
-
},
|
|
334
|
-
},
|
|
335
|
-
});
|
|
336
|
-
expect(iconsSpy.occurrences[0].iconType).toBe('ons-logo-stacked-en');
|
|
337
|
-
});
|
|
338
|
-
|
|
339
|
-
it('has the provided link', () => {
|
|
340
|
-
const $ = cheerio.load(
|
|
341
|
-
renderComponent('header', {
|
|
342
|
-
...EXAMPLE_HEADER_BASIC,
|
|
343
|
-
mastheadLogo: {
|
|
344
|
-
multipleLogos: {
|
|
345
|
-
logo1: {
|
|
346
|
-
logoImage: '<img src="a-logo.svg">',
|
|
347
|
-
logoURL: '#0',
|
|
348
|
-
},
|
|
349
|
-
},
|
|
350
|
-
},
|
|
351
|
-
}),
|
|
352
|
-
);
|
|
353
|
-
|
|
354
|
-
expect($('.ons-header__org-logo-link').attr('href')).toBe('#0');
|
|
355
|
-
});
|
|
356
|
-
|
|
357
|
-
it('when multiple images are provided all show', () => {
|
|
358
|
-
const $ = cheerio.load(
|
|
359
|
-
renderComponent('header', {
|
|
360
|
-
...EXAMPLE_HEADER_BASIC,
|
|
361
|
-
mastheadLogo: {
|
|
362
|
-
multipleLogos: {
|
|
363
|
-
logo1: {
|
|
364
|
-
logoImage: '<img src="a-logo.svg">',
|
|
365
|
-
},
|
|
366
|
-
logo2: {
|
|
367
|
-
logoImage: '<img src="a-second-logo.svg">',
|
|
368
|
-
},
|
|
369
|
-
logo3: {
|
|
370
|
-
logoImage: '<img src="a-third-logo.svg">',
|
|
371
|
-
},
|
|
372
|
-
},
|
|
373
|
-
},
|
|
374
|
-
}),
|
|
375
|
-
);
|
|
376
|
-
|
|
377
|
-
expect($('.ons-header__org-logo--multi img').attr('src')).toBe('a-logo.svg');
|
|
378
|
-
expect($('.ons-header__org-logo--multi img:nth-of-type(2)').attr('src')).toBe('a-second-logo.svg');
|
|
379
|
-
expect($('.ons-header__org-logo--multi img:nth-of-type(3)').attr('src')).toBe('a-third-logo.svg');
|
|
380
|
-
});
|
|
381
|
-
|
|
382
|
-
it('renders multiple logos even when small/large parameters are used', () => {
|
|
383
|
-
const $ = cheerio.load(
|
|
384
|
-
renderComponent('header', {
|
|
385
|
-
...EXAMPLE_HEADER_BASIC,
|
|
386
|
-
mastheadLogo: {
|
|
387
|
-
small: '<img src="small-logo.svg">',
|
|
388
|
-
large: '<img src="big-logo.svg">',
|
|
389
|
-
multipleLogos: {
|
|
390
|
-
logo1: {
|
|
391
|
-
logoImage: '<img src="a-logo.svg">',
|
|
392
|
-
},
|
|
393
|
-
logo2: {
|
|
394
|
-
logoImage: '<img src="a-second-logo.svg">',
|
|
395
|
-
},
|
|
396
|
-
logo3: {
|
|
397
|
-
logoImage: '<img src="a-third-logo.svg">',
|
|
398
|
-
},
|
|
399
|
-
},
|
|
400
|
-
},
|
|
401
|
-
}),
|
|
402
|
-
);
|
|
403
|
-
expect($('.ons-header__org-logo--large').attr('src')).toBe(undefined);
|
|
404
|
-
expect($('.ons-header__org-logo--multi img').attr('src')).toBe('a-logo.svg');
|
|
405
|
-
});
|
|
406
|
-
});
|
|
306
|
+
expect($('.ons-header__grid-top').hasClass('custom-class')).toBe(true);
|
|
307
|
+
expect($('.ons-header__grid-top').hasClass('another-custom-class')).toBe(true);
|
|
308
|
+
});
|
|
407
309
|
|
|
408
|
-
|
|
409
|
-
|
|
310
|
+
it('has the provided small masthead logo', () => {
|
|
311
|
+
const $ = cheerio.load(
|
|
312
|
+
renderComponent('header', {
|
|
313
|
+
...EXAMPLE_HEADER_BASIC,
|
|
314
|
+
mastheadLogo: { large: 'another-logo.svg', small: '<img src="another-logo-small.svg">' },
|
|
315
|
+
}),
|
|
316
|
+
);
|
|
410
317
|
|
|
411
|
-
|
|
412
|
-
|
|
318
|
+
expect($('.ons-header__org-logo--small img').attr('src')).toBe('another-logo-small.svg');
|
|
319
|
+
});
|
|
413
320
|
|
|
414
|
-
|
|
415
|
-
|
|
321
|
+
describe('mode: with multiple logos', () => {
|
|
322
|
+
it('has the default ONS icon when requested', () => {
|
|
323
|
+
const faker = templateFaker();
|
|
324
|
+
const iconsSpy = faker.spy('icon');
|
|
325
|
+
|
|
326
|
+
faker.renderComponent('header', {
|
|
327
|
+
...EXAMPLE_HEADER_BASIC,
|
|
328
|
+
mastheadLogo: {
|
|
329
|
+
multipleLogos: {
|
|
330
|
+
logo1: {
|
|
331
|
+
logoImage: 'ONS Logo',
|
|
332
|
+
},
|
|
333
|
+
},
|
|
334
|
+
},
|
|
335
|
+
});
|
|
336
|
+
expect(iconsSpy.occurrences[0].iconType).toBe('ons-logo-stacked-en');
|
|
337
|
+
});
|
|
338
|
+
|
|
339
|
+
it('has the provided link', () => {
|
|
340
|
+
const $ = cheerio.load(
|
|
341
|
+
renderComponent('header', {
|
|
342
|
+
...EXAMPLE_HEADER_BASIC,
|
|
343
|
+
mastheadLogo: {
|
|
344
|
+
multipleLogos: {
|
|
345
|
+
logo1: {
|
|
346
|
+
logoImage: '<img src="a-logo.svg">',
|
|
347
|
+
logoURL: '#0',
|
|
348
|
+
},
|
|
349
|
+
},
|
|
350
|
+
},
|
|
351
|
+
}),
|
|
352
|
+
);
|
|
353
|
+
|
|
354
|
+
expect($('.ons-header__org-logo-link').attr('href')).toBe('#0');
|
|
355
|
+
});
|
|
356
|
+
|
|
357
|
+
it('when multiple images are provided all show', () => {
|
|
358
|
+
const $ = cheerio.load(
|
|
359
|
+
renderComponent('header', {
|
|
360
|
+
...EXAMPLE_HEADER_BASIC,
|
|
361
|
+
mastheadLogo: {
|
|
362
|
+
multipleLogos: {
|
|
363
|
+
logo1: {
|
|
364
|
+
logoImage: '<img src="a-logo.svg">',
|
|
365
|
+
},
|
|
366
|
+
logo2: {
|
|
367
|
+
logoImage: '<img src="a-second-logo.svg">',
|
|
368
|
+
},
|
|
369
|
+
logo3: {
|
|
370
|
+
logoImage: '<img src="a-third-logo.svg">',
|
|
371
|
+
},
|
|
372
|
+
},
|
|
373
|
+
},
|
|
374
|
+
}),
|
|
375
|
+
);
|
|
376
|
+
|
|
377
|
+
expect($('.ons-header__org-logo--multi img').attr('src')).toBe('a-logo.svg');
|
|
378
|
+
expect($('.ons-header__org-logo--multi img:nth-of-type(2)').attr('src')).toBe('a-second-logo.svg');
|
|
379
|
+
expect($('.ons-header__org-logo--multi img:nth-of-type(3)').attr('src')).toBe('a-third-logo.svg');
|
|
380
|
+
});
|
|
381
|
+
|
|
382
|
+
it('renders multiple logos even when small/large parameters are used', () => {
|
|
383
|
+
const $ = cheerio.load(
|
|
384
|
+
renderComponent('header', {
|
|
385
|
+
...EXAMPLE_HEADER_BASIC,
|
|
386
|
+
mastheadLogo: {
|
|
387
|
+
small: '<img src="small-logo.svg">',
|
|
388
|
+
large: '<img src="big-logo.svg">',
|
|
389
|
+
multipleLogos: {
|
|
390
|
+
logo1: {
|
|
391
|
+
logoImage: '<img src="a-logo.svg">',
|
|
392
|
+
},
|
|
393
|
+
logo2: {
|
|
394
|
+
logoImage: '<img src="a-second-logo.svg">',
|
|
395
|
+
},
|
|
396
|
+
logo3: {
|
|
397
|
+
logoImage: '<img src="a-third-logo.svg">',
|
|
398
|
+
},
|
|
399
|
+
},
|
|
400
|
+
},
|
|
401
|
+
}),
|
|
402
|
+
);
|
|
403
|
+
expect($('.ons-header__org-logo--large').attr('src')).toBe(undefined);
|
|
404
|
+
expect($('.ons-header__org-logo--multi img').attr('src')).toBe('a-logo.svg');
|
|
405
|
+
});
|
|
406
|
+
});
|
|
416
407
|
|
|
417
|
-
|
|
418
|
-
|
|
408
|
+
it('displays the `title` text', () => {
|
|
409
|
+
const $ = cheerio.load(renderComponent('header', EXAMPLE_HEADER_BASIC));
|
|
419
410
|
|
|
420
|
-
|
|
421
|
-
|
|
411
|
+
expect($('.ons-header__title').text()).toBe('Header title');
|
|
412
|
+
});
|
|
422
413
|
|
|
423
|
-
|
|
424
|
-
|
|
414
|
+
it('displays the `title` using the default tag', () => {
|
|
415
|
+
const $ = cheerio.load(renderComponent('header', EXAMPLE_HEADER_BASIC));
|
|
425
416
|
|
|
426
|
-
|
|
427
|
-
|
|
417
|
+
expect($('.ons-header__title')[0].tagName).toBe('div');
|
|
418
|
+
});
|
|
428
419
|
|
|
429
|
-
|
|
430
|
-
|
|
420
|
+
it('displays the `title` using a H1 if `titleAsH1`', () => {
|
|
421
|
+
const $ = cheerio.load(renderComponent('header', { ...EXAMPLE_HEADER_BASIC, titleAsH1: true }));
|
|
431
422
|
|
|
432
|
-
|
|
433
|
-
|
|
423
|
+
expect($('.ons-header__title')[0].tagName).toBe('h1');
|
|
424
|
+
});
|
|
434
425
|
|
|
435
|
-
|
|
436
|
-
|
|
426
|
+
it('has the correct `title` link', () => {
|
|
427
|
+
const $ = cheerio.load(renderComponent('header', { ...EXAMPLE_HEADER_BASIC, titleUrl: '#0' }));
|
|
437
428
|
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
renderComponent('header', {
|
|
441
|
-
...EXAMPLE_HEADER_BASIC,
|
|
442
|
-
titleLogo: { large: 'another-logo.svg', classes: 'custom-class another-custom-class' },
|
|
443
|
-
}),
|
|
444
|
-
);
|
|
429
|
+
expect($('.ons-header__title-link').attr('href')).toBe('#0');
|
|
430
|
+
});
|
|
445
431
|
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
432
|
+
it('has the provided large title logo', () => {
|
|
433
|
+
const $ = cheerio.load(
|
|
434
|
+
renderComponent('header', { ...EXAMPLE_HEADER_BASIC, titleLogo: { large: '<img src="another-logo.svg">' } }),
|
|
435
|
+
);
|
|
449
436
|
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
renderComponent('header', {
|
|
453
|
-
...EXAMPLE_HEADER_BASIC,
|
|
454
|
-
titleLogo: { large: '<img src="another-logo.svg">', small: '<img src="another-logo-small.svg">' },
|
|
455
|
-
}),
|
|
456
|
-
);
|
|
437
|
+
expect($('.ons-header__title-logo--large img').attr('src')).toBe('another-logo.svg');
|
|
438
|
+
});
|
|
457
439
|
|
|
458
|
-
|
|
459
|
-
|
|
440
|
+
it('has the provided title logo custom classes', () => {
|
|
441
|
+
const $ = cheerio.load(
|
|
442
|
+
renderComponent('header', {
|
|
443
|
+
...EXAMPLE_HEADER_BASIC,
|
|
444
|
+
titleLogo: { large: 'another-logo.svg', classes: 'custom-class another-custom-class' },
|
|
445
|
+
}),
|
|
446
|
+
);
|
|
460
447
|
|
|
461
|
-
|
|
462
|
-
|
|
448
|
+
expect($('.ons-header__title-logo--large').hasClass('custom-class')).toBe(true);
|
|
449
|
+
expect($('.ons-header__title-logo--large').hasClass('another-custom-class')).toBe(true);
|
|
450
|
+
});
|
|
463
451
|
|
|
464
|
-
|
|
465
|
-
|
|
452
|
+
it('has the provided small title logo', () => {
|
|
453
|
+
const $ = cheerio.load(
|
|
454
|
+
renderComponent('header', {
|
|
455
|
+
...EXAMPLE_HEADER_BASIC,
|
|
456
|
+
titleLogo: { large: '<img src="another-logo.svg">', small: '<img src="another-logo-small.svg">' },
|
|
457
|
+
}),
|
|
458
|
+
);
|
|
466
459
|
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
const buttonSpy = faker.spy('button', { suppressOutput: true });
|
|
470
|
-
|
|
471
|
-
faker.renderComponent('header', {
|
|
472
|
-
...EXAMPLE_HEADER_BASIC,
|
|
473
|
-
button: {
|
|
474
|
-
text: 'Save and sign out',
|
|
475
|
-
name: 'button-name',
|
|
476
|
-
attributes: {
|
|
477
|
-
a: 'b',
|
|
478
|
-
},
|
|
479
|
-
url: '#0',
|
|
480
|
-
},
|
|
481
|
-
});
|
|
482
|
-
|
|
483
|
-
expect(buttonSpy.occurrences).toContainEqual({
|
|
484
|
-
text: 'Save and sign out',
|
|
485
|
-
classes: 'ons-u-d-no@xxs@m',
|
|
486
|
-
variants: 'ghost',
|
|
487
|
-
name: 'button-name',
|
|
488
|
-
attributes: {
|
|
489
|
-
a: 'b',
|
|
490
|
-
},
|
|
491
|
-
url: '#0',
|
|
492
|
-
iconType: 'exit',
|
|
493
|
-
iconPosition: 'after',
|
|
494
|
-
});
|
|
495
|
-
});
|
|
460
|
+
expect($('.ons-header__title-logo--small img').attr('src')).toBe('another-logo-small.svg');
|
|
461
|
+
});
|
|
496
462
|
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
renderComponent('header', {
|
|
500
|
-
...EXAMPLE_HEADER_BASIC,
|
|
501
|
-
}),
|
|
502
|
-
);
|
|
463
|
+
it('displays the `description` text', () => {
|
|
464
|
+
const $ = cheerio.load(renderComponent('header', { ...EXAMPLE_HEADER_BASIC, description: 'Header description' }));
|
|
503
465
|
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
});
|
|
466
|
+
expect($('.ons-header__description').text()).toBe('Header description');
|
|
467
|
+
});
|
|
507
468
|
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
469
|
+
it('renders a button with expected parameters', () => {
|
|
470
|
+
const faker = templateFaker();
|
|
471
|
+
const buttonSpy = faker.spy('button', { suppressOutput: true });
|
|
472
|
+
|
|
473
|
+
faker.renderComponent('header', {
|
|
474
|
+
...EXAMPLE_HEADER_BASIC,
|
|
475
|
+
button: {
|
|
476
|
+
text: 'Save and sign out',
|
|
477
|
+
name: 'button-name',
|
|
478
|
+
attributes: {
|
|
479
|
+
a: 'b',
|
|
480
|
+
},
|
|
481
|
+
url: '#0',
|
|
482
|
+
},
|
|
483
|
+
});
|
|
484
|
+
|
|
485
|
+
expect(buttonSpy.occurrences).toContainEqual({
|
|
486
|
+
text: 'Save and sign out',
|
|
487
|
+
classes: 'ons-u-d-no@xxs@m',
|
|
488
|
+
variants: 'ghost',
|
|
489
|
+
name: 'button-name',
|
|
490
|
+
attributes: {
|
|
491
|
+
a: 'b',
|
|
492
|
+
},
|
|
493
|
+
url: '#0',
|
|
494
|
+
iconType: 'exit',
|
|
495
|
+
iconPosition: 'after',
|
|
496
|
+
});
|
|
497
|
+
});
|
|
524
498
|
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
499
|
+
it('has gutterless class if there is no button present', () => {
|
|
500
|
+
const $ = cheerio.load(
|
|
501
|
+
renderComponent('header', {
|
|
502
|
+
...EXAMPLE_HEADER_BASIC,
|
|
503
|
+
}),
|
|
504
|
+
);
|
|
528
505
|
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
badge: 'Example',
|
|
533
|
-
html: 'Example content with a <a href="#">link</a>',
|
|
534
|
-
},
|
|
535
|
-
});
|
|
536
|
-
|
|
537
|
-
expect(phaseSpy.occurrences).toContainEqual({
|
|
538
|
-
badge: 'Example',
|
|
539
|
-
html: 'Example content with a <a href="#">link</a>',
|
|
540
|
-
});
|
|
541
|
-
});
|
|
506
|
+
const titleGridDiv = $('.ons-header__main .ons-container .ons-grid');
|
|
507
|
+
expect($(titleGridDiv).hasClass('ons-grid--gutterless')).toBe(true);
|
|
508
|
+
});
|
|
542
509
|
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
510
|
+
it('has does not have gutterless class if there is a button present', () => {
|
|
511
|
+
const $ = cheerio.load(
|
|
512
|
+
renderComponent('header', {
|
|
513
|
+
...EXAMPLE_HEADER_BASIC,
|
|
514
|
+
button: {
|
|
515
|
+
text: 'Save and sign out',
|
|
516
|
+
url: '#0',
|
|
517
|
+
iconType: 'exit',
|
|
518
|
+
iconPosition: 'after',
|
|
519
|
+
},
|
|
520
|
+
}),
|
|
521
|
+
);
|
|
522
|
+
|
|
523
|
+
const titleGridDiv = $('.ons-header__main .ons-container .ons-grid');
|
|
524
|
+
expect($(titleGridDiv).hasClass('ons-grid--gutterless')).toBe(false);
|
|
525
|
+
});
|
|
558
526
|
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
...EXAMPLE_HEADER_BASIC,
|
|
563
|
-
fullWidth: true,
|
|
564
|
-
phase: {
|
|
565
|
-
badge: 'Example',
|
|
566
|
-
html: 'Example content with a <a href="#">link</a>',
|
|
567
|
-
},
|
|
568
|
-
}),
|
|
569
|
-
);
|
|
570
|
-
|
|
571
|
-
const phaseContainer = $('.ons-phase-banner .ons-container');
|
|
572
|
-
expect($(phaseContainer).hasClass('ons-container--full-width')).toBe(true);
|
|
573
|
-
});
|
|
574
|
-
});
|
|
527
|
+
it('renders the phase banner with expected parameters', () => {
|
|
528
|
+
const faker = templateFaker();
|
|
529
|
+
const phaseSpy = faker.spy('phase-banner');
|
|
575
530
|
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
531
|
+
faker.renderComponent('header', {
|
|
532
|
+
...EXAMPLE_HEADER_BASIC,
|
|
533
|
+
phase: {
|
|
534
|
+
badge: 'Example',
|
|
535
|
+
html: 'Example content with a <a href="#">link</a>',
|
|
536
|
+
},
|
|
537
|
+
});
|
|
579
538
|
|
|
580
|
-
|
|
581
|
-
|
|
539
|
+
expect(phaseSpy.occurrences).toContainEqual({
|
|
540
|
+
badge: 'Example',
|
|
541
|
+
html: 'Example content with a <a href="#">link</a>',
|
|
542
|
+
});
|
|
543
|
+
});
|
|
582
544
|
|
|
583
|
-
|
|
584
|
-
|
|
545
|
+
it('renders the phase banner in the correct container if `wide`', () => {
|
|
546
|
+
const $ = cheerio.load(
|
|
547
|
+
renderComponent('header', {
|
|
548
|
+
...EXAMPLE_HEADER_BASIC,
|
|
549
|
+
wide: true,
|
|
550
|
+
phase: {
|
|
551
|
+
badge: 'Example',
|
|
552
|
+
html: 'Example content with a <a href="#">link</a>',
|
|
553
|
+
},
|
|
554
|
+
}),
|
|
555
|
+
);
|
|
556
|
+
|
|
557
|
+
const phaseContainer = $('.ons-phase-banner .ons-container');
|
|
558
|
+
expect($(phaseContainer).hasClass('ons-container--wide')).toBe(true);
|
|
559
|
+
});
|
|
585
560
|
|
|
586
|
-
|
|
561
|
+
it('renders the phase banner in the correct container if `fullWidth`', () => {
|
|
562
|
+
const $ = cheerio.load(
|
|
563
|
+
renderComponent('header', {
|
|
564
|
+
...EXAMPLE_HEADER_BASIC,
|
|
565
|
+
fullWidth: true,
|
|
566
|
+
phase: {
|
|
567
|
+
badge: 'Example',
|
|
568
|
+
html: 'Example content with a <a href="#">link</a>',
|
|
569
|
+
},
|
|
570
|
+
}),
|
|
571
|
+
);
|
|
572
|
+
|
|
573
|
+
const phaseContainer = $('.ons-phase-banner .ons-container');
|
|
574
|
+
expect($(phaseContainer).hasClass('ons-container--full-width')).toBe(true);
|
|
575
|
+
});
|
|
587
576
|
});
|
|
588
577
|
|
|
589
|
-
|
|
590
|
-
|
|
578
|
+
describe('mode: with service links', () => {
|
|
579
|
+
it('has the correct display class when multiple links are provided', () => {
|
|
580
|
+
const $ = cheerio.load(renderComponent('header', EXAMPLE_HEADER_SERVICE_LINKS_MULTIPLE));
|
|
591
581
|
|
|
592
|
-
|
|
593
|
-
|
|
582
|
+
expect($('.ons-header__links .ons-grid__col').hasClass('ons-u-d-no@xxs@m')).toBe(true);
|
|
583
|
+
});
|
|
594
584
|
|
|
595
|
-
|
|
596
|
-
|
|
585
|
+
it('has the correct display class when a single link and language is provided', () => {
|
|
586
|
+
const $ = cheerio.load(
|
|
587
|
+
renderComponent('header', { ...EXAMPLE_HEADER_SERVICE_LINKS_SINGLE, ...EXAMPLE_HEADER_LANGUAGE_CONFIG }),
|
|
588
|
+
);
|
|
597
589
|
|
|
598
|
-
|
|
599
|
-
|
|
590
|
+
expect($('.ons-header__links .ons-grid__col').hasClass('ons-u-d-no@xxs@xs')).toBe(true);
|
|
591
|
+
});
|
|
600
592
|
|
|
601
|
-
|
|
602
|
-
|
|
593
|
+
it('does not have the display class when only single link is provided', () => {
|
|
594
|
+
const $ = cheerio.load(renderComponent('header', EXAMPLE_HEADER_SERVICE_LINKS_SINGLE));
|
|
603
595
|
|
|
604
|
-
|
|
605
|
-
|
|
596
|
+
expect($('.ons-header__links .ons-grid__col').hasClass('ons-u-d-no@xxs@')).toBe(false);
|
|
597
|
+
});
|
|
606
598
|
|
|
607
|
-
|
|
608
|
-
|
|
599
|
+
it('has the provided custom class', () => {
|
|
600
|
+
const $ = cheerio.load(renderComponent('header', EXAMPLE_HEADER_SERVICE_LINKS_SINGLE));
|
|
609
601
|
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
});
|
|
602
|
+
expect($('.ons-header-service-nav--main').hasClass('custom-class')).toBe(true);
|
|
603
|
+
});
|
|
613
604
|
|
|
614
|
-
|
|
615
|
-
|
|
605
|
+
it('has the provided `aria-label`', () => {
|
|
606
|
+
const $ = cheerio.load(renderComponent('header', EXAMPLE_HEADER_SERVICE_LINKS_SINGLE));
|
|
616
607
|
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
});
|
|
608
|
+
expect($('.ons-header-service-nav--main').attr('aria-label')).toBe('Services menu');
|
|
609
|
+
});
|
|
620
610
|
|
|
621
|
-
|
|
622
|
-
|
|
611
|
+
it('has the text for each list item', () => {
|
|
612
|
+
const $ = cheerio.load(renderComponent('header', EXAMPLE_HEADER_SERVICE_LIST_ITEMS));
|
|
623
613
|
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
614
|
+
const values = mapAll($('.ons-header-service-nav--main .ons-header-service-nav__item'), (node) => node.text().trim());
|
|
615
|
+
expect(values).toEqual(['Title 1', 'Title 2', 'Title 3']);
|
|
616
|
+
});
|
|
627
617
|
|
|
628
|
-
|
|
629
|
-
|
|
618
|
+
it('has the link text for each list item', () => {
|
|
619
|
+
const $ = cheerio.load(renderComponent('header', EXAMPLE_HEADER_SERVICE_LINKS_MULTIPLE));
|
|
630
620
|
|
|
631
|
-
|
|
632
|
-
|
|
621
|
+
const values = mapAll($('.ons-header-service-nav--main .ons-header-service-nav__link'), (node) => node.text().trim());
|
|
622
|
+
expect(values).toEqual(['Title 1', 'Title 2', 'Title 3']);
|
|
623
|
+
});
|
|
633
624
|
|
|
634
|
-
|
|
635
|
-
|
|
625
|
+
it('has the link href for each list item', () => {
|
|
626
|
+
const $ = cheerio.load(renderComponent('header', EXAMPLE_HEADER_SERVICE_LINKS_MULTIPLE));
|
|
636
627
|
|
|
637
|
-
|
|
638
|
-
|
|
628
|
+
const values = mapAll($('.ons-header-service-nav--main .ons-header-service-nav__link'), (node) => node.attr('href'));
|
|
629
|
+
expect(values).toEqual(['#1', '#2', '#3']);
|
|
630
|
+
});
|
|
639
631
|
|
|
640
|
-
|
|
641
|
-
|
|
632
|
+
it('has the provided custom class', () => {
|
|
633
|
+
const $ = cheerio.load(renderComponent('header', EXAMPLE_HEADER_SERVICE_LINKS_SINGLE));
|
|
642
634
|
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
});
|
|
635
|
+
expect($('.ons-header-service-nav--main').hasClass('custom-class')).toBe(true);
|
|
636
|
+
});
|
|
646
637
|
|
|
647
|
-
|
|
648
|
-
|
|
638
|
+
it('has the provided `aria-label` for the list for mobile', () => {
|
|
639
|
+
const $ = cheerio.load(renderComponent('header', EXAMPLE_HEADER_SERVICE_LINKS_SINGLE));
|
|
649
640
|
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
});
|
|
641
|
+
expect($('.ons-header-service-nav--mobile').attr('aria-label')).toBe('Services menu');
|
|
642
|
+
});
|
|
653
643
|
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
const buttonSpy = faker.spy('button', { suppressOutput: true });
|
|
644
|
+
it('has the link text for each list item for mobile', () => {
|
|
645
|
+
const $ = cheerio.load(renderComponent('header', EXAMPLE_HEADER_SERVICE_LINKS_MULTIPLE));
|
|
657
646
|
|
|
658
|
-
|
|
647
|
+
const values = mapAll($('.ons-header-service-nav--mobile .ons-header-service-nav__link'), (node) => node.text().trim());
|
|
648
|
+
expect(values).toEqual(['Title 1', 'Title 2', 'Title 3']);
|
|
649
|
+
});
|
|
659
650
|
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
classes: 'ons-u-d-no ons-js-toggle-services',
|
|
663
|
-
type: 'button',
|
|
664
|
-
variants: ['mobile', 'text-link'],
|
|
665
|
-
attributes: {
|
|
666
|
-
'aria-label': 'Toggle services menu',
|
|
667
|
-
'aria-controls': 'service-links',
|
|
668
|
-
'aria-expanded': 'false',
|
|
669
|
-
},
|
|
670
|
-
});
|
|
671
|
-
});
|
|
651
|
+
it('has the link href for each list item for mobile', () => {
|
|
652
|
+
const $ = cheerio.load(renderComponent('header', EXAMPLE_HEADER_SERVICE_LINKS_MULTIPLE));
|
|
672
653
|
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
654
|
+
const values = mapAll($('.ons-header-service-nav--mobile .ons-header-service-nav__link'), (node) => node.attr('href'));
|
|
655
|
+
expect(values).toEqual(['#1', '#2', '#3']);
|
|
656
|
+
});
|
|
676
657
|
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
{
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
658
|
+
it('renders a button with expected parameters', () => {
|
|
659
|
+
const faker = templateFaker();
|
|
660
|
+
const buttonSpy = faker.spy('button', { suppressOutput: true });
|
|
661
|
+
|
|
662
|
+
faker.renderComponent('header', EXAMPLE_HEADER_SERVICE_LINKS_MULTIPLE);
|
|
663
|
+
|
|
664
|
+
expect(buttonSpy.occurrences).toContainEqual({
|
|
665
|
+
text: 'Menu',
|
|
666
|
+
classes: 'ons-u-d-no ons-js-toggle-services',
|
|
667
|
+
type: 'button',
|
|
668
|
+
variants: ['mobile', 'text-link'],
|
|
669
|
+
attributes: {
|
|
670
|
+
'aria-label': 'Toggle services menu',
|
|
671
|
+
'aria-controls': 'service-links',
|
|
672
|
+
'aria-expanded': 'false',
|
|
673
|
+
},
|
|
674
|
+
});
|
|
675
|
+
});
|
|
694
676
|
|
|
695
|
-
|
|
696
|
-
|
|
677
|
+
it('renders a button with correct variant if `internal`', () => {
|
|
678
|
+
const faker = templateFaker();
|
|
679
|
+
const buttonSpy = faker.spy('button');
|
|
680
|
+
|
|
681
|
+
faker.renderComponent('header', {
|
|
682
|
+
...EXAMPLE_HEADER_BASIC,
|
|
683
|
+
variants: 'internal',
|
|
684
|
+
serviceLinks: {
|
|
685
|
+
...EXAMPLE_SERVICE_LINKS_CONFIG,
|
|
686
|
+
itemsList: [
|
|
687
|
+
{
|
|
688
|
+
title: 'Title',
|
|
689
|
+
url: '#0',
|
|
690
|
+
},
|
|
691
|
+
{
|
|
692
|
+
title: 'Title 2',
|
|
693
|
+
url: '#0',
|
|
694
|
+
},
|
|
695
|
+
],
|
|
696
|
+
},
|
|
697
|
+
});
|
|
697
698
|
|
|
698
|
-
|
|
699
|
-
|
|
699
|
+
expect(buttonSpy.occurrences[0]).toHaveProperty('variants', ['mobile', 'text-link', 'text-link-inverse']);
|
|
700
|
+
});
|
|
700
701
|
|
|
701
|
-
|
|
702
|
-
|
|
702
|
+
it('does not render a button for a single services link', () => {
|
|
703
|
+
const $ = cheerio.load(renderComponent('header', EXAMPLE_HEADER_SERVICE_LINKS_SINGLE));
|
|
703
704
|
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
const iconsSpy = faker.spy('icon');
|
|
705
|
+
expect($('.ons-js-toggle-services').length).toBe(0);
|
|
706
|
+
});
|
|
707
707
|
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
708
|
+
it('has the correct list item icon', () => {
|
|
709
|
+
const faker = templateFaker();
|
|
710
|
+
const iconsSpy = faker.spy('icon');
|
|
711
|
+
|
|
712
|
+
faker.renderComponent('header', {
|
|
713
|
+
...EXAMPLE_HEADER_BASIC,
|
|
714
|
+
serviceLinks: {
|
|
715
|
+
...EXAMPLE_SERVICE_LINKS_CONFIG,
|
|
716
|
+
itemsList: [
|
|
717
|
+
{
|
|
718
|
+
title: 'Title 1',
|
|
719
|
+
iconType: 'check',
|
|
720
|
+
},
|
|
721
|
+
],
|
|
722
|
+
},
|
|
723
|
+
});
|
|
720
724
|
|
|
721
|
-
|
|
725
|
+
expect(iconsSpy.occurrences[2].iconType).toBe('check');
|
|
726
|
+
});
|
|
722
727
|
});
|
|
723
|
-
});
|
|
724
|
-
|
|
725
|
-
describe('mode: with language selector', () => {
|
|
726
|
-
it('displays the language selector with expected parameters', () => {
|
|
727
|
-
const faker = templateFaker();
|
|
728
|
-
const languageSpy = faker.spy('language-selector', { suppressOutput: true });
|
|
729
728
|
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
729
|
+
describe('mode: with language selector', () => {
|
|
730
|
+
it('displays the language selector with expected parameters', () => {
|
|
731
|
+
const faker = templateFaker();
|
|
732
|
+
const languageSpy = faker.spy('language-selector', { suppressOutput: true });
|
|
733
|
+
|
|
734
|
+
faker.renderComponent('header', { ...EXAMPLE_HEADER_BASIC, ...EXAMPLE_HEADER_LANGUAGE_CONFIG });
|
|
735
|
+
|
|
736
|
+
expect(languageSpy.occurrences).toContainEqual({
|
|
737
|
+
languages: [
|
|
738
|
+
{
|
|
739
|
+
url: '#0',
|
|
740
|
+
ISOCode: 'en',
|
|
741
|
+
text: 'English',
|
|
742
|
+
buttonAriaLabel: 'Language selector. Current language: English',
|
|
743
|
+
chooseLanguage: 'Choose language',
|
|
744
|
+
current: true,
|
|
745
|
+
},
|
|
746
|
+
{
|
|
747
|
+
url: '#0',
|
|
748
|
+
ISOCode: 'cy',
|
|
749
|
+
text: 'Cymraeg',
|
|
750
|
+
buttonAriaLabel: 'Dewisydd iaith. Iaith gyfredol: Cymraeg',
|
|
751
|
+
chooseLanguage: 'Dewiswch iaith',
|
|
752
|
+
current: false,
|
|
753
|
+
},
|
|
754
|
+
],
|
|
755
|
+
});
|
|
756
|
+
});
|
|
752
757
|
});
|
|
753
|
-
});
|
|
754
758
|
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
759
|
+
describe('mode: with navigation', () => {
|
|
760
|
+
it('renders the navigation with expected parameters', () => {
|
|
761
|
+
const faker = templateFaker();
|
|
762
|
+
const navigationSpy = faker.spy('navigation', { suppressOutput: true });
|
|
763
|
+
|
|
764
|
+
faker.renderComponent('header', { ...EXAMPLE_HEADER_BASIC, ...EXAMPLE_HEADER_NAVIGATION_CONFIG });
|
|
765
|
+
|
|
766
|
+
expect(navigationSpy.occurrences[0]).toEqual({
|
|
767
|
+
navigation: {
|
|
768
|
+
id: 'main-nav',
|
|
769
|
+
ariaLabel: 'Main menu',
|
|
770
|
+
currentPath: '#home',
|
|
771
|
+
itemsList: [
|
|
772
|
+
{
|
|
773
|
+
title: 'Home',
|
|
774
|
+
url: '#home',
|
|
775
|
+
},
|
|
776
|
+
{
|
|
777
|
+
title: 'Guidance',
|
|
778
|
+
url: '#0',
|
|
779
|
+
},
|
|
780
|
+
],
|
|
781
|
+
toggleNavigationButton: {
|
|
782
|
+
text: 'Menu',
|
|
783
|
+
ariaLabel: 'Toggle main menu',
|
|
784
|
+
},
|
|
785
|
+
},
|
|
786
|
+
title: 'Header title',
|
|
787
|
+
});
|
|
788
|
+
});
|
|
785
789
|
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
790
|
+
it('renders a button to toggle the menu on mobile', () => {
|
|
791
|
+
const faker = templateFaker();
|
|
792
|
+
const buttonSpy = faker.spy('button');
|
|
789
793
|
|
|
790
|
-
|
|
794
|
+
faker.renderComponent('header', { ...EXAMPLE_HEADER_BASIC, ...EXAMPLE_HEADER_NAVIGATION_CONFIG });
|
|
791
795
|
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
796
|
+
expect(buttonSpy.occurrences[0]).toEqual({
|
|
797
|
+
text: 'Menu',
|
|
798
|
+
classes: 'ons-u-ml-xs ons-u-d-no ons-js-navigation-button ons-u-d-no@l',
|
|
799
|
+
variants: ['mobile', 'ghost'],
|
|
800
|
+
attributes: {
|
|
801
|
+
'aria-label': 'Toggle main menu',
|
|
802
|
+
'aria-controls': 'main-nav',
|
|
803
|
+
'aria-expanded': 'false',
|
|
804
|
+
},
|
|
805
|
+
});
|
|
806
|
+
});
|
|
803
807
|
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
808
|
+
it('renders a button to toggle the search on mobile', () => {
|
|
809
|
+
const faker = templateFaker();
|
|
810
|
+
const buttonSpy = faker.spy('button');
|
|
811
|
+
|
|
812
|
+
faker.renderComponent('header', {
|
|
813
|
+
...EXAMPLE_HEADER_BASIC,
|
|
814
|
+
navigation: {
|
|
815
|
+
id: 'main-nav',
|
|
816
|
+
ariaLabel: 'Main menu',
|
|
817
|
+
currentPath: '#home',
|
|
818
|
+
itemsList: [
|
|
819
|
+
{
|
|
820
|
+
title: 'Home',
|
|
821
|
+
url: '#home',
|
|
822
|
+
},
|
|
823
|
+
{
|
|
824
|
+
title: 'Guidance',
|
|
825
|
+
url: '#0',
|
|
826
|
+
},
|
|
827
|
+
],
|
|
828
|
+
toggleNavigationButton: {
|
|
829
|
+
text: 'Menu',
|
|
830
|
+
ariaLabel: 'Toggle main menu',
|
|
831
|
+
},
|
|
832
|
+
},
|
|
833
|
+
siteSearchAutosuggest: {},
|
|
834
|
+
});
|
|
835
|
+
|
|
836
|
+
expect(buttonSpy.occurrences[0]).toEqual({
|
|
837
|
+
text: 'Search',
|
|
838
|
+
classes: 'ons-btn--search ons-u-ml-xs ons-u-d-no ons-js-toggle-search',
|
|
839
|
+
variants: ['small', 'ghost'],
|
|
840
|
+
iconType: 'search',
|
|
841
|
+
iconPosition: 'only',
|
|
842
|
+
attributes: {
|
|
843
|
+
'aria-label': 'Toggle search',
|
|
844
|
+
'aria-controls': 'ons-site-search',
|
|
845
|
+
'aria-expanded': 'false',
|
|
846
|
+
},
|
|
847
|
+
});
|
|
848
|
+
});
|
|
845
849
|
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
850
|
+
it('renders the navigation in the correct container if `wide`', () => {
|
|
851
|
+
const $ = cheerio.load(
|
|
852
|
+
renderComponent('header', {
|
|
853
|
+
...EXAMPLE_HEADER_BASIC,
|
|
854
|
+
wide: true,
|
|
855
|
+
...EXAMPLE_HEADER_NAVIGATION_CONFIG,
|
|
856
|
+
}),
|
|
857
|
+
);
|
|
858
|
+
|
|
859
|
+
const navContainer = $('.ons-navigation-wrapper .ons-container');
|
|
860
|
+
expect($(navContainer).hasClass('ons-container--wide')).toBe(true);
|
|
861
|
+
});
|
|
858
862
|
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
863
|
+
it('renders the navigation in the correct container if `fullWidth`', () => {
|
|
864
|
+
const $ = cheerio.load(
|
|
865
|
+
renderComponent('header', {
|
|
866
|
+
...EXAMPLE_HEADER_BASIC,
|
|
867
|
+
fullWidth: true,
|
|
868
|
+
...EXAMPLE_HEADER_NAVIGATION_CONFIG,
|
|
869
|
+
}),
|
|
870
|
+
);
|
|
871
|
+
|
|
872
|
+
const navContainer = $('.ons-navigation-wrapper .ons-container');
|
|
873
|
+
expect($(navContainer).hasClass('ons-container--full-width')).toBe(true);
|
|
874
|
+
});
|
|
871
875
|
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
876
|
+
it('renders the sub-navigation in the correct container if `wide`', () => {
|
|
877
|
+
const $ = cheerio.load(
|
|
878
|
+
renderComponent('header', {
|
|
879
|
+
...EXAMPLE_HEADER_BASIC,
|
|
880
|
+
wide: true,
|
|
881
|
+
...EXAMPLE_HEADER_NAVIGATION_WITH_SUBNAVIGATION_CONFIG,
|
|
882
|
+
}),
|
|
883
|
+
);
|
|
884
|
+
|
|
885
|
+
const subNavContainer = $('.ons-navigation--sub .ons-container');
|
|
886
|
+
expect($(subNavContainer).hasClass('ons-container--wide')).toBe(true);
|
|
887
|
+
});
|
|
884
888
|
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
889
|
+
it('renders the sub-navigation in the correct container if `fullWidth`', () => {
|
|
890
|
+
const $ = cheerio.load(
|
|
891
|
+
renderComponent('header', {
|
|
892
|
+
...EXAMPLE_HEADER_BASIC,
|
|
893
|
+
fullWidth: true,
|
|
894
|
+
...EXAMPLE_HEADER_NAVIGATION_WITH_SUBNAVIGATION_CONFIG,
|
|
895
|
+
}),
|
|
896
|
+
);
|
|
897
|
+
|
|
898
|
+
const subNavContainer = $('.ons-navigation--sub .ons-container');
|
|
899
|
+
expect($(subNavContainer).hasClass('ons-container--full-width')).toBe(true);
|
|
900
|
+
});
|
|
896
901
|
});
|
|
897
|
-
});
|
|
898
902
|
});
|
|
899
903
|
|
|
900
904
|
describe('mode: with site search autosuggest', () => {
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
});
|
|
935
|
-
|
|
936
|
-
describe('when the user inputs text', () => {
|
|
937
|
-
let $; // Initialize a Cheerio instance
|
|
938
|
-
|
|
939
|
-
const mockData = [
|
|
940
|
-
{ en: 'England' },
|
|
941
|
-
{ en: 'Wales' },
|
|
942
|
-
{ en: 'Scotland' },
|
|
943
|
-
{ en: 'United States of America' },
|
|
944
|
-
{ en: 'United States Virgin Islands' },
|
|
945
|
-
{ en: 'Åland Islands' },
|
|
946
|
-
];
|
|
947
|
-
|
|
948
|
-
beforeEach(() => {
|
|
949
|
-
$ = cheerio.load(
|
|
950
|
-
renderComponent('header', {
|
|
951
|
-
...EXAMPLE_HEADER_NAVIGATION_WITH_SITESEARCHAUTOSUGGEST,
|
|
952
|
-
autosuggestData: mockData,
|
|
953
|
-
}),
|
|
954
|
-
);
|
|
905
|
+
it('renders the search with expected parameters', () => {
|
|
906
|
+
const faker = templateFaker();
|
|
907
|
+
const buttonSpy = faker.spy('autosuggest');
|
|
908
|
+
|
|
909
|
+
faker.renderComponent('header', EXAMPLE_HEADER_NAVIGATION_WITH_SITESEARCHAUTOSUGGEST);
|
|
910
|
+
|
|
911
|
+
expect(buttonSpy.occurrences[0]).toEqual({
|
|
912
|
+
ariaLimitedResults: 'Type more characters to improve your search',
|
|
913
|
+
minChars: 3,
|
|
914
|
+
language: 'en-gb',
|
|
915
|
+
ariaMinChars: 'Enter 3 or more characters for suggestions.',
|
|
916
|
+
ariaNResults: 'There are {n} suggestions available.',
|
|
917
|
+
ariaOneResult: 'There is one suggestion available.',
|
|
918
|
+
ariaResultsLabel: 'Country suggestions',
|
|
919
|
+
ariaYouHaveSelected: 'You have selected',
|
|
920
|
+
containerClasses: 'ons-autosuggest--header',
|
|
921
|
+
id: 'ons-site-search',
|
|
922
|
+
input: {
|
|
923
|
+
accessiblePlaceholder: true,
|
|
924
|
+
autocomplete: 'off',
|
|
925
|
+
classes: 'ons-input-search ons-input-search--icon',
|
|
926
|
+
label: {
|
|
927
|
+
classes: 'ons-u-pl-m ons-label--white',
|
|
928
|
+
id: 'ons-site-search-label',
|
|
929
|
+
text: 'label',
|
|
930
|
+
},
|
|
931
|
+
},
|
|
932
|
+
instructions: 'Use up and down keys to navigate.',
|
|
933
|
+
moreResults: 'Continue entering to improve suggestions',
|
|
934
|
+
noResults: 'No suggestions found.',
|
|
935
|
+
resultsTitle: 'Suggestions',
|
|
936
|
+
typeMore: 'Continue entering to get suggestions',
|
|
937
|
+
});
|
|
955
938
|
});
|
|
956
939
|
|
|
957
|
-
|
|
958
|
-
|
|
940
|
+
describe('when the user inputs text', () => {
|
|
941
|
+
let $; // Initialize a Cheerio instance
|
|
942
|
+
|
|
943
|
+
const mockData = [
|
|
944
|
+
{ en: 'England' },
|
|
945
|
+
{ en: 'Wales' },
|
|
946
|
+
{ en: 'Scotland' },
|
|
947
|
+
{ en: 'United States of America' },
|
|
948
|
+
{ en: 'United States Virgin Islands' },
|
|
949
|
+
{ en: 'Åland Islands' },
|
|
950
|
+
];
|
|
951
|
+
|
|
952
|
+
beforeEach(() => {
|
|
953
|
+
$ = cheerio.load(
|
|
954
|
+
renderComponent('header', {
|
|
955
|
+
...EXAMPLE_HEADER_NAVIGATION_WITH_SITESEARCHAUTOSUGGEST,
|
|
956
|
+
autosuggestData: mockData,
|
|
957
|
+
}),
|
|
958
|
+
);
|
|
959
|
+
});
|
|
959
960
|
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
expect(suggestionCount).toBe(0);
|
|
963
|
-
}, 20);
|
|
964
|
-
});
|
|
961
|
+
it('does not show suggestions when input length < minimum characters', () => {
|
|
962
|
+
$('.ons-js-autosuggest-input').val('En');
|
|
965
963
|
|
|
966
|
-
|
|
967
|
-
|
|
964
|
+
setTimeout(() => {
|
|
965
|
+
const suggestionCount = $('.ons-autosuggest__option').length;
|
|
966
|
+
expect(suggestionCount).toBe(0);
|
|
967
|
+
}, 20);
|
|
968
|
+
});
|
|
968
969
|
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
expect(suggestionCount).toBe(1);
|
|
972
|
-
}, 20);
|
|
973
|
-
});
|
|
970
|
+
it('shows suggestions when input length >= minimum characters', () => {
|
|
971
|
+
$('.ons-js-autosuggest-input').val('Eng');
|
|
974
972
|
|
|
975
|
-
|
|
976
|
-
|
|
973
|
+
setTimeout(() => {
|
|
974
|
+
const suggestionCount = $('.ons-autosuggest__option').length;
|
|
975
|
+
expect(suggestionCount).toBe(1);
|
|
976
|
+
}, 20);
|
|
977
|
+
});
|
|
978
|
+
|
|
979
|
+
it('gets the language if set', () => {
|
|
980
|
+
$('.ons-js-autosuggest-input').val('Eng');
|
|
977
981
|
|
|
978
|
-
|
|
979
|
-
|
|
982
|
+
const autosuggestElement = $('.ons-js-autosuggest').attr('data-lang');
|
|
983
|
+
expect(autosuggestElement).toBe('en-gb');
|
|
984
|
+
});
|
|
980
985
|
});
|
|
981
|
-
});
|
|
982
986
|
});
|