@ons/design-system 50.0.0 → 52.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/README.md +35 -15
  2. package/components/access-code/_macro.njk +1 -1
  3. package/components/access-code/_macro.spec.js +162 -0
  4. package/components/access-code/uac.spec.js +26 -0
  5. package/components/accordion/_macro.spec.js +224 -0
  6. package/components/accordion/accordion.spec.js +134 -0
  7. package/components/address-input/_macro.njk +1 -1
  8. package/components/address-input/_macro.spec.js +465 -0
  9. package/components/address-input/autosuggest.address.js +5 -4
  10. package/components/address-input/autosuggest.address.setter.js +9 -3
  11. package/components/address-input/autosuggest.address.spec.js +733 -0
  12. package/components/address-output/_macro.njk +6 -6
  13. package/components/address-output/_macro.spec.js +122 -0
  14. package/components/autosuggest/_macro.njk +1 -1
  15. package/components/autosuggest/_macro.spec.js +229 -0
  16. package/components/autosuggest/autosuggest.helpers.js +2 -3
  17. package/components/autosuggest/autosuggest.helpers.spec.js +85 -0
  18. package/components/autosuggest/autosuggest.js +4 -2
  19. package/components/autosuggest/autosuggest.spec.js +625 -0
  20. package/components/autosuggest/autosuggest.ui.js +6 -2
  21. package/components/breadcrumbs/_macro.spec.js +129 -0
  22. package/components/button/_macro.njk +5 -5
  23. package/components/button/_macro.spec.js +446 -0
  24. package/components/button/button.spec.js +290 -0
  25. package/components/call-to-action/_macro.njk +3 -1
  26. package/components/call-to-action/_macro.spec.js +52 -0
  27. package/components/card/_macro.njk +26 -19
  28. package/components/card/_macro.spec.js +261 -0
  29. package/components/char-check-limit/_macro.spec.js +73 -0
  30. package/components/char-check-limit/character-check.spec.js +196 -0
  31. package/components/char-check-limit/character-limit.js +1 -1
  32. package/components/checkboxes/_checkbox-macro.spec.js +419 -0
  33. package/components/checkboxes/_macro.njk +1 -3
  34. package/components/checkboxes/_macro.spec.js +306 -0
  35. package/components/checkboxes/checkbox-with-autoselect.js +2 -1
  36. package/components/checkboxes/checkboxes.spec.js +208 -0
  37. package/components/code-highlight/_macro.spec.js +56 -0
  38. package/components/code-highlight/code-highlight.spec.js +18 -0
  39. package/components/collapsible/_macro.spec.js +204 -0
  40. package/components/collapsible/collapsible.js +2 -1
  41. package/components/collapsible/collapsible.spec.js +236 -0
  42. package/components/content-pagination/_macro.spec.js +199 -0
  43. package/components/cookies-banner/_macro.njk +1 -1
  44. package/components/cookies-banner/_macro.spec.js +171 -0
  45. package/components/cookies-banner/cookies-banner.spec.js +90 -0
  46. package/components/date-input/_macro.njk +6 -3
  47. package/components/date-input/_macro.spec.js +286 -0
  48. package/components/document-list/_macro.njk +3 -5
  49. package/components/document-list/_macro.spec.js +491 -0
  50. package/components/download-resources/download-resources.spec.js +540 -0
  51. package/components/duration/_macro.njk +7 -6
  52. package/components/duration/_macro.spec.js +251 -0
  53. package/components/error/_macro.spec.js +97 -0
  54. package/components/external-link/_macro.spec.js +60 -0
  55. package/components/feedback/_macro.njk +5 -3
  56. package/components/feedback/_macro.spec.js +122 -0
  57. package/components/field/_macro.njk +2 -2
  58. package/components/field/_macro.spec.js +97 -0
  59. package/components/fieldset/_macro.njk +3 -3
  60. package/components/fieldset/_macro.spec.js +173 -0
  61. package/components/footer/_macro.njk +12 -49
  62. package/components/footer/_macro.spec.js +549 -0
  63. package/components/header/_macro.njk +3 -3
  64. package/components/header/_macro.spec.js +562 -0
  65. package/components/hero/_hero.scss +0 -3
  66. package/components/hero/_macro.njk +4 -4
  67. package/components/hero/_macro.spec.js +224 -0
  68. package/components/icons/_macro.njk +15 -15
  69. package/components/icons/_macro.spec.js +140 -0
  70. package/components/images/_macro.njk +1 -1
  71. package/components/images/_macro.spec.js +121 -0
  72. package/components/input/_input-type.scss +12 -5
  73. package/components/input/_macro.njk +4 -5
  74. package/components/input/_macro.spec.js +658 -0
  75. package/components/label/_macro.spec.js +189 -0
  76. package/components/language-selector/_macro.spec.js +129 -0
  77. package/components/lists/_list.scss +4 -0
  78. package/components/lists/_macro.njk +4 -7
  79. package/components/lists/_macro.spec.js +618 -0
  80. package/components/message/_macro.spec.js +137 -0
  81. package/components/message-list/_macro.njk +7 -7
  82. package/components/message-list/_macro.spec.js +159 -0
  83. package/components/metadata/_macro.spec.js +167 -0
  84. package/components/modal/_macro.njk +6 -6
  85. package/components/modal/_macro.spec.js +87 -0
  86. package/components/modal/modal.js +0 -16
  87. package/components/modal/modal.spec.js +59 -0
  88. package/components/mutually-exclusive/_macro.njk +2 -2
  89. package/components/mutually-exclusive/_macro.spec.js +184 -0
  90. package/components/mutually-exclusive/mutually-exclusive.checkboxes.spec.js +203 -0
  91. package/components/mutually-exclusive/mutually-exclusive.date.spec.js +142 -0
  92. package/components/mutually-exclusive/mutually-exclusive.duration.spec.js +141 -0
  93. package/components/mutually-exclusive/mutually-exclusive.email.spec.js +117 -0
  94. package/components/mutually-exclusive/mutually-exclusive.multiple-options.checkboxes.spec.js +213 -0
  95. package/components/mutually-exclusive/mutually-exclusive.number.spec.js +125 -0
  96. package/components/mutually-exclusive/mutually-exclusive.textarea.spec.js +131 -0
  97. package/components/navigation/_macro.njk +6 -6
  98. package/components/navigation/_macro.spec.js +327 -0
  99. package/components/navigation/navigation.dom.js +1 -1
  100. package/components/navigation/navigation.spec.js +232 -0
  101. package/components/pagination/_macro.njk +1 -1
  102. package/components/pagination/_macro.spec.js +411 -0
  103. package/components/panel/_macro.njk +6 -6
  104. package/components/panel/_macro.spec.js +423 -0
  105. package/components/password/_macro.spec.js +137 -0
  106. package/components/password/password.spec.js +40 -0
  107. package/components/phase-banner/_macro.spec.js +73 -0
  108. package/components/promotional-banner/_macro.spec.js +97 -0
  109. package/components/question/_macro.njk +16 -22
  110. package/components/question/_macro.spec.js +309 -0
  111. package/components/quote/_macro.spec.js +81 -0
  112. package/components/radios/_macro.njk +3 -6
  113. package/components/radios/_macro.spec.js +575 -0
  114. package/components/radios/radios.spec.js +180 -0
  115. package/components/related-content/_macro.njk +1 -0
  116. package/components/related-content/_macro.spec.js +142 -0
  117. package/components/relationships/_macro.spec.js +108 -0
  118. package/components/relationships/relationships.spec.js +84 -0
  119. package/components/reply/_macro.njk +2 -2
  120. package/components/reply/_macro.spec.js +69 -0
  121. package/components/reply/reply.spec.js +78 -0
  122. package/components/search/_macro.njk +14 -12
  123. package/components/search/_macro.spec.js +44 -0
  124. package/components/search/_search.scss +7 -7
  125. package/components/section-navigation/_macro.njk +7 -2
  126. package/components/section-navigation/_macro.spec.js +206 -0
  127. package/components/select/_macro.njk +3 -3
  128. package/components/select/_macro.spec.js +203 -0
  129. package/components/select/select.spec.js +56 -0
  130. package/components/share-page/_macro.njk +2 -2
  131. package/components/share-page/_macro.spec.js +110 -0
  132. package/components/skip-to-content/_macro.spec.js +57 -0
  133. package/components/skip-to-content/skip-to-content.spec.js +44 -0
  134. package/components/status/_macro.spec.js +77 -0
  135. package/components/summary/_macro.njk +5 -5
  136. package/components/summary/_macro.spec.js +472 -0
  137. package/components/table/_macro.njk +2 -2
  138. package/components/table/_macro.spec.js +557 -0
  139. package/components/table/table.spec.js +155 -0
  140. package/components/table-of-contents/_macro.njk +35 -35
  141. package/components/table-of-contents/_macro.spec.js +178 -0
  142. package/components/table-of-contents/toc.js +29 -25
  143. package/components/table-of-contents/toc.spec.js +61 -0
  144. package/components/tabs/_macro.njk +1 -1
  145. package/components/tabs/_macro.spec.js +79 -0
  146. package/components/tabs/tabs.spec.js +162 -0
  147. package/components/text-indent/_macro.spec.js +52 -0
  148. package/components/textarea/_macro.njk +5 -3
  149. package/components/textarea/_macro.spec.js +300 -0
  150. package/components/textarea/textarea.spec.js +98 -0
  151. package/components/timeline/_macro.njk +3 -3
  152. package/components/timeline/_macro.spec.js +81 -0
  153. package/components/timeout-modal/_macro.spec.js +68 -0
  154. package/components/timeout-modal/timeout-modal.spec.js +226 -0
  155. package/components/timeout-panel/_macro.njk +0 -1
  156. package/components/timeout-panel/_macro.spec.js +54 -0
  157. package/components/timeout-panel/timeout-panel.dom.js +1 -2
  158. package/components/timeout-panel/timeout-panel.spec.js +161 -0
  159. package/components/upload/_macro.spec.js +75 -0
  160. package/components/video/_macro.spec.js +34 -0
  161. package/css/census.css +1 -1
  162. package/css/main.css +1 -1
  163. package/js/cookies-settings.spec.js +154 -0
  164. package/package.json +10 -23
  165. package/scripts/main.es5.js +1 -1
  166. package/scripts/main.js +2 -2
@@ -0,0 +1,154 @@
1
+ import { renderComponent, setTestPage } from '../tests/helpers/rendering';
2
+
3
+ const EXAMPLE_COOKIES_SETTINGS_PAGE = `
4
+ ${renderComponent('cookies-banner', {
5
+ statementTitle: 'Tell us whether you accept cookies',
6
+ statementText: 'We use <a href="#0">cookies to collect information</a> about how you use census.gov.uk.',
7
+ confirmationText: 'You’ve accepted all cookies. You can <a href="#0">change your cookie preferences</a> at any time.',
8
+ })}
9
+
10
+ <form data-module="cookie-settings">
11
+ <input type="radio" class="ons-js-radio" name="cookies-settings" value="on">
12
+ <input type="radio" class="ons-js-radio" name="cookies-settings" value="off">
13
+ <input type="radio" class="ons-js-radio" name="cookies-usage" value="on">
14
+ <input type="radio" class="ons-js-radio" name="cookies-usage" value="off">
15
+ <input type="radio" class="ons-js-radio" name="cookies-campaigns" value="on">
16
+ <input type="radio" class="ons-js-radio" name="cookies-campaigns" value="off">
17
+ <button id="submit-button" type="submit">Submit</button>
18
+ </form>
19
+
20
+ <div class="ons-cookies-confirmation-message ons-u-d-no">
21
+ <a class="ons-js-return-link" href="#0">Return to previous page</a>
22
+ </div>
23
+ `;
24
+
25
+ describe('script: cookies-settings', () => {
26
+ beforeEach(async () => {
27
+ const client = await page.target().createCDPSession();
28
+ await client.send('Network.clearBrowserCookies');
29
+ });
30
+
31
+ it('sets a consent cookie by default', async () => {
32
+ await setTestPage('/test', EXAMPLE_COOKIES_SETTINGS_PAGE);
33
+
34
+ const cookies = await page.cookies();
35
+ const ons_cookie_policy = cookies.find(cookie => cookie.name === 'ons_cookie_policy');
36
+ const policy = JSON.parse(ons_cookie_policy.value.replace(/'/g, '"'));
37
+
38
+ expect(policy).toEqual({
39
+ essential: true,
40
+ settings: false,
41
+ usage: false,
42
+ campaigns: false,
43
+ });
44
+ });
45
+
46
+ it('sets all radio buttons to the default values', async () => {
47
+ await setTestPage('/test', EXAMPLE_COOKIES_SETTINGS_PAGE);
48
+
49
+ const cookiesSettingsOffRadio = await page.$eval('input[name=cookies-settings][value=off]', node => node.checked);
50
+ const cookiesUsageOffRadio = await page.$eval('input[name=cookies-usage][value=off]', node => node.checked);
51
+ const cookiesCampaignsOffRadio = await page.$eval('input[name=cookies-campaigns][value=off]', node => node.checked);
52
+
53
+ expect(cookiesSettingsOffRadio).toBe(true);
54
+ expect(cookiesUsageOffRadio).toBe(true);
55
+ expect(cookiesCampaignsOffRadio).toBe(true);
56
+ });
57
+
58
+ it('sets all radios to on from off when accepting cookies', async () => {
59
+ await setTestPage('/test', EXAMPLE_COOKIES_SETTINGS_PAGE);
60
+
61
+ await page.click('.ons-js-accept-cookies');
62
+
63
+ const cookiesSettingsOnRadio = await page.$eval('input[name=cookies-settings][value=on]', node => node.checked);
64
+ const cookiesUsageOnRadio = await page.$eval('input[name=cookies-usage][value=on]', node => node.checked);
65
+ const cookiesCampaignsOnRadio = await page.$eval('input[name=cookies-campaigns][value=on]', node => node.checked);
66
+
67
+ expect(cookiesSettingsOnRadio).toBe(true);
68
+ expect(cookiesUsageOnRadio).toBe(true);
69
+ expect(cookiesCampaignsOnRadio).toBe(true);
70
+ });
71
+
72
+ it.each([['settings'], ['usage'], ['campaigns']])('updates consent cookie when "%s" policy is turned on', async policyName => {
73
+ await setTestPage('/test', EXAMPLE_COOKIES_SETTINGS_PAGE);
74
+
75
+ await page.click(`input[name=cookies-${policyName}][value=on]`);
76
+ await page.click('#submit-button');
77
+
78
+ const cookies = await page.cookies();
79
+ const ons_cookie_policy = cookies.find(cookie => cookie.name === 'ons_cookie_policy');
80
+ const policy = JSON.parse(ons_cookie_policy.value.replace(/'/g, '"'));
81
+
82
+ expect(policy).toHaveProperty(policyName, true);
83
+ });
84
+
85
+ it.each([['settings'], ['usage'], ['campaigns']])(
86
+ 'updates consent cookie when "%s" policy is turned on and then off',
87
+ async policyName => {
88
+ await setTestPage('/test', EXAMPLE_COOKIES_SETTINGS_PAGE);
89
+
90
+ await page.click(`input[name=cookies-${policyName}][value=on]`);
91
+ await page.click('#submit-button');
92
+
93
+ await page.click(`input[name=cookies-${policyName}][value=off]`);
94
+ await page.click('#submit-button');
95
+
96
+ const cookies = await page.cookies();
97
+ const ons_cookie_policy = cookies.find(cookie => cookie.name === 'ons_cookie_policy');
98
+ const policy = JSON.parse(ons_cookie_policy.value.replace(/'/g, '"'));
99
+
100
+ expect(policy).toHaveProperty(policyName, false);
101
+ },
102
+ );
103
+
104
+ it('sets ons_cookie_message_displayed cookie on form submit', async () => {
105
+ await setTestPage('/test', EXAMPLE_COOKIES_SETTINGS_PAGE);
106
+
107
+ const cookiesBefore = await page.cookies();
108
+ const ons_cookie_message_displayed_before = cookiesBefore.find(cookie => cookie.name === 'ons_cookie_message_displayed');
109
+ expect(ons_cookie_message_displayed_before).toBeUndefined();
110
+
111
+ await page.click('#submit-button');
112
+
113
+ const cookiesAfter = await page.cookies();
114
+ const ons_cookie_message_displayed_after = cookiesAfter.find(cookie => cookie.name === 'ons_cookie_message_displayed');
115
+
116
+ expect(ons_cookie_message_displayed_after.value).toBe('true');
117
+ });
118
+
119
+ it('does not hide the cookie banner by default', async () => {
120
+ await setTestPage('/test', EXAMPLE_COOKIES_SETTINGS_PAGE);
121
+
122
+ const displayStyle = await page.$eval('.ons-cookies-banner', node => window.getComputedStyle(node).getPropertyValue('display'));
123
+ expect(displayStyle).not.toBe('none');
124
+ });
125
+
126
+ it('hides the cookie banner on form submit', async () => {
127
+ await setTestPage('/test', EXAMPLE_COOKIES_SETTINGS_PAGE);
128
+
129
+ await page.click('#submit-button');
130
+
131
+ const displayStyle = await page.$eval('.ons-cookies-banner', node => window.getComputedStyle(node).getPropertyValue('display'));
132
+ expect(displayStyle).toBe('none');
133
+ });
134
+
135
+ it('does not show a confirmation message by default', async () => {
136
+ await setTestPage('/test', EXAMPLE_COOKIES_SETTINGS_PAGE);
137
+
138
+ const displayStyle = await page.$eval('.ons-cookies-confirmation-message', node =>
139
+ window.getComputedStyle(node).getPropertyValue('display'),
140
+ );
141
+ expect(displayStyle).toBe('none');
142
+ });
143
+
144
+ it('shows a confirmation message on form submit', async () => {
145
+ await setTestPage('/test', EXAMPLE_COOKIES_SETTINGS_PAGE);
146
+
147
+ await page.click('#submit-button');
148
+
149
+ const displayStyle = await page.$eval('.ons-cookies-confirmation-message', node =>
150
+ window.getComputedStyle(node).getPropertyValue('display'),
151
+ );
152
+ expect(displayStyle).not.toBe('none');
153
+ });
154
+ });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ons/design-system",
3
3
  "description": "ONS Design System built CSS, JS, and Nunjucks templates",
4
- "version": "50.0.0",
4
+ "version": "52.0.0",
5
5
  "main": "index.js",
6
6
  "license": "MIT",
7
7
  "author": {
@@ -10,12 +10,12 @@
10
10
  "scripts": {
11
11
  "start": "gulp start",
12
12
  "watch": "gulp watch",
13
+ "test": "gulp build-assets-for-testing && TEST_PORT=3020 TEST_WITH_PUPPETEER=1 jest '.*\\.spec\\.js'",
14
+ "test:with-log": "yarn test --no-color 2>test.log",
15
+ "test:start-server": "TEST_PORT=3020 gulp start-dev-server",
13
16
  "build": "yarn && yarn tidy-clean && NODE_ENV=production gulp build",
14
17
  "npm-bundle": "NODE_ENV=production yarn tidy-clean && NODE_ENV=production gulp build-package && babel-node ci/generate-npm-package.js",
15
18
  "cdn-bundle": "NODE_ENV=production yarn tidy-clean && NODE_ENV=production gulp build-package && babel-node ci/prepare-templates-for-zip.js",
16
- "test:local": "STYLES=main gulp build-styles && TEST_MODE=esm KARMA_SINGLE_RUN=false karma start ./karma.conf.babel-register.js",
17
- "test": "STYLES=main gulp build-styles && TEST_MODE=nomodule karma start ./karma.conf.babel-register.js && TEST_MODE=esm karma start ./karma.conf.babel-register.js && codecov",
18
- "test:browserstack": "STYLES=main gulp build-styles && TEST_MODE=nomodule TEST_ON_BROWSERSTACK=true karma start ./karma.conf.babel-register.js && TEST_MODE=esm TEST_ON_BROWSERSTACK=true karma start ./karma.conf.babel-register.js",
19
19
  "test-visual": "yarn build && npx percy exec -- babel-node src/tests/visual/percy.snapshots.js",
20
20
  "tidy-clean": "rm -rf build css favicons fonts img components layout scripts coverage scss js",
21
21
  "check-unused": "npx npm-check-unused",
@@ -75,9 +75,8 @@
75
75
  "babelify": "^10.0.0",
76
76
  "browser-sync": "^2.27.3",
77
77
  "browserify": "^17.0.0",
78
- "chai": "^4.3.4",
79
- "chai-as-promised": "^7.1.1",
80
- "chai-spies": "^1.0.0",
78
+ "chalk": "^4.1.2",
79
+ "cheerio": "^1.0.0-rc.10",
81
80
  "codecov": "^3.8.3",
82
81
  "core-js": "^3.21.1",
83
82
  "cssnano": "^4.1.11",
@@ -87,7 +86,6 @@
87
86
  "eslint-config-prettier": "^3.3.0",
88
87
  "eslint-plugin-prettier": "^3.0.0",
89
88
  "express": "^4.17.1",
90
- "fetch-mock": "^9.11.0",
91
89
  "front-matter": "^4.0.2",
92
90
  "fs-extra": "^10.0.0",
93
91
  "fuse.js": "^3.6.1",
@@ -104,26 +102,16 @@
104
102
  "http-server": "^0.12.3",
105
103
  "husky": "^1.2.0",
106
104
  "iframe-resizer": "4.2.11",
105
+ "jest": "^27.5.1",
106
+ "jest-axe": "^6.0.0",
107
+ "jest-puppeteer": "^6.1.0",
107
108
  "js-beautify": "^1.11.0",
108
- "karma": "^6.3.4",
109
- "karma-babel-preprocessor": "^8.0.1",
110
- "karma-browserify": "^8.0.0",
111
- "karma-browserstack-launcher": "^1.6.0",
112
- "karma-chai": "^0.1.0",
113
- "karma-chai-spies": "^0.1.4",
114
- "karma-chrome-launcher": "^3.1.0",
115
- "karma-coverage-istanbul-reporter": "^3.0.3",
116
- "karma-firefox-launcher": "^2.1.1",
117
- "karma-html": "^1.0.5",
118
- "karma-mocha": "^2.0.1",
119
- "karma-mocha-reporter": "^2.2.5",
120
109
  "lighthouse": "^7.5.0",
121
110
  "lint-staged": "^8.1.0",
122
111
  "lodash": "^4.17.21",
123
112
  "marked": "^2.1.3",
124
113
  "mdn-polyfills": "^5.14.0",
125
114
  "minimist": "^1.2.5",
126
- "mocha": "8.1.3",
127
115
  "normalize.css": "^8.0.1",
128
116
  "nunjucks": "^3.2.3",
129
117
  "postcss": "^8.3.5",
@@ -131,8 +119,7 @@
131
119
  "prepend-file": "^1.3.1",
132
120
  "prettier": "^1.15.2",
133
121
  "prismjs": "1.24.0",
134
- "proxyquireify": "^3.2.1",
135
- "puppeteer": "^5.3.1",
122
+ "puppeteer": "^13.5.1",
136
123
  "remark-cli": "^9.0.0",
137
124
  "remark-lint": "^8.0.0",
138
125
  "remark-preset-lint-recommended": "^5.0.0",