@defra/forms-engine-plugin 0.0.2 → 0.0.4

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 (330) hide show
  1. package/.public/assets/fonts/bold-affa96571d-v2.woff +0 -0
  2. package/.public/assets/fonts/bold-b542beb274-v2.woff2 +0 -0
  3. package/.public/assets/fonts/light-94a07e06a1-v2.woff2 +0 -0
  4. package/.public/assets/fonts/light-f591b13f7d-v2.woff +0 -0
  5. package/.public/assets/images/favicon.ico +0 -0
  6. package/.public/assets/images/favicon.svg +1 -0
  7. package/.public/assets/images/govuk-crest.svg +1 -0
  8. package/.public/assets/images/govuk-icon-180.png +0 -0
  9. package/.public/assets/images/govuk-icon-192.png +0 -0
  10. package/.public/assets/images/govuk-icon-512.png +0 -0
  11. package/.public/assets/images/govuk-icon-mask.svg +1 -0
  12. package/.public/assets/images/govuk-opengraph-image.png +0 -0
  13. package/.public/assets/manifest.json +39 -0
  14. package/.public/assets-manifest.json +24 -0
  15. package/.public/javascripts/application.0fd8c18.min.js +3 -0
  16. package/.public/javascripts/application.0fd8c18.min.js.LICENSE.txt +58 -0
  17. package/.public/javascripts/application.0fd8c18.min.js.map +1 -0
  18. package/.public/javascripts/file-upload.b2f18f5.min.js +2 -0
  19. package/.public/javascripts/file-upload.b2f18f5.min.js.map +1 -0
  20. package/.public/javascripts/vendor/accessible-autocomplete.275d332.min.js +2 -0
  21. package/.public/javascripts/vendor/accessible-autocomplete.275d332.min.js.map +1 -0
  22. package/.public/stylesheets/application.e340021.min.css +14 -0
  23. package/.public/stylesheets/application.e340021.min.css.map +1 -0
  24. package/.server/server/plugins/nunjucks/environment.js +3 -3
  25. package/.server/server/plugins/nunjucks/environment.js.map +1 -1
  26. package/package.json +6 -2
  27. package/.browserslistrc +0 -16
  28. package/.editorconfig +0 -9
  29. package/.eslintrc.cjs +0 -266
  30. package/.github/dependabot.yml +0 -85
  31. package/.github/workflows/check-pull-request.yml +0 -209
  32. package/.github/workflows/pr-notifier.yml +0 -98
  33. package/.github/workflows/publish.yml +0 -111
  34. package/.husky/pre-commit +0 -1
  35. package/.lintstagedrc.js +0 -4
  36. package/.nvmrc +0 -1
  37. package/.prettierignore +0 -8
  38. package/.prettierrc.cjs +0 -26
  39. package/Dockerfile +0 -61
  40. package/Procfile +0 -1
  41. package/babel.config.cjs +0 -55
  42. package/compose/aws.env +0 -4
  43. package/compose/start-localstack.sh +0 -26
  44. package/docker-compose.yaml +0 -86
  45. package/globals.d.ts +0 -1
  46. package/jest.config.cjs +0 -54
  47. package/jest.environment.js +0 -4
  48. package/jest.setup.cjs +0 -14
  49. package/postcss.config.js +0 -26
  50. package/sonar-project.properties +0 -17
  51. package/src/client/javascripts/application.js +0 -87
  52. package/src/client/javascripts/file-upload.js +0 -386
  53. package/src/client/stylesheets/_code.scss +0 -33
  54. package/src/client/stylesheets/_govuk-frontend.scss +0 -4
  55. package/src/client/stylesheets/_prose.scss +0 -56
  56. package/src/client/stylesheets/_service-banner.scss +0 -24
  57. package/src/client/stylesheets/_summary-list.scss +0 -28
  58. package/src/client/stylesheets/_tag-env.scss +0 -24
  59. package/src/client/stylesheets/application.scss +0 -14
  60. package/src/common/cookies.js +0 -58
  61. package/src/common/cookies.test.js +0 -23
  62. package/src/common/types.js +0 -5
  63. package/src/config/index.ts +0 -271
  64. package/src/index.ts +0 -31
  65. package/src/server/common/helpers/logging/logger-options.test.ts +0 -50
  66. package/src/server/common/helpers/logging/logger-options.ts +0 -46
  67. package/src/server/common/helpers/logging/logger.ts +0 -7
  68. package/src/server/common/helpers/logging/request-logger.ts +0 -9
  69. package/src/server/common/helpers/logging/request-tracing.js +0 -10
  70. package/src/server/common/helpers/redis-client.js +0 -70
  71. package/src/server/constants.js +0 -1
  72. package/src/server/forms/README.md +0 -10
  73. package/src/server/forms/components.json +0 -1015
  74. package/src/server/forms/report-a-terrorist.json +0 -270
  75. package/src/server/forms/runner-components-test.json +0 -365
  76. package/src/server/forms/test.json +0 -581
  77. package/src/server/index.test.ts +0 -582
  78. package/src/server/index.ts +0 -140
  79. package/src/server/plugins/blankie.test.ts +0 -73
  80. package/src/server/plugins/blankie.ts +0 -48
  81. package/src/server/plugins/crumb.ts +0 -20
  82. package/src/server/plugins/engine/README.md +0 -87
  83. package/src/server/plugins/engine/components/AutocompleteField.test.ts +0 -294
  84. package/src/server/plugins/engine/components/AutocompleteField.ts +0 -49
  85. package/src/server/plugins/engine/components/CheckboxesField.test.ts +0 -379
  86. package/src/server/plugins/engine/components/CheckboxesField.ts +0 -106
  87. package/src/server/plugins/engine/components/ComponentBase.ts +0 -97
  88. package/src/server/plugins/engine/components/ComponentCollection.ts +0 -278
  89. package/src/server/plugins/engine/components/DatePartsField.test.ts +0 -822
  90. package/src/server/plugins/engine/components/DatePartsField.ts +0 -264
  91. package/src/server/plugins/engine/components/Details.test.ts +0 -49
  92. package/src/server/plugins/engine/components/Details.ts +0 -30
  93. package/src/server/plugins/engine/components/EmailAddressField.test.ts +0 -395
  94. package/src/server/plugins/engine/components/EmailAddressField.ts +0 -55
  95. package/src/server/plugins/engine/components/FileUploadField.test.ts +0 -778
  96. package/src/server/plugins/engine/components/FileUploadField.ts +0 -262
  97. package/src/server/plugins/engine/components/FormComponent.ts +0 -249
  98. package/src/server/plugins/engine/components/Html.test.ts +0 -48
  99. package/src/server/plugins/engine/components/Html.ts +0 -29
  100. package/src/server/plugins/engine/components/InsetText.test.ts +0 -48
  101. package/src/server/plugins/engine/components/InsetText.ts +0 -27
  102. package/src/server/plugins/engine/components/List.test.ts +0 -76
  103. package/src/server/plugins/engine/components/List.ts +0 -72
  104. package/src/server/plugins/engine/components/ListFormComponent.ts +0 -140
  105. package/src/server/plugins/engine/components/MonthYearField.test.ts +0 -567
  106. package/src/server/plugins/engine/components/MonthYearField.ts +0 -222
  107. package/src/server/plugins/engine/components/MultilineTextField.test.ts +0 -558
  108. package/src/server/plugins/engine/components/MultilineTextField.ts +0 -138
  109. package/src/server/plugins/engine/components/NumberField.test.ts +0 -701
  110. package/src/server/plugins/engine/components/NumberField.ts +0 -163
  111. package/src/server/plugins/engine/components/RadiosField.test.ts +0 -288
  112. package/src/server/plugins/engine/components/RadiosField.ts +0 -24
  113. package/src/server/plugins/engine/components/SelectField.test.ts +0 -288
  114. package/src/server/plugins/engine/components/SelectField.ts +0 -47
  115. package/src/server/plugins/engine/components/SelectionControlField.ts +0 -43
  116. package/src/server/plugins/engine/components/TelephoneNumberField.test.ts +0 -356
  117. package/src/server/plugins/engine/components/TelephoneNumberField.ts +0 -67
  118. package/src/server/plugins/engine/components/TextField.test.ts +0 -489
  119. package/src/server/plugins/engine/components/TextField.ts +0 -96
  120. package/src/server/plugins/engine/components/UkAddressField.test.ts +0 -623
  121. package/src/server/plugins/engine/components/UkAddressField.ts +0 -172
  122. package/src/server/plugins/engine/components/YesNoField.test.ts +0 -248
  123. package/src/server/plugins/engine/components/YesNoField.ts +0 -31
  124. package/src/server/plugins/engine/components/constants.ts +0 -1
  125. package/src/server/plugins/engine/components/helpers.ts +0 -330
  126. package/src/server/plugins/engine/components/index.ts +0 -24
  127. package/src/server/plugins/engine/components/types.ts +0 -117
  128. package/src/server/plugins/engine/configureEnginePlugin.ts +0 -47
  129. package/src/server/plugins/engine/helpers.test.ts +0 -791
  130. package/src/server/plugins/engine/helpers.ts +0 -379
  131. package/src/server/plugins/engine/index.ts +0 -7
  132. package/src/server/plugins/engine/models/FormModel.test.ts +0 -42
  133. package/src/server/plugins/engine/models/FormModel.ts +0 -443
  134. package/src/server/plugins/engine/models/RepeatingSummaryViewModel.ts +0 -0
  135. package/src/server/plugins/engine/models/Section.ts +0 -0
  136. package/src/server/plugins/engine/models/SummaryViewModel.test.ts +0 -209
  137. package/src/server/plugins/engine/models/SummaryViewModel.ts +0 -220
  138. package/src/server/plugins/engine/models/index.ts +0 -2
  139. package/src/server/plugins/engine/models/types.ts +0 -114
  140. package/src/server/plugins/engine/outputFormatters/human/v1.test.ts +0 -143
  141. package/src/server/plugins/engine/outputFormatters/human/v1.ts +0 -73
  142. package/src/server/plugins/engine/outputFormatters/index.test.ts +0 -17
  143. package/src/server/plugins/engine/outputFormatters/index.ts +0 -44
  144. package/src/server/plugins/engine/outputFormatters/machine/v1.test.ts +0 -229
  145. package/src/server/plugins/engine/outputFormatters/machine/v1.ts +0 -140
  146. package/src/server/plugins/engine/outputFormatters/machine/v2.test.ts +0 -229
  147. package/src/server/plugins/engine/outputFormatters/machine/v2.ts +0 -153
  148. package/src/server/plugins/engine/pageControllers/FileUploadPageController.test.ts +0 -1108
  149. package/src/server/plugins/engine/pageControllers/FileUploadPageController.ts +0 -446
  150. package/src/server/plugins/engine/pageControllers/PageController.test.ts +0 -205
  151. package/src/server/plugins/engine/pageControllers/PageController.ts +0 -176
  152. package/src/server/plugins/engine/pageControllers/QuestionPageController.test.ts +0 -1264
  153. package/src/server/plugins/engine/pageControllers/QuestionPageController.ts +0 -561
  154. package/src/server/plugins/engine/pageControllers/README.md +0 -28
  155. package/src/server/plugins/engine/pageControllers/RepeatPageController.test.ts +0 -264
  156. package/src/server/plugins/engine/pageControllers/RepeatPageController.ts +0 -458
  157. package/src/server/plugins/engine/pageControllers/StartPageController.ts +0 -18
  158. package/src/server/plugins/engine/pageControllers/StatusPageController.ts +0 -50
  159. package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +0 -261
  160. package/src/server/plugins/engine/pageControllers/TerminalController.test.ts +0 -28
  161. package/src/server/plugins/engine/pageControllers/TerminalPageController.ts +0 -19
  162. package/src/server/plugins/engine/pageControllers/helpers.test.ts +0 -198
  163. package/src/server/plugins/engine/pageControllers/helpers.ts +0 -101
  164. package/src/server/plugins/engine/pageControllers/index.ts +0 -10
  165. package/src/server/plugins/engine/pageControllers/validationOptions.ts +0 -89
  166. package/src/server/plugins/engine/plugin.ts +0 -673
  167. package/src/server/plugins/engine/services/formSubmissionService.js +0 -46
  168. package/src/server/plugins/engine/services/formsService.js +0 -46
  169. package/src/server/plugins/engine/services/formsService.test.js +0 -90
  170. package/src/server/plugins/engine/services/index.js +0 -3
  171. package/src/server/plugins/engine/services/notifyService.test.ts +0 -132
  172. package/src/server/plugins/engine/services/notifyService.ts +0 -64
  173. package/src/server/plugins/engine/services/uploadService.js +0 -60
  174. package/src/server/plugins/engine/types.ts +0 -315
  175. package/src/server/plugins/engine/views/components/autocompletefield.html +0 -5
  176. package/src/server/plugins/engine/views/components/checkboxesfield.html +0 -5
  177. package/src/server/plugins/engine/views/components/datepartsfield.html +0 -5
  178. package/src/server/plugins/engine/views/components/details.html +0 -6
  179. package/src/server/plugins/engine/views/components/emailaddressfield.html +0 -5
  180. package/src/server/plugins/engine/views/components/fileuploadfield-key.html +0 -8
  181. package/src/server/plugins/engine/views/components/fileuploadfield-value.html +0 -3
  182. package/src/server/plugins/engine/views/components/fileuploadfield.html +0 -24
  183. package/src/server/plugins/engine/views/components/html.html +0 -3
  184. package/src/server/plugins/engine/views/components/insettext.html +0 -7
  185. package/src/server/plugins/engine/views/components/list.html +0 -36
  186. package/src/server/plugins/engine/views/components/monthyearfield.html +0 -5
  187. package/src/server/plugins/engine/views/components/multilinetextfield.html +0 -10
  188. package/src/server/plugins/engine/views/components/numberfield.html +0 -5
  189. package/src/server/plugins/engine/views/components/radiosfield.html +0 -5
  190. package/src/server/plugins/engine/views/components/selectfield.html +0 -5
  191. package/src/server/plugins/engine/views/components/telephonenumberfield.html +0 -5
  192. package/src/server/plugins/engine/views/components/textfield.html +0 -5
  193. package/src/server/plugins/engine/views/components/ukaddressfield.html +0 -25
  194. package/src/server/plugins/engine/views/components/yesnofield.html +0 -5
  195. package/src/server/plugins/engine/views/file-upload.html +0 -45
  196. package/src/server/plugins/engine/views/index.html +0 -39
  197. package/src/server/plugins/engine/views/item-delete.html +0 -56
  198. package/src/server/plugins/engine/views/partials/components.html +0 -6
  199. package/src/server/plugins/engine/views/partials/conditional-components.html +0 -3
  200. package/src/server/plugins/engine/views/partials/debug.html +0 -44
  201. package/src/server/plugins/engine/views/partials/form.html +0 -15
  202. package/src/server/plugins/engine/views/partials/heading.html +0 -16
  203. package/src/server/plugins/engine/views/partials/preview-banner.html +0 -32
  204. package/src/server/plugins/engine/views/partials/preview-banner.test.js +0 -122
  205. package/src/server/plugins/engine/views/partials/warn-missing-notification-email.html +0 -10
  206. package/src/server/plugins/engine/views/repeat-list-summary.html +0 -53
  207. package/src/server/plugins/errorPages.ts +0 -58
  208. package/src/server/plugins/nunjucks/context.js +0 -88
  209. package/src/server/plugins/nunjucks/context.test.js +0 -142
  210. package/src/server/plugins/nunjucks/enviroment.test.js +0 -201
  211. package/src/server/plugins/nunjucks/environment.js +0 -116
  212. package/src/server/plugins/nunjucks/filters/answer.js +0 -27
  213. package/src/server/plugins/nunjucks/filters/answer.test.js +0 -89
  214. package/src/server/plugins/nunjucks/filters/evaluate.js +0 -21
  215. package/src/server/plugins/nunjucks/filters/field.js +0 -28
  216. package/src/server/plugins/nunjucks/filters/field.test.js +0 -75
  217. package/src/server/plugins/nunjucks/filters/highlight.js +0 -11
  218. package/src/server/plugins/nunjucks/filters/href.js +0 -30
  219. package/src/server/plugins/nunjucks/filters/href.test.js +0 -80
  220. package/src/server/plugins/nunjucks/filters/index.js +0 -8
  221. package/src/server/plugins/nunjucks/filters/inspect.js +0 -15
  222. package/src/server/plugins/nunjucks/filters/page.js +0 -24
  223. package/src/server/plugins/nunjucks/filters/page.test.js +0 -65
  224. package/src/server/plugins/nunjucks/index.js +0 -3
  225. package/src/server/plugins/nunjucks/plugin.js +0 -40
  226. package/src/server/plugins/nunjucks/render.js +0 -42
  227. package/src/server/plugins/nunjucks/types.js +0 -40
  228. package/src/server/plugins/pulse.ts +0 -11
  229. package/src/server/plugins/router.ts +0 -201
  230. package/src/server/plugins/session.ts +0 -28
  231. package/src/server/routes/health.js +0 -13
  232. package/src/server/routes/health.test.js +0 -35
  233. package/src/server/routes/index.test.ts +0 -125
  234. package/src/server/routes/index.ts +0 -2
  235. package/src/server/routes/public.ts +0 -47
  236. package/src/server/routes/types.ts +0 -48
  237. package/src/server/schemas/index.ts +0 -34
  238. package/src/server/secure-context.js +0 -43
  239. package/src/server/services/cacheService.test.ts +0 -276
  240. package/src/server/services/cacheService.ts +0 -131
  241. package/src/server/services/httpService.test.js +0 -491
  242. package/src/server/services/httpService.ts +0 -50
  243. package/src/server/services/index.ts +0 -1
  244. package/src/server/types.ts +0 -54
  245. package/src/server/utils/notify.test.ts +0 -37
  246. package/src/server/utils/notify.ts +0 -50
  247. package/src/server/utils/secure-context/get-trust-store-certs.js +0 -11
  248. package/src/server/utils/secure-context/get-trust-store-certs.test.js +0 -19
  249. package/src/server/utils/utils.js +0 -24
  250. package/src/server/utils/utils.test.js +0 -54
  251. package/src/server/views/404.html +0 -16
  252. package/src/server/views/500.html +0 -19
  253. package/src/server/views/components/debug/macro.njk +0 -3
  254. package/src/server/views/components/debug/template.njk +0 -13
  255. package/src/server/views/components/service-banner/macro.njk +0 -3
  256. package/src/server/views/components/service-banner/template.njk +0 -20
  257. package/src/server/views/components/service-banner/template.test.js +0 -43
  258. package/src/server/views/components/tag-env/macro.njk +0 -3
  259. package/src/server/views/components/tag-env/template.njk +0 -30
  260. package/src/server/views/components/tag-env/template.test.js +0 -66
  261. package/src/server/views/confirmation.html +0 -19
  262. package/src/server/views/help/accessibility-statement.html +0 -58
  263. package/src/server/views/help/cookie-preferences.html +0 -57
  264. package/src/server/views/help/cookies.html +0 -71
  265. package/src/server/views/help/get-support.html +0 -37
  266. package/src/server/views/help/privacy-notice.html +0 -68
  267. package/src/server/views/help/terms-and-conditions.html +0 -83
  268. package/src/server/views/layout.html +0 -199
  269. package/src/server/views/summary.html +0 -50
  270. package/src/typings/hapi/index.d.ts +0 -95
  271. package/src/typings/hapi-tracing/index.d.ts +0 -6
  272. package/src/typings/index.d.ts +0 -3
  273. package/src/typings/joi/index.d.ts +0 -22
  274. package/stylelint.config.js +0 -10
  275. package/test/client/javascripts/file-upload.test.js +0 -1197
  276. package/test/condition/checkboxes.test.js +0 -112
  277. package/test/condition/radios.test.js +0 -112
  278. package/test/condition/text.test.js +0 -103
  279. package/test/fixtures/assets-manifest.json +0 -4
  280. package/test/fixtures/form.js +0 -86
  281. package/test/fixtures/index.js +0 -2
  282. package/test/fixtures/list.js +0 -92
  283. package/test/form/cookies.test.js +0 -338
  284. package/test/form/csrf.test.js +0 -87
  285. package/test/form/definitions/basic.js +0 -101
  286. package/test/form/definitions/blank.js +0 -10
  287. package/test/form/definitions/checkboxes.json +0 -88
  288. package/test/form/definitions/components.json +0 -452
  289. package/test/form/definitions/conditional-reveal.js +0 -140
  290. package/test/form/definitions/conditions-basic.js +0 -187
  291. package/test/form/definitions/conditions-complex.js +0 -338
  292. package/test/form/definitions/conditions-dates.js +0 -78
  293. package/test/form/definitions/conditions-escaping.js +0 -143
  294. package/test/form/definitions/demo-cph-number.js +0 -3099
  295. package/test/form/definitions/feedback.json +0 -45
  296. package/test/form/definitions/fields-optional.js +0 -402
  297. package/test/form/definitions/fields-required.js +0 -402
  298. package/test/form/definitions/file-upload-basic.js +0 -44
  299. package/test/form/definitions/file-upload.js +0 -66
  300. package/test/form/definitions/minimal.js +0 -39
  301. package/test/form/definitions/phase-alpha.json +0 -33
  302. package/test/form/definitions/phase-default.json +0 -26
  303. package/test/form/definitions/radios.json +0 -88
  304. package/test/form/definitions/repeat-mixed.js +0 -54
  305. package/test/form/definitions/repeat.js +0 -70
  306. package/test/form/definitions/status.json +0 -126
  307. package/test/form/definitions/templates.js +0 -183
  308. package/test/form/definitions/test.json +0 -581
  309. package/test/form/definitions/text.json +0 -75
  310. package/test/form/definitions/titles.json +0 -170
  311. package/test/form/definitions.test.js +0 -47
  312. package/test/form/exit-page.test.js +0 -210
  313. package/test/form/feedback.test.js +0 -68
  314. package/test/form/fields-optional.test.js +0 -237
  315. package/test/form/fields-required.test.js +0 -294
  316. package/test/form/file-upload.test.js +0 -313
  317. package/test/form/govuk-notify.test.js +0 -449
  318. package/test/form/journey-basic.test.js +0 -444
  319. package/test/form/persist-files.test.js +0 -227
  320. package/test/form/phase-banner.test.js +0 -71
  321. package/test/form/repeat.test.js +0 -628
  322. package/test/form/summary-submission-email.test.js +0 -95
  323. package/test/form/template.test.js +0 -288
  324. package/test/form/titles.test.js +0 -204
  325. package/test/helpers/component-helpers.js +0 -74
  326. package/test/utils/get-cookie.js +0 -42
  327. package/test/utils/get-form-definitions.js +0 -18
  328. package/tmp.pdf +0 -1
  329. package/tsconfig.json +0 -28
  330. package/webpack.config.js +0 -208
@@ -1,237 +0,0 @@
1
- import { join } from 'node:path'
2
-
3
- import { StatusCodes } from 'http-status-codes'
4
-
5
- import { createServer } from '~/src/server/index.js'
6
- import { getFormMetadata } from '~/src/server/plugins/engine/services/formsService.js'
7
- import * as fixtures from '~/test/fixtures/index.js'
8
- import { renderResponse } from '~/test/helpers/component-helpers.js'
9
- import { getCookie, getCookieHeader } from '~/test/utils/get-cookie.js'
10
-
11
- const basePath = '/fields-optional'
12
-
13
- jest.mock('~/src/server/plugins/engine/services/formsService.js')
14
-
15
- describe('Form fields (optional)', () => {
16
- const journey = [
17
- {
18
- heading1: 'Fields optional',
19
-
20
- paths: {
21
- current: '/components',
22
- next: '/summary'
23
- },
24
-
25
- fields: [
26
- {
27
- name: 'textField',
28
- title: 'Text field',
29
- payload: {
30
- empty: { textField: '' }
31
- }
32
- },
33
- {
34
- title: 'Multiline text field',
35
- value: 'Example multiline text field',
36
- payload: {
37
- empty: { multilineTextField: '' }
38
- }
39
- },
40
- {
41
- title: 'Number field',
42
- payload: {
43
- empty: { numberField: '' }
44
- }
45
- },
46
- {
47
- name: 'datePartsField',
48
- title: 'Date parts field',
49
- payload: {
50
- empty: {
51
- datePartsField__day: '',
52
- datePartsField__month: '',
53
- datePartsField__year: ''
54
- }
55
- }
56
- },
57
- {
58
- name: 'monthYearField',
59
- title: 'Month year field',
60
- payload: {
61
- empty: {
62
- monthYearField__month: '',
63
- monthYearField__year: ''
64
- }
65
- }
66
- },
67
- {
68
- name: 'yesNoField',
69
- title: 'Yes/No field',
70
- payload: {
71
- empty: {}
72
- }
73
- },
74
- {
75
- name: 'emailAddressField',
76
- title: 'Email address field',
77
- payload: {
78
- empty: { emailAddressField: '' }
79
- }
80
- },
81
- {
82
- name: 'telephoneNumberField',
83
- title: 'Telephone number field',
84
- payload: {
85
- empty: { telephoneNumberField: '' }
86
- }
87
- },
88
- {
89
- name: 'addressField',
90
- title: 'Address field',
91
- payload: {
92
- empty: {
93
- addressField__addressLine1: '',
94
- addressField__addressLine2: '',
95
- addressField__town: '',
96
- addressField__postcode: ''
97
- }
98
- }
99
- },
100
- {
101
- name: 'radiosField',
102
- title: 'Radios field',
103
- payload: {
104
- empty: {}
105
- }
106
- },
107
- {
108
- name: 'selectField',
109
- title: 'Select field',
110
- payload: {
111
- empty: { selectField: '' }
112
- }
113
- },
114
- {
115
- name: 'autocompleteField',
116
- title: 'Autocomplete field',
117
- payload: {
118
- empty: { autocompleteField: '' }
119
- }
120
- },
121
- {
122
- name: 'checkboxesSingle',
123
- title: 'Checkboxes field 1',
124
- payload: {
125
- empty: {}
126
- }
127
- },
128
- {
129
- name: 'checkboxesMultiple',
130
- title: 'Checkboxes field 2',
131
- payload: {
132
- empty: {}
133
- }
134
- },
135
- {
136
- name: 'checkboxesSingleNumber',
137
- title: 'Checkboxes field 3 (number)',
138
- payload: {
139
- empty: {}
140
- }
141
- },
142
- {
143
- name: 'checkboxesMultipleNumber',
144
- title: 'Checkboxes field 4 (number)',
145
- payload: {
146
- empty: {}
147
- }
148
- }
149
- ]
150
- }
151
- ]
152
-
153
- /** @type {Server} */
154
- let server
155
-
156
- /** @type {string} */
157
- let csrfToken
158
-
159
- /** @type {ReturnType<typeof getCookieHeader>} */
160
- let headers
161
-
162
- /** @type {BoundFunctions<typeof queries>} */
163
- let container
164
-
165
- // Create server before each test
166
- beforeAll(async () => {
167
- server = await createServer({
168
- formFileName: 'fields-optional.js',
169
- formFilePath: join(import.meta.dirname, 'definitions'),
170
- enforceCsrf: true
171
- })
172
-
173
- await server.initialize()
174
-
175
- // Navigate to start
176
- const response = await server.inject({
177
- url: `${basePath}${journey[0].paths.current}`
178
- })
179
-
180
- // Extract the session cookie
181
- csrfToken = getCookie(response, 'crumb')
182
- headers = getCookieHeader(response, ['session', 'crumb'])
183
- })
184
-
185
- beforeEach(() => {
186
- jest.mocked(getFormMetadata).mockResolvedValue(fixtures.form.metadata)
187
- })
188
-
189
- afterAll(async () => {
190
- await server.stop()
191
- })
192
-
193
- describe.each(journey)(
194
- 'Page: $paths.current',
195
- ({ heading1, paths, fields = [] }) => {
196
- beforeEach(async () => {
197
- ;({ container } = await renderResponse(server, {
198
- url: `${basePath}${paths.current}`,
199
- headers
200
- }))
201
- })
202
-
203
- it('should render the page heading', () => {
204
- const $heading = container.getByRole('heading', {
205
- name: heading1,
206
- level: 1
207
- })
208
-
209
- expect($heading).toBeInTheDocument()
210
- })
211
-
212
- it('should redirect to the next page on submit', async () => {
213
- const payload = {}
214
-
215
- for (const field of fields) {
216
- Object.assign(payload, field.payload.empty)
217
- }
218
-
219
- // Submit form with populated values
220
- const response = await server.inject({
221
- url: `${basePath}${paths.current}`,
222
- method: 'POST',
223
- headers,
224
- payload: { ...payload, crumb: csrfToken }
225
- })
226
-
227
- expect(response.statusCode).toBe(StatusCodes.SEE_OTHER)
228
- expect(response.headers.location).toBe(`${basePath}${paths.next}`)
229
- })
230
- }
231
- )
232
- })
233
-
234
- /**
235
- * @import { Server } from '@hapi/hapi'
236
- * @import { BoundFunctions, queries } from '@testing-library/dom'
237
- */
@@ -1,294 +0,0 @@
1
- import { join } from 'node:path'
2
-
3
- import { within } from '@testing-library/dom'
4
- import { StatusCodes } from 'http-status-codes'
5
-
6
- import { createServer } from '~/src/server/index.js'
7
- import { getFormMetadata } from '~/src/server/plugins/engine/services/formsService.js'
8
- import * as fixtures from '~/test/fixtures/index.js'
9
- import { renderResponse } from '~/test/helpers/component-helpers.js'
10
- import { getCookie, getCookieHeader } from '~/test/utils/get-cookie.js'
11
-
12
- const basePath = '/fields-required'
13
-
14
- jest.mock('~/src/server/plugins/engine/services/formsService.js')
15
-
16
- describe('Form fields (required)', () => {
17
- const journey = [
18
- {
19
- heading1: 'Fields required',
20
-
21
- paths: {
22
- current: '/components',
23
- next: '/summary'
24
- },
25
-
26
- fields: [
27
- {
28
- name: 'textField',
29
- title: 'Text field',
30
- payload: {
31
- empty: { textField: '' },
32
- valid: { textField: 'Example text field' }
33
- }
34
- },
35
- {
36
- title: 'Multiline text field',
37
- value: 'Example multiline text field',
38
- payload: {
39
- empty: { multilineTextField: '' },
40
- valid: { multilineTextField: 'Example multiline text field' }
41
- }
42
- },
43
- {
44
- title: 'Number field',
45
- payload: {
46
- empty: { numberField: '' },
47
- valid: { numberField: '1234' }
48
- }
49
- },
50
- {
51
- name: 'datePartsField',
52
- title: 'Date parts field',
53
- payload: {
54
- empty: {
55
- datePartsField__day: '',
56
- datePartsField__month: '',
57
- datePartsField__year: ''
58
- },
59
- valid: {
60
- datePartsField__day: '31',
61
- datePartsField__month: '12',
62
- datePartsField__year: '2021'
63
- }
64
- }
65
- },
66
- {
67
- name: 'monthYearField',
68
- title: 'Month year field',
69
- payload: {
70
- empty: {
71
- monthYearField__month: '',
72
- monthYearField__year: ''
73
- },
74
- valid: {
75
- monthYearField__month: '12',
76
- monthYearField__year: '2021'
77
- }
78
- }
79
- },
80
- {
81
- name: 'yesNoField',
82
- title: 'Yes/No field',
83
- payload: {
84
- empty: {},
85
- valid: { yesNoField: 'true' }
86
- }
87
- },
88
- {
89
- name: 'emailAddressField',
90
- title: 'Email address field',
91
- payload: {
92
- empty: { emailAddressField: '' },
93
- valid: { emailAddressField: 'defra.helpline@defra.gov.uk' }
94
- }
95
- },
96
- {
97
- name: 'telephoneNumberField',
98
- title: 'Telephone number field',
99
- payload: {
100
- empty: { telephoneNumberField: '' },
101
- valid: { telephoneNumberField: '+447900000000' }
102
- }
103
- },
104
- {
105
- name: 'addressField',
106
- title: 'Address field',
107
- payload: {
108
- empty: {
109
- addressField__addressLine1: '',
110
- addressField__addressLine2: '',
111
- addressField__town: '',
112
- addressField__postcode: ''
113
- },
114
- valid: {
115
- addressField__addressLine1: 'Richard Fairclough House',
116
- addressField__addressLine2: 'Knutsford Road',
117
- addressField__town: 'Warrington',
118
- addressField__postcode: 'WA4 1HT'
119
- }
120
- }
121
- },
122
- {
123
- name: 'radiosField',
124
- title: 'Radios field',
125
- payload: {
126
- empty: {},
127
- valid: { radiosField: 'privateLimitedCompany' }
128
- }
129
- },
130
- {
131
- name: 'selectField',
132
- title: 'Select field',
133
- payload: {
134
- empty: { selectField: '' },
135
- valid: { selectField: '910400158' }
136
- }
137
- },
138
- {
139
- name: 'autocompleteField',
140
- title: 'Autocomplete field',
141
- payload: {
142
- empty: { autocompleteField: '' },
143
- valid: { autocompleteField: '910400184' }
144
- }
145
- },
146
- {
147
- name: 'checkboxesSingle',
148
- title: 'Checkboxes field 1',
149
- payload: {
150
- empty: {},
151
- valid: { checkboxesSingle: 'Arabian' }
152
- }
153
- },
154
- {
155
- name: 'checkboxesMultiple',
156
- title: 'Checkboxes field 2',
157
- payload: {
158
- empty: {},
159
- valid: { checkboxesMultiple: 'Patomine' }
160
- }
161
- },
162
- {
163
- name: 'checkboxesSingleNumber',
164
- title: 'Checkboxes field 3 (number)',
165
- payload: {
166
- empty: {},
167
- valid: { checkboxesSingleNumber: '0' }
168
- }
169
- },
170
- {
171
- name: 'checkboxesMultipleNumber',
172
- title: 'Checkboxes field 4 (number)',
173
- payload: {
174
- empty: {},
175
- valid: { checkboxesMultipleNumber: '1' }
176
- }
177
- }
178
- ]
179
- }
180
- ]
181
-
182
- /** @type {Server} */
183
- let server
184
-
185
- /** @type {string} */
186
- let csrfToken
187
-
188
- /** @type {ReturnType<typeof getCookieHeader>} */
189
- let headers
190
-
191
- /** @type {BoundFunctions<typeof queries>} */
192
- let container
193
-
194
- // Create server before each test
195
- beforeAll(async () => {
196
- server = await createServer({
197
- formFileName: 'fields-required.js',
198
- formFilePath: join(import.meta.dirname, 'definitions'),
199
- enforceCsrf: true
200
- })
201
-
202
- await server.initialize()
203
-
204
- // Navigate to start
205
- const response = await server.inject({
206
- url: `${basePath}${journey[0].paths.current}`
207
- })
208
-
209
- // Extract the session cookie
210
- csrfToken = getCookie(response, 'crumb')
211
- headers = getCookieHeader(response, ['session', 'crumb'])
212
- })
213
-
214
- beforeEach(() => {
215
- jest.mocked(getFormMetadata).mockResolvedValue(fixtures.form.metadata)
216
- })
217
-
218
- afterAll(async () => {
219
- await server.stop()
220
- })
221
-
222
- describe.each(journey)(
223
- 'Page: $paths.current',
224
- ({ heading1, paths, fields = [] }) => {
225
- beforeEach(async () => {
226
- ;({ container } = await renderResponse(server, {
227
- url: `${basePath}${paths.current}`,
228
- headers
229
- }))
230
- })
231
-
232
- it('should render the page heading', () => {
233
- const $heading = container.getByRole('heading', {
234
- name: heading1,
235
- level: 1
236
- })
237
-
238
- expect($heading).toBeInTheDocument()
239
- })
240
-
241
- it('should show errors when invalid on submit', async () => {
242
- const payload = {}
243
-
244
- for (const field of fields) {
245
- Object.assign(payload, field.payload.empty)
246
- }
247
-
248
- // Submit form with empty values
249
- const { container, response } = await renderResponse(server, {
250
- url: `${basePath}${paths.current}`,
251
- method: 'POST',
252
- headers,
253
- payload: { ...payload, crumb: csrfToken }
254
- })
255
-
256
- expect(response.statusCode).toBe(StatusCodes.OK)
257
- expect(response.headers.location).toBeUndefined()
258
-
259
- const $errorSummary = container.getByRole('alert')
260
-
261
- const $heading = within($errorSummary).getByRole('heading', {
262
- name: 'There is a problem',
263
- level: 2
264
- })
265
-
266
- expect($heading).toBeInTheDocument()
267
- })
268
-
269
- it('should redirect to the next page on submit', async () => {
270
- const payload = {}
271
-
272
- for (const field of fields) {
273
- Object.assign(payload, field.payload.valid)
274
- }
275
-
276
- // Submit form with populated values
277
- const response = await server.inject({
278
- url: `${basePath}${paths.current}`,
279
- method: 'POST',
280
- headers,
281
- payload: { ...payload, crumb: csrfToken }
282
- })
283
-
284
- expect(response.statusCode).toBe(StatusCodes.SEE_OTHER)
285
- expect(response.headers.location).toBe(`${basePath}${paths.next}`)
286
- })
287
- }
288
- )
289
- })
290
-
291
- /**
292
- * @import { Server } from '@hapi/hapi'
293
- * @import { BoundFunctions, queries } from '@testing-library/dom'
294
- */