@defra/forms-engine-plugin 0.0.3 → 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 (328) 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/package.json +6 -2
  25. package/.browserslistrc +0 -16
  26. package/.editorconfig +0 -9
  27. package/.eslintrc.cjs +0 -266
  28. package/.github/dependabot.yml +0 -85
  29. package/.github/workflows/check-pull-request.yml +0 -209
  30. package/.github/workflows/pr-notifier.yml +0 -98
  31. package/.github/workflows/publish.yml +0 -111
  32. package/.husky/pre-commit +0 -1
  33. package/.lintstagedrc.js +0 -4
  34. package/.nvmrc +0 -1
  35. package/.prettierignore +0 -8
  36. package/.prettierrc.cjs +0 -26
  37. package/Dockerfile +0 -61
  38. package/Procfile +0 -1
  39. package/babel.config.cjs +0 -55
  40. package/compose/aws.env +0 -4
  41. package/compose/start-localstack.sh +0 -26
  42. package/docker-compose.yaml +0 -86
  43. package/globals.d.ts +0 -1
  44. package/jest.config.cjs +0 -54
  45. package/jest.environment.js +0 -4
  46. package/jest.setup.cjs +0 -14
  47. package/postcss.config.js +0 -26
  48. package/sonar-project.properties +0 -17
  49. package/src/client/javascripts/application.js +0 -87
  50. package/src/client/javascripts/file-upload.js +0 -386
  51. package/src/client/stylesheets/_code.scss +0 -33
  52. package/src/client/stylesheets/_govuk-frontend.scss +0 -4
  53. package/src/client/stylesheets/_prose.scss +0 -56
  54. package/src/client/stylesheets/_service-banner.scss +0 -24
  55. package/src/client/stylesheets/_summary-list.scss +0 -28
  56. package/src/client/stylesheets/_tag-env.scss +0 -24
  57. package/src/client/stylesheets/application.scss +0 -14
  58. package/src/common/cookies.js +0 -58
  59. package/src/common/cookies.test.js +0 -23
  60. package/src/common/types.js +0 -5
  61. package/src/config/index.ts +0 -271
  62. package/src/index.ts +0 -31
  63. package/src/server/common/helpers/logging/logger-options.test.ts +0 -50
  64. package/src/server/common/helpers/logging/logger-options.ts +0 -46
  65. package/src/server/common/helpers/logging/logger.ts +0 -7
  66. package/src/server/common/helpers/logging/request-logger.ts +0 -9
  67. package/src/server/common/helpers/logging/request-tracing.js +0 -10
  68. package/src/server/common/helpers/redis-client.js +0 -70
  69. package/src/server/constants.js +0 -1
  70. package/src/server/forms/README.md +0 -10
  71. package/src/server/forms/components.json +0 -1015
  72. package/src/server/forms/report-a-terrorist.json +0 -270
  73. package/src/server/forms/runner-components-test.json +0 -365
  74. package/src/server/forms/test.json +0 -581
  75. package/src/server/index.test.ts +0 -582
  76. package/src/server/index.ts +0 -140
  77. package/src/server/plugins/blankie.test.ts +0 -73
  78. package/src/server/plugins/blankie.ts +0 -48
  79. package/src/server/plugins/crumb.ts +0 -20
  80. package/src/server/plugins/engine/README.md +0 -87
  81. package/src/server/plugins/engine/components/AutocompleteField.test.ts +0 -294
  82. package/src/server/plugins/engine/components/AutocompleteField.ts +0 -49
  83. package/src/server/plugins/engine/components/CheckboxesField.test.ts +0 -379
  84. package/src/server/plugins/engine/components/CheckboxesField.ts +0 -106
  85. package/src/server/plugins/engine/components/ComponentBase.ts +0 -97
  86. package/src/server/plugins/engine/components/ComponentCollection.ts +0 -278
  87. package/src/server/plugins/engine/components/DatePartsField.test.ts +0 -822
  88. package/src/server/plugins/engine/components/DatePartsField.ts +0 -264
  89. package/src/server/plugins/engine/components/Details.test.ts +0 -49
  90. package/src/server/plugins/engine/components/Details.ts +0 -30
  91. package/src/server/plugins/engine/components/EmailAddressField.test.ts +0 -395
  92. package/src/server/plugins/engine/components/EmailAddressField.ts +0 -55
  93. package/src/server/plugins/engine/components/FileUploadField.test.ts +0 -778
  94. package/src/server/plugins/engine/components/FileUploadField.ts +0 -262
  95. package/src/server/plugins/engine/components/FormComponent.ts +0 -249
  96. package/src/server/plugins/engine/components/Html.test.ts +0 -48
  97. package/src/server/plugins/engine/components/Html.ts +0 -29
  98. package/src/server/plugins/engine/components/InsetText.test.ts +0 -48
  99. package/src/server/plugins/engine/components/InsetText.ts +0 -27
  100. package/src/server/plugins/engine/components/List.test.ts +0 -76
  101. package/src/server/plugins/engine/components/List.ts +0 -72
  102. package/src/server/plugins/engine/components/ListFormComponent.ts +0 -140
  103. package/src/server/plugins/engine/components/MonthYearField.test.ts +0 -567
  104. package/src/server/plugins/engine/components/MonthYearField.ts +0 -222
  105. package/src/server/plugins/engine/components/MultilineTextField.test.ts +0 -558
  106. package/src/server/plugins/engine/components/MultilineTextField.ts +0 -138
  107. package/src/server/plugins/engine/components/NumberField.test.ts +0 -701
  108. package/src/server/plugins/engine/components/NumberField.ts +0 -163
  109. package/src/server/plugins/engine/components/RadiosField.test.ts +0 -288
  110. package/src/server/plugins/engine/components/RadiosField.ts +0 -24
  111. package/src/server/plugins/engine/components/SelectField.test.ts +0 -288
  112. package/src/server/plugins/engine/components/SelectField.ts +0 -47
  113. package/src/server/plugins/engine/components/SelectionControlField.ts +0 -43
  114. package/src/server/plugins/engine/components/TelephoneNumberField.test.ts +0 -356
  115. package/src/server/plugins/engine/components/TelephoneNumberField.ts +0 -67
  116. package/src/server/plugins/engine/components/TextField.test.ts +0 -489
  117. package/src/server/plugins/engine/components/TextField.ts +0 -96
  118. package/src/server/plugins/engine/components/UkAddressField.test.ts +0 -623
  119. package/src/server/plugins/engine/components/UkAddressField.ts +0 -172
  120. package/src/server/plugins/engine/components/YesNoField.test.ts +0 -248
  121. package/src/server/plugins/engine/components/YesNoField.ts +0 -31
  122. package/src/server/plugins/engine/components/constants.ts +0 -1
  123. package/src/server/plugins/engine/components/helpers.ts +0 -330
  124. package/src/server/plugins/engine/components/index.ts +0 -24
  125. package/src/server/plugins/engine/components/types.ts +0 -117
  126. package/src/server/plugins/engine/configureEnginePlugin.ts +0 -47
  127. package/src/server/plugins/engine/helpers.test.ts +0 -791
  128. package/src/server/plugins/engine/helpers.ts +0 -379
  129. package/src/server/plugins/engine/index.ts +0 -7
  130. package/src/server/plugins/engine/models/FormModel.test.ts +0 -42
  131. package/src/server/plugins/engine/models/FormModel.ts +0 -443
  132. package/src/server/plugins/engine/models/RepeatingSummaryViewModel.ts +0 -0
  133. package/src/server/plugins/engine/models/Section.ts +0 -0
  134. package/src/server/plugins/engine/models/SummaryViewModel.test.ts +0 -209
  135. package/src/server/plugins/engine/models/SummaryViewModel.ts +0 -220
  136. package/src/server/plugins/engine/models/index.ts +0 -2
  137. package/src/server/plugins/engine/models/types.ts +0 -114
  138. package/src/server/plugins/engine/outputFormatters/human/v1.test.ts +0 -143
  139. package/src/server/plugins/engine/outputFormatters/human/v1.ts +0 -73
  140. package/src/server/plugins/engine/outputFormatters/index.test.ts +0 -17
  141. package/src/server/plugins/engine/outputFormatters/index.ts +0 -44
  142. package/src/server/plugins/engine/outputFormatters/machine/v1.test.ts +0 -229
  143. package/src/server/plugins/engine/outputFormatters/machine/v1.ts +0 -140
  144. package/src/server/plugins/engine/outputFormatters/machine/v2.test.ts +0 -229
  145. package/src/server/plugins/engine/outputFormatters/machine/v2.ts +0 -153
  146. package/src/server/plugins/engine/pageControllers/FileUploadPageController.test.ts +0 -1108
  147. package/src/server/plugins/engine/pageControllers/FileUploadPageController.ts +0 -446
  148. package/src/server/plugins/engine/pageControllers/PageController.test.ts +0 -205
  149. package/src/server/plugins/engine/pageControllers/PageController.ts +0 -176
  150. package/src/server/plugins/engine/pageControllers/QuestionPageController.test.ts +0 -1264
  151. package/src/server/plugins/engine/pageControllers/QuestionPageController.ts +0 -561
  152. package/src/server/plugins/engine/pageControllers/README.md +0 -28
  153. package/src/server/plugins/engine/pageControllers/RepeatPageController.test.ts +0 -264
  154. package/src/server/plugins/engine/pageControllers/RepeatPageController.ts +0 -458
  155. package/src/server/plugins/engine/pageControllers/StartPageController.ts +0 -18
  156. package/src/server/plugins/engine/pageControllers/StatusPageController.ts +0 -50
  157. package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +0 -261
  158. package/src/server/plugins/engine/pageControllers/TerminalController.test.ts +0 -28
  159. package/src/server/plugins/engine/pageControllers/TerminalPageController.ts +0 -19
  160. package/src/server/plugins/engine/pageControllers/helpers.test.ts +0 -198
  161. package/src/server/plugins/engine/pageControllers/helpers.ts +0 -101
  162. package/src/server/plugins/engine/pageControllers/index.ts +0 -10
  163. package/src/server/plugins/engine/pageControllers/validationOptions.ts +0 -89
  164. package/src/server/plugins/engine/plugin.ts +0 -673
  165. package/src/server/plugins/engine/services/formSubmissionService.js +0 -46
  166. package/src/server/plugins/engine/services/formsService.js +0 -46
  167. package/src/server/plugins/engine/services/formsService.test.js +0 -90
  168. package/src/server/plugins/engine/services/index.js +0 -3
  169. package/src/server/plugins/engine/services/notifyService.test.ts +0 -132
  170. package/src/server/plugins/engine/services/notifyService.ts +0 -64
  171. package/src/server/plugins/engine/services/uploadService.js +0 -60
  172. package/src/server/plugins/engine/types.ts +0 -315
  173. package/src/server/plugins/engine/views/components/autocompletefield.html +0 -5
  174. package/src/server/plugins/engine/views/components/checkboxesfield.html +0 -5
  175. package/src/server/plugins/engine/views/components/datepartsfield.html +0 -5
  176. package/src/server/plugins/engine/views/components/details.html +0 -6
  177. package/src/server/plugins/engine/views/components/emailaddressfield.html +0 -5
  178. package/src/server/plugins/engine/views/components/fileuploadfield-key.html +0 -8
  179. package/src/server/plugins/engine/views/components/fileuploadfield-value.html +0 -3
  180. package/src/server/plugins/engine/views/components/fileuploadfield.html +0 -24
  181. package/src/server/plugins/engine/views/components/html.html +0 -3
  182. package/src/server/plugins/engine/views/components/insettext.html +0 -7
  183. package/src/server/plugins/engine/views/components/list.html +0 -36
  184. package/src/server/plugins/engine/views/components/monthyearfield.html +0 -5
  185. package/src/server/plugins/engine/views/components/multilinetextfield.html +0 -10
  186. package/src/server/plugins/engine/views/components/numberfield.html +0 -5
  187. package/src/server/plugins/engine/views/components/radiosfield.html +0 -5
  188. package/src/server/plugins/engine/views/components/selectfield.html +0 -5
  189. package/src/server/plugins/engine/views/components/telephonenumberfield.html +0 -5
  190. package/src/server/plugins/engine/views/components/textfield.html +0 -5
  191. package/src/server/plugins/engine/views/components/ukaddressfield.html +0 -25
  192. package/src/server/plugins/engine/views/components/yesnofield.html +0 -5
  193. package/src/server/plugins/engine/views/file-upload.html +0 -45
  194. package/src/server/plugins/engine/views/index.html +0 -39
  195. package/src/server/plugins/engine/views/item-delete.html +0 -56
  196. package/src/server/plugins/engine/views/partials/components.html +0 -6
  197. package/src/server/plugins/engine/views/partials/conditional-components.html +0 -3
  198. package/src/server/plugins/engine/views/partials/debug.html +0 -44
  199. package/src/server/plugins/engine/views/partials/form.html +0 -15
  200. package/src/server/plugins/engine/views/partials/heading.html +0 -16
  201. package/src/server/plugins/engine/views/partials/preview-banner.html +0 -32
  202. package/src/server/plugins/engine/views/partials/preview-banner.test.js +0 -122
  203. package/src/server/plugins/engine/views/partials/warn-missing-notification-email.html +0 -10
  204. package/src/server/plugins/engine/views/repeat-list-summary.html +0 -53
  205. package/src/server/plugins/errorPages.ts +0 -58
  206. package/src/server/plugins/nunjucks/context.js +0 -88
  207. package/src/server/plugins/nunjucks/context.test.js +0 -142
  208. package/src/server/plugins/nunjucks/enviroment.test.js +0 -201
  209. package/src/server/plugins/nunjucks/environment.js +0 -116
  210. package/src/server/plugins/nunjucks/filters/answer.js +0 -27
  211. package/src/server/plugins/nunjucks/filters/answer.test.js +0 -89
  212. package/src/server/plugins/nunjucks/filters/evaluate.js +0 -21
  213. package/src/server/plugins/nunjucks/filters/field.js +0 -28
  214. package/src/server/plugins/nunjucks/filters/field.test.js +0 -75
  215. package/src/server/plugins/nunjucks/filters/highlight.js +0 -11
  216. package/src/server/plugins/nunjucks/filters/href.js +0 -30
  217. package/src/server/plugins/nunjucks/filters/href.test.js +0 -80
  218. package/src/server/plugins/nunjucks/filters/index.js +0 -8
  219. package/src/server/plugins/nunjucks/filters/inspect.js +0 -15
  220. package/src/server/plugins/nunjucks/filters/page.js +0 -24
  221. package/src/server/plugins/nunjucks/filters/page.test.js +0 -65
  222. package/src/server/plugins/nunjucks/index.js +0 -3
  223. package/src/server/plugins/nunjucks/plugin.js +0 -40
  224. package/src/server/plugins/nunjucks/render.js +0 -42
  225. package/src/server/plugins/nunjucks/types.js +0 -40
  226. package/src/server/plugins/pulse.ts +0 -11
  227. package/src/server/plugins/router.ts +0 -201
  228. package/src/server/plugins/session.ts +0 -28
  229. package/src/server/routes/health.js +0 -13
  230. package/src/server/routes/health.test.js +0 -35
  231. package/src/server/routes/index.test.ts +0 -125
  232. package/src/server/routes/index.ts +0 -2
  233. package/src/server/routes/public.ts +0 -47
  234. package/src/server/routes/types.ts +0 -48
  235. package/src/server/schemas/index.ts +0 -34
  236. package/src/server/secure-context.js +0 -43
  237. package/src/server/services/cacheService.test.ts +0 -276
  238. package/src/server/services/cacheService.ts +0 -131
  239. package/src/server/services/httpService.test.js +0 -491
  240. package/src/server/services/httpService.ts +0 -50
  241. package/src/server/services/index.ts +0 -1
  242. package/src/server/types.ts +0 -54
  243. package/src/server/utils/notify.test.ts +0 -37
  244. package/src/server/utils/notify.ts +0 -50
  245. package/src/server/utils/secure-context/get-trust-store-certs.js +0 -11
  246. package/src/server/utils/secure-context/get-trust-store-certs.test.js +0 -19
  247. package/src/server/utils/utils.js +0 -24
  248. package/src/server/utils/utils.test.js +0 -54
  249. package/src/server/views/404.html +0 -16
  250. package/src/server/views/500.html +0 -19
  251. package/src/server/views/components/debug/macro.njk +0 -3
  252. package/src/server/views/components/debug/template.njk +0 -13
  253. package/src/server/views/components/service-banner/macro.njk +0 -3
  254. package/src/server/views/components/service-banner/template.njk +0 -20
  255. package/src/server/views/components/service-banner/template.test.js +0 -43
  256. package/src/server/views/components/tag-env/macro.njk +0 -3
  257. package/src/server/views/components/tag-env/template.njk +0 -30
  258. package/src/server/views/components/tag-env/template.test.js +0 -66
  259. package/src/server/views/confirmation.html +0 -19
  260. package/src/server/views/help/accessibility-statement.html +0 -58
  261. package/src/server/views/help/cookie-preferences.html +0 -57
  262. package/src/server/views/help/cookies.html +0 -71
  263. package/src/server/views/help/get-support.html +0 -37
  264. package/src/server/views/help/privacy-notice.html +0 -68
  265. package/src/server/views/help/terms-and-conditions.html +0 -83
  266. package/src/server/views/layout.html +0 -199
  267. package/src/server/views/summary.html +0 -50
  268. package/src/typings/hapi/index.d.ts +0 -95
  269. package/src/typings/hapi-tracing/index.d.ts +0 -6
  270. package/src/typings/index.d.ts +0 -3
  271. package/src/typings/joi/index.d.ts +0 -22
  272. package/stylelint.config.js +0 -10
  273. package/test/client/javascripts/file-upload.test.js +0 -1197
  274. package/test/condition/checkboxes.test.js +0 -112
  275. package/test/condition/radios.test.js +0 -112
  276. package/test/condition/text.test.js +0 -103
  277. package/test/fixtures/assets-manifest.json +0 -4
  278. package/test/fixtures/form.js +0 -86
  279. package/test/fixtures/index.js +0 -2
  280. package/test/fixtures/list.js +0 -92
  281. package/test/form/cookies.test.js +0 -338
  282. package/test/form/csrf.test.js +0 -87
  283. package/test/form/definitions/basic.js +0 -101
  284. package/test/form/definitions/blank.js +0 -10
  285. package/test/form/definitions/checkboxes.json +0 -88
  286. package/test/form/definitions/components.json +0 -452
  287. package/test/form/definitions/conditional-reveal.js +0 -140
  288. package/test/form/definitions/conditions-basic.js +0 -187
  289. package/test/form/definitions/conditions-complex.js +0 -338
  290. package/test/form/definitions/conditions-dates.js +0 -78
  291. package/test/form/definitions/conditions-escaping.js +0 -143
  292. package/test/form/definitions/demo-cph-number.js +0 -3099
  293. package/test/form/definitions/feedback.json +0 -45
  294. package/test/form/definitions/fields-optional.js +0 -402
  295. package/test/form/definitions/fields-required.js +0 -402
  296. package/test/form/definitions/file-upload-basic.js +0 -44
  297. package/test/form/definitions/file-upload.js +0 -66
  298. package/test/form/definitions/minimal.js +0 -39
  299. package/test/form/definitions/phase-alpha.json +0 -33
  300. package/test/form/definitions/phase-default.json +0 -26
  301. package/test/form/definitions/radios.json +0 -88
  302. package/test/form/definitions/repeat-mixed.js +0 -54
  303. package/test/form/definitions/repeat.js +0 -70
  304. package/test/form/definitions/status.json +0 -126
  305. package/test/form/definitions/templates.js +0 -183
  306. package/test/form/definitions/test.json +0 -581
  307. package/test/form/definitions/text.json +0 -75
  308. package/test/form/definitions/titles.json +0 -170
  309. package/test/form/definitions.test.js +0 -47
  310. package/test/form/exit-page.test.js +0 -210
  311. package/test/form/feedback.test.js +0 -68
  312. package/test/form/fields-optional.test.js +0 -237
  313. package/test/form/fields-required.test.js +0 -294
  314. package/test/form/file-upload.test.js +0 -313
  315. package/test/form/govuk-notify.test.js +0 -449
  316. package/test/form/journey-basic.test.js +0 -444
  317. package/test/form/persist-files.test.js +0 -227
  318. package/test/form/phase-banner.test.js +0 -71
  319. package/test/form/repeat.test.js +0 -628
  320. package/test/form/summary-submission-email.test.js +0 -95
  321. package/test/form/template.test.js +0 -288
  322. package/test/form/titles.test.js +0 -204
  323. package/test/helpers/component-helpers.js +0 -74
  324. package/test/utils/get-cookie.js +0 -42
  325. package/test/utils/get-form-definitions.js +0 -18
  326. package/tmp.pdf +0 -1
  327. package/tsconfig.json +0 -28
  328. package/webpack.config.js +0 -208
@@ -1,313 +0,0 @@
1
- import { resolve } 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 {
9
- getUploadStatus,
10
- initiateUpload
11
- } from '~/src/server/plugins/engine/services/uploadService.js'
12
- import { FileStatus, UploadStatus } from '~/src/server/plugins/engine/types.js'
13
- import * as fixtures from '~/test/fixtures/index.js'
14
- import { renderResponse } from '~/test/helpers/component-helpers.js'
15
- import { getCookieHeader } from '~/test/utils/get-cookie.js'
16
-
17
- const basePath = '/file-upload'
18
-
19
- jest.mock('~/src/server/plugins/engine/services/uploadService.js')
20
- jest.mock('~/src/server/plugins/engine/services/formsService.js')
21
-
22
- const metadata = {
23
- formId: '66c304662ad3b5fe57210e7c',
24
- path: `${basePath}/methodology-statement`,
25
- retrievalKey: 'enrique.chase@defra.gov.uk'
26
- }
27
-
28
- /**
29
- * @satisfies {UploadInitiateResponse}
30
- */
31
- const uploadInitiateResponse = {
32
- uploadId: '15b2303c-9965-4632-acb6-0776081e0399',
33
- uploadUrl:
34
- 'http://localhost:7337/upload-and-scan/15b2303c-9965-4632-acb6-0776081e0399',
35
- statusUrl: 'http://localhost:7337/status/15b2303c-9965-4632-acb6-0776081e0399'
36
- }
37
-
38
- /**
39
- * @satisfies {UploadStatusResponse}
40
- */
41
- const initiatedStatusResponse = {
42
- uploadStatus: UploadStatus.initiated,
43
- metadata,
44
- form: {}
45
- }
46
-
47
- /**
48
- * @satisfies {UploadStatusResponse}
49
- */
50
- const readyStatusResponse = {
51
- uploadStatus: UploadStatus.ready,
52
- metadata,
53
- form: {
54
- file: {
55
- fileId: '5a76a1a3-bc8a-4bc0-859a-116d775c7f15',
56
- filename: 'test.pdf',
57
- contentLength: 1024,
58
- fileStatus: FileStatus.complete
59
- }
60
- },
61
- numberOfRejectedFiles: 0
62
- }
63
-
64
- describe('File upload GET tests', () => {
65
- /** @type {Server} */
66
- let server
67
-
68
- // Create server before each test
69
- beforeAll(async () => {
70
- server = await createServer({
71
- formFileName: 'file-upload.js',
72
- formFilePath: resolve(import.meta.dirname, '../form/definitions')
73
- })
74
-
75
- await server.initialize()
76
- })
77
-
78
- beforeEach(() => {
79
- jest.mocked(getFormMetadata).mockResolvedValue(fixtures.form.metadata)
80
- })
81
-
82
- afterAll(async () => {
83
- await server.stop()
84
- })
85
-
86
- test('GET /methodology-statement returns 200', async () => {
87
- jest.mocked(initiateUpload).mockResolvedValueOnce(uploadInitiateResponse)
88
-
89
- const { container, response } = await renderResponse(server, {
90
- url: `${basePath}/methodology-statement`
91
- })
92
-
93
- expect(response.statusCode).toBe(StatusCodes.OK)
94
-
95
- const $heading1 = container.getByRole('heading', {
96
- name: 'Upload your methodology statement',
97
- level: 1
98
- })
99
-
100
- const $heading2 = container.getByRole('heading', {
101
- name: 'Uploaded files',
102
- level: 2
103
- })
104
-
105
- expect($heading1).toBeInTheDocument()
106
- expect($heading1).toHaveClass('govuk-heading-l')
107
-
108
- expect($heading2).toBeInTheDocument()
109
- expect($heading2).toHaveClass('govuk-heading-m')
110
- })
111
-
112
- test('GET /methodology-statement returns uses cached initiated upload', async () => {
113
- jest.mocked(initiateUpload).mockResolvedValueOnce(uploadInitiateResponse)
114
-
115
- const res1 = await server.inject({
116
- url: `${basePath}/methodology-statement`
117
- })
118
-
119
- expect(res1.statusCode).toBe(StatusCodes.OK)
120
-
121
- // Extract the session cookie
122
- const headers = getCookieHeader(res1, 'session')
123
-
124
- jest.mocked(getUploadStatus).mockResolvedValueOnce(initiatedStatusResponse)
125
-
126
- const res2 = await server.inject({
127
- url: `${basePath}/methodology-statement`,
128
- headers
129
- })
130
-
131
- expect(res2.statusCode).toBe(StatusCodes.OK)
132
-
133
- // Assert invalid status response from CDP throws
134
- jest.mocked(getUploadStatus).mockResolvedValueOnce(undefined)
135
-
136
- const res3 = await server.inject({
137
- url: `${basePath}/methodology-statement`,
138
- headers
139
- })
140
-
141
- expect(res3.statusCode).toBe(StatusCodes.BAD_REQUEST)
142
- })
143
-
144
- test('GET /methodology-statement returns handles consumed upload', async () => {
145
- jest.mocked(initiateUpload).mockResolvedValueOnce(uploadInitiateResponse)
146
-
147
- const res1 = await server.inject({
148
- url: `${basePath}/methodology-statement`
149
- })
150
-
151
- expect(res1.statusCode).toBe(StatusCodes.OK)
152
-
153
- // Extract the session cookie
154
- const headers = getCookieHeader(res1, 'session')
155
-
156
- jest.mocked(getUploadStatus).mockResolvedValue(readyStatusResponse)
157
- jest.mocked(initiateUpload).mockResolvedValueOnce(uploadInitiateResponse)
158
-
159
- const res2 = await server.inject({
160
- url: `${basePath}/methodology-statement`,
161
- headers
162
- })
163
-
164
- expect(res2.statusCode).toBe(StatusCodes.OK)
165
- })
166
- })
167
-
168
- describe('File upload POST tests', () => {
169
- /** @type {Server} */
170
- let server
171
-
172
- // Create server before each test
173
- beforeAll(async () => {
174
- server = await createServer({
175
- formFileName: 'file-upload.js',
176
- formFilePath: resolve(import.meta.dirname, '../form/definitions')
177
- })
178
-
179
- await server.initialize()
180
- })
181
-
182
- beforeEach(() => {
183
- jest.mocked(getFormMetadata).mockResolvedValue(fixtures.form.metadata)
184
- })
185
-
186
- afterAll(async () => {
187
- await server.stop()
188
- })
189
-
190
- test('POST /methodology-statement with 1 file returns 200 with errors', async () => {
191
- jest.mocked(initiateUpload).mockResolvedValue(uploadInitiateResponse)
192
-
193
- const res1 = await server.inject({
194
- url: `${basePath}/methodology-statement`
195
- })
196
-
197
- expect(res1.statusCode).toBe(StatusCodes.OK)
198
-
199
- // Extract the session cookie
200
- const headers = getCookieHeader(res1, 'session')
201
-
202
- jest.mocked(getUploadStatus).mockResolvedValue(readyStatusResponse)
203
-
204
- const { container, response } = await renderResponse(server, {
205
- url: `${basePath}/methodology-statement`,
206
- method: 'POST',
207
- headers,
208
- payload: {}
209
- })
210
-
211
- expect(response.statusCode).toBe(StatusCodes.OK)
212
-
213
- const $errorSummary = container.getByRole('alert')
214
- const $errorItems = within($errorSummary).getAllByRole('listitem')
215
-
216
- const $heading = within($errorSummary).getByRole('heading', {
217
- name: 'There is a problem',
218
- level: 2
219
- })
220
-
221
- expect($heading).toBeInTheDocument()
222
-
223
- expect($errorItems[0]).toHaveTextContent(
224
- 'Upload your methodology statement must contain at least 2 items'
225
- )
226
-
227
- const $input = container.getByLabelText(
228
- 'Upload your methodology statement (optional)'
229
- )
230
-
231
- expect($input).toHaveAccessibleDescription(
232
- expect.stringContaining(
233
- 'Error: Upload your methodology statement must contain at least 2 items'
234
- )
235
- )
236
- })
237
-
238
- test('POST /methodology-statement with 2 valid files returns 303 to /summary', async () => {
239
- jest.mocked(initiateUpload).mockResolvedValue(uploadInitiateResponse)
240
- jest.mocked(getUploadStatus).mockResolvedValue(readyStatusResponse)
241
-
242
- const res1 = await server.inject({
243
- url: `${basePath}/methodology-statement`
244
- })
245
-
246
- expect(res1.statusCode).toBe(StatusCodes.OK)
247
-
248
- // Extract the session cookie
249
- const headers = getCookieHeader(res1, 'session')
250
-
251
- const res2 = await server.inject({
252
- url: `${basePath}/methodology-statement`,
253
- headers
254
- })
255
-
256
- expect(res2.statusCode).toBe(StatusCodes.OK)
257
-
258
- const res3 = await server.inject({
259
- url: `${basePath}/methodology-statement`,
260
- method: 'POST',
261
- headers,
262
- payload: {}
263
- })
264
-
265
- expect(res3.statusCode).toBe(StatusCodes.SEE_OTHER)
266
- expect(res3.headers.location).toBe(`${basePath}/summary`)
267
- })
268
-
269
- test('POST /methodology-statement with remove deletes the file', async () => {
270
- jest.mocked(initiateUpload).mockResolvedValue(uploadInitiateResponse)
271
- jest.mocked(getUploadStatus).mockResolvedValue(readyStatusResponse)
272
-
273
- const res1 = await server.inject({
274
- url: `${basePath}/methodology-statement`
275
- })
276
-
277
- expect(res1.statusCode).toBe(StatusCodes.OK)
278
-
279
- // Extract the session cookie
280
- const headers = getCookieHeader(res1, 'session')
281
-
282
- const res2 = await server.inject({
283
- url: `${basePath}/methodology-statement`,
284
- headers
285
- })
286
-
287
- expect(res2.statusCode).toBe(StatusCodes.OK)
288
-
289
- const res3 = await server.inject({
290
- url: `${basePath}/methodology-statement/15b2303c-9965-4632-acb6-0776081e0399/confirm-delete`,
291
- headers
292
- })
293
-
294
- expect(res3.statusCode).toBe(StatusCodes.OK)
295
-
296
- const res4 = await server.inject({
297
- url: `${basePath}/methodology-statement/15b2303c-9965-4632-acb6-0776081e0399/confirm-delete`,
298
- method: 'POST',
299
- headers,
300
- payload: {
301
- confirm: true
302
- }
303
- })
304
-
305
- expect(res4.statusCode).toBe(StatusCodes.SEE_OTHER)
306
- expect(res4.headers.location).toBe(`${basePath}/methodology-statement`)
307
- })
308
- })
309
-
310
- /**
311
- * @import { Server } from '@hapi/hapi'
312
- * @import { UploadInitiateResponse, UploadStatusResponse } from '~/src/server/plugins/engine/types.js'
313
- */