@defra/forms-engine-plugin 4.7.2 → 4.8.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 (407) hide show
  1. package/.public/javascripts/shared.min.js +1 -1
  2. package/.public/javascripts/shared.min.js.map +1 -1
  3. package/.server/client/javascripts/geospatial-map.d.ts +6 -6
  4. package/.server/client/javascripts/geospatial-map.js +3 -3
  5. package/.server/client/javascripts/location-map.d.ts +1 -1
  6. package/.server/client/javascripts/location-map.js +1 -1
  7. package/.server/client/javascripts/map.d.ts +5 -1
  8. package/.server/client/javascripts/map.js +10 -2
  9. package/.server/client/javascripts/map.js.map +1 -1
  10. package/.server/client/javascripts/shared.d.ts +7 -7
  11. package/.server/server/index.d.ts +1 -1
  12. package/.server/server/plugins/crumb.d.ts +1 -1
  13. package/.server/server/plugins/engine/beta/form-context.d.ts +6 -6
  14. package/.server/server/plugins/engine/components/AutocompleteField.d.ts +4 -4
  15. package/.server/server/plugins/engine/components/CheckboxesField.d.ts +2 -2
  16. package/.server/server/plugins/engine/components/CheckboxesField.js +2 -2
  17. package/.server/server/plugins/engine/components/CheckboxesField.js.map +1 -1
  18. package/.server/server/plugins/engine/components/ComponentBase.d.ts +5 -5
  19. package/.server/server/plugins/engine/components/ComponentCollection.d.ts +8 -8
  20. package/.server/server/plugins/engine/components/DatePartsField.d.ts +11 -11
  21. package/.server/server/plugins/engine/components/DeclarationField.d.ts +3 -3
  22. package/.server/server/plugins/engine/components/Details.d.ts +1 -1
  23. package/.server/server/plugins/engine/components/EastingNorthingField.d.ts +22 -22
  24. package/.server/server/plugins/engine/components/EmailAddressField.d.ts +4 -4
  25. package/.server/server/plugins/engine/components/FileUploadField.d.ts +3 -3
  26. package/.server/server/plugins/engine/components/FormComponent.d.ts +10 -10
  27. package/.server/server/plugins/engine/components/GeospatialField.d.ts +6 -6
  28. package/.server/server/plugins/engine/components/HiddenField.d.ts +2 -2
  29. package/.server/server/plugins/engine/components/Html.d.ts +1 -1
  30. package/.server/server/plugins/engine/components/InsetText.d.ts +1 -1
  31. package/.server/server/plugins/engine/components/LatLongField.d.ts +22 -22
  32. package/.server/server/plugins/engine/components/List.d.ts +8 -8
  33. package/.server/server/plugins/engine/components/ListFormComponent.d.ts +10 -10
  34. package/.server/server/plugins/engine/components/LocationFieldBase.d.ts +6 -6
  35. package/.server/server/plugins/engine/components/LocationFieldHelpers.d.ts +14 -14
  36. package/.server/server/plugins/engine/components/Markdown.d.ts +1 -1
  37. package/.server/server/plugins/engine/components/MonthYearField.d.ts +11 -11
  38. package/.server/server/plugins/engine/components/MultilineTextField.d.ts +5 -5
  39. package/.server/server/plugins/engine/components/NationalGridFieldNumberField.d.ts +1 -1
  40. package/.server/server/plugins/engine/components/NumberField.d.ts +3 -3
  41. package/.server/server/plugins/engine/components/OsGridRefField.d.ts +1 -1
  42. package/.server/server/plugins/engine/components/PaymentField.d.ts +12 -12
  43. package/.server/server/plugins/engine/components/RadiosField.d.ts +1 -1
  44. package/.server/server/plugins/engine/components/SelectField.d.ts +4 -4
  45. package/.server/server/plugins/engine/components/SelectionControlField.d.ts +10 -10
  46. package/.server/server/plugins/engine/components/TelephoneNumberField.d.ts +4 -4
  47. package/.server/server/plugins/engine/components/TextField.d.ts +2 -2
  48. package/.server/server/plugins/engine/components/UkAddressField.d.ts +11 -11
  49. package/.server/server/plugins/engine/components/YesNoField.d.ts +2 -2
  50. package/.server/server/plugins/engine/components/helpers/__stubs__/geospatial.d.ts +1 -1
  51. package/.server/server/plugins/engine/components/helpers/components.d.ts +5 -5
  52. package/.server/server/plugins/engine/components/helpers/geospatial.d.ts +1 -1
  53. package/.server/server/plugins/engine/components/index.d.ts +27 -27
  54. package/.server/server/plugins/engine/components/types.d.ts +1 -1
  55. package/.server/server/plugins/engine/configureEnginePlugin.d.ts +4 -4
  56. package/.server/server/plugins/engine/date-helper.d.ts +1 -1
  57. package/.server/server/plugins/engine/helpers.d.ts +8 -8
  58. package/.server/server/plugins/engine/index.d.ts +5 -5
  59. package/.server/server/plugins/engine/models/FormModel.d.ts +6 -6
  60. package/.server/server/plugins/engine/models/SummaryViewModel.d.ts +6 -6
  61. package/.server/server/plugins/engine/models/index.d.ts +2 -2
  62. package/.server/server/plugins/engine/models/types.d.ts +4 -4
  63. package/.server/server/plugins/engine/options.d.ts +1 -1
  64. package/.server/server/plugins/engine/options.js +1 -1
  65. package/.server/server/plugins/engine/options.test.js +1 -1
  66. package/.server/server/plugins/engine/outputFormatters/adapter/v1.d.ts +4 -4
  67. package/.server/server/plugins/engine/outputFormatters/human/v1.d.ts +4 -4
  68. package/.server/server/plugins/engine/outputFormatters/index.d.ts +5 -5
  69. package/.server/server/plugins/engine/outputFormatters/machine/v1.d.ts +4 -4
  70. package/.server/server/plugins/engine/outputFormatters/machine/v2.d.ts +4 -4
  71. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.d.ts +8 -8
  72. package/.server/server/plugins/engine/pageControllers/PageController.d.ts +6 -6
  73. package/.server/server/plugins/engine/pageControllers/QuestionPageController.d.ts +8 -8
  74. package/.server/server/plugins/engine/pageControllers/RepeatPageController.d.ts +5 -5
  75. package/.server/server/plugins/engine/pageControllers/StartPageController.d.ts +4 -4
  76. package/.server/server/plugins/engine/pageControllers/StatusPageController.d.ts +4 -4
  77. package/.server/server/plugins/engine/pageControllers/SummaryPageController.d.ts +5 -5
  78. package/.server/server/plugins/engine/pageControllers/TerminalPageController.d.ts +3 -3
  79. package/.server/server/plugins/engine/pageControllers/__stubs__/request.d.ts +2 -2
  80. package/.server/server/plugins/engine/pageControllers/errors.d.ts +1 -1
  81. package/.server/server/plugins/engine/pageControllers/helpers/pages.d.ts +2 -2
  82. package/.server/server/plugins/engine/pageControllers/helpers/state.d.ts +5 -5
  83. package/.server/server/plugins/engine/pageControllers/helpers/state.js +1 -1
  84. package/.server/server/plugins/engine/pageControllers/helpers/state.js.map +1 -1
  85. package/.server/server/plugins/engine/pageControllers/helpers/submission.d.ts +1 -1
  86. package/.server/server/plugins/engine/pageControllers/index.d.ts +7 -7
  87. package/.server/server/plugins/engine/plugin.d.ts +1 -1
  88. package/.server/server/plugins/engine/routes/file-upload.d.ts +1 -1
  89. package/.server/server/plugins/engine/routes/index.d.ts +3 -3
  90. package/.server/server/plugins/engine/routes/payment-helper.d.ts +3 -3
  91. package/.server/server/plugins/engine/routes/payment-helper.js +2 -2
  92. package/.server/server/plugins/engine/routes/payment.js +5 -5
  93. package/.server/server/plugins/engine/routes/payment.test.js +1 -1
  94. package/.server/server/plugins/engine/routes/questions.d.ts +2 -2
  95. package/.server/server/plugins/engine/routes/repeaters/item-delete.d.ts +2 -2
  96. package/.server/server/plugins/engine/routes/repeaters/summary.d.ts +2 -2
  97. package/.server/server/plugins/engine/services/index.d.ts +3 -3
  98. package/.server/server/plugins/engine/services/notifyService.d.ts +4 -4
  99. package/.server/server/plugins/engine/services/uploadService.d.ts +2 -2
  100. package/.server/server/plugins/engine/services/uploadService.js +1 -1
  101. package/.server/server/plugins/engine/types/index.d.ts +10 -10
  102. package/.server/server/plugins/engine/types/schema.d.ts +1 -1
  103. package/.server/server/plugins/engine/types.d.ts +25 -16
  104. package/.server/server/plugins/engine/types.js.map +1 -1
  105. package/.server/server/plugins/engine/validationHelpers.d.ts +2 -2
  106. package/.server/server/plugins/engine/vision.d.ts +1 -1
  107. package/.server/server/plugins/map/index.d.ts +1 -1
  108. package/.server/server/plugins/map/index.js +1 -1
  109. package/.server/server/plugins/map/routes/get-os-token.d.ts +11 -1
  110. package/.server/server/plugins/map/routes/get-os-token.js +12 -2
  111. package/.server/server/plugins/map/routes/get-os-token.js.map +1 -1
  112. package/.server/server/plugins/map/routes/index.d.ts +4 -4
  113. package/.server/server/plugins/map/routes/index.js +3 -2
  114. package/.server/server/plugins/map/routes/index.js.map +1 -1
  115. package/.server/server/plugins/map/routes/vts/esri-aerial.json +23 -0
  116. package/.server/server/plugins/map/service.d.ts +1 -1
  117. package/.server/server/plugins/map/service.js +5 -2
  118. package/.server/server/plugins/map/service.js.map +1 -1
  119. package/.server/server/plugins/map/test/__stubs__/find.d.ts +1 -1
  120. package/.server/server/plugins/map/test/__stubs__/find.js +1 -1
  121. package/.server/server/plugins/nunjucks/context.d.ts +2 -2
  122. package/.server/server/plugins/nunjucks/context.js +2 -2
  123. package/.server/server/plugins/nunjucks/context.test.js +1 -1
  124. package/.server/server/plugins/nunjucks/enviroment.test.js +1 -1
  125. package/.server/server/plugins/nunjucks/environment.d.ts +3 -3
  126. package/.server/server/plugins/nunjucks/environment.js +3 -3
  127. package/.server/server/plugins/nunjucks/filters/answer.d.ts +1 -1
  128. package/.server/server/plugins/nunjucks/filters/answer.js +2 -2
  129. package/.server/server/plugins/nunjucks/filters/answer.test.js +1 -1
  130. package/.server/server/plugins/nunjucks/filters/evaluate.d.ts +1 -1
  131. package/.server/server/plugins/nunjucks/filters/evaluate.js +1 -1
  132. package/.server/server/plugins/nunjucks/filters/field.d.ts +1 -1
  133. package/.server/server/plugins/nunjucks/filters/field.js +1 -1
  134. package/.server/server/plugins/nunjucks/filters/field.test.js +1 -1
  135. package/.server/server/plugins/nunjucks/filters/href.d.ts +1 -1
  136. package/.server/server/plugins/nunjucks/filters/href.js +1 -1
  137. package/.server/server/plugins/nunjucks/filters/href.test.js +1 -1
  138. package/.server/server/plugins/nunjucks/filters/index.d.ts +8 -8
  139. package/.server/server/plugins/nunjucks/filters/page.d.ts +1 -1
  140. package/.server/server/plugins/nunjucks/filters/page.js +1 -1
  141. package/.server/server/plugins/nunjucks/filters/page.test.js +1 -1
  142. package/.server/server/plugins/nunjucks/index.d.ts +3 -3
  143. package/.server/server/plugins/nunjucks/render.d.ts +2 -2
  144. package/.server/server/plugins/nunjucks/render.js +1 -1
  145. package/.server/server/plugins/nunjucks/types.d.ts +1 -1
  146. package/.server/server/plugins/nunjucks/types.js +1 -1
  147. package/.server/server/plugins/payment/helper.d.ts +2 -2
  148. package/.server/server/plugins/payment/helper.js +1 -1
  149. package/.server/server/plugins/payment/service.d.ts +3 -3
  150. package/.server/server/plugins/payment/service.js +1 -1
  151. package/.server/server/plugins/postcode-lookup/index.d.ts +1 -1
  152. package/.server/server/plugins/postcode-lookup/index.js +1 -1
  153. package/.server/server/plugins/postcode-lookup/models/index.d.ts +6 -6
  154. package/.server/server/plugins/postcode-lookup/models/index.js +1 -1
  155. package/.server/server/plugins/postcode-lookup/routes/index.d.ts +6 -6
  156. package/.server/server/plugins/postcode-lookup/routes/index.js +15 -15
  157. package/.server/server/plugins/postcode-lookup/routes/index.js.map +1 -1
  158. package/.server/server/plugins/postcode-lookup/service.d.ts +1 -1
  159. package/.server/server/plugins/postcode-lookup/service.js +5 -2
  160. package/.server/server/plugins/postcode-lookup/service.js.map +1 -1
  161. package/.server/server/plugins/postcode-lookup/types.js +1 -1
  162. package/.server/server/routes/index.d.ts +2 -2
  163. package/.server/server/routes/types.d.ts +1 -1
  164. package/.server/server/schemas/index.d.ts +2 -2
  165. package/.server/server/services/cacheService.d.ts +8 -8
  166. package/.server/server/services/cacheService.js +2 -5
  167. package/.server/server/services/cacheService.js.map +1 -1
  168. package/.server/server/services/httpService.test.js +1 -1
  169. package/.server/server/services/index.d.ts +1 -1
  170. package/.server/server/types.d.ts +7 -7
  171. package/.server/server/utils/file-form-service.d.ts +2 -2
  172. package/.server/server/utils/file-form-service.js +1 -1
  173. package/package.json +8 -4
  174. package/src/client/javascripts/application.js +1 -1
  175. package/src/client/javascripts/geospatial-map.js +4 -4
  176. package/src/client/javascripts/location-map.js +2 -2
  177. package/src/client/javascripts/map.js +13 -4
  178. package/src/client/javascripts/shared.js +7 -7
  179. package/src/index.ts +3 -3
  180. package/src/server/common/helpers/logging/logger-options.ts +1 -1
  181. package/src/server/common/helpers/logging/logger.ts +1 -1
  182. package/src/server/common/helpers/logging/request-logger.ts +1 -1
  183. package/src/server/common/helpers/logging/request-tracing.js +1 -1
  184. package/src/server/common/helpers/redis-client.js +2 -2
  185. package/src/server/index.ts +13 -13
  186. package/src/server/plugins/crumb.ts +2 -2
  187. package/src/server/plugins/engine/beta/form-context.ts +9 -9
  188. package/src/server/plugins/engine/components/AutocompleteField.ts +3 -3
  189. package/src/server/plugins/engine/components/CheckboxesField.ts +7 -8
  190. package/src/server/plugins/engine/components/ComponentBase.ts +5 -5
  191. package/src/server/plugins/engine/components/ComponentCollection.ts +9 -9
  192. package/src/server/plugins/engine/components/DatePartsField.ts +8 -8
  193. package/src/server/plugins/engine/components/DeclarationField.ts +3 -3
  194. package/src/server/plugins/engine/components/Details.ts +1 -1
  195. package/src/server/plugins/engine/components/EastingNorthingField.ts +9 -9
  196. package/src/server/plugins/engine/components/EmailAddressField.ts +3 -3
  197. package/src/server/plugins/engine/components/FileUploadField.ts +6 -6
  198. package/src/server/plugins/engine/components/FormComponent.ts +4 -4
  199. package/src/server/plugins/engine/components/GeospatialField.ts +5 -5
  200. package/src/server/plugins/engine/components/HiddenField.ts +4 -4
  201. package/src/server/plugins/engine/components/Html.ts +1 -1
  202. package/src/server/plugins/engine/components/InsetText.ts +1 -1
  203. package/src/server/plugins/engine/components/LatLongField.ts +9 -9
  204. package/src/server/plugins/engine/components/List.ts +2 -2
  205. package/src/server/plugins/engine/components/ListFormComponent.ts +4 -4
  206. package/src/server/plugins/engine/components/LocationFieldBase.ts +5 -5
  207. package/src/server/plugins/engine/components/LocationFieldHelpers.ts +5 -5
  208. package/src/server/plugins/engine/components/Markdown.ts +1 -1
  209. package/src/server/plugins/engine/components/MonthYearField.ts +8 -8
  210. package/src/server/plugins/engine/components/MultilineTextField.ts +4 -4
  211. package/src/server/plugins/engine/components/NationalGridFieldNumberField.ts +2 -2
  212. package/src/server/plugins/engine/components/NumberField.ts +3 -3
  213. package/src/server/plugins/engine/components/OsGridRefField.ts +2 -2
  214. package/src/server/plugins/engine/components/PaymentField.ts +8 -8
  215. package/src/server/plugins/engine/components/RadiosField.ts +1 -1
  216. package/src/server/plugins/engine/components/SelectField.ts +2 -2
  217. package/src/server/plugins/engine/components/SelectionControlField.ts +4 -4
  218. package/src/server/plugins/engine/components/TelephoneNumberField.ts +4 -4
  219. package/src/server/plugins/engine/components/TextField.ts +3 -3
  220. package/src/server/plugins/engine/components/UkAddressField.ts +7 -7
  221. package/src/server/plugins/engine/components/YesNoField.ts +5 -5
  222. package/src/server/plugins/engine/components/helpers/__stubs__/geospatial.ts +1 -1
  223. package/src/server/plugins/engine/components/helpers/components.ts +8 -8
  224. package/src/server/plugins/engine/components/helpers/geospatial.ts +1 -1
  225. package/src/server/plugins/engine/components/index.ts +27 -27
  226. package/src/server/plugins/engine/components/types.ts +1 -1
  227. package/src/server/plugins/engine/configureEnginePlugin.ts +10 -10
  228. package/src/server/plugins/engine/date-helper.ts +1 -1
  229. package/src/server/plugins/engine/helpers.ts +8 -8
  230. package/src/server/plugins/engine/index.ts +8 -8
  231. package/src/server/plugins/engine/models/FormModel.ts +15 -15
  232. package/src/server/plugins/engine/models/SummaryViewModel.ts +10 -10
  233. package/src/server/plugins/engine/models/index.ts +2 -2
  234. package/src/server/plugins/engine/models/types.ts +4 -4
  235. package/src/server/plugins/engine/options.js +3 -3
  236. package/src/server/plugins/engine/outputFormatters/adapter/v1.ts +6 -6
  237. package/src/server/plugins/engine/outputFormatters/human/v1.ts +9 -9
  238. package/src/server/plugins/engine/outputFormatters/index.ts +8 -8
  239. package/src/server/plugins/engine/outputFormatters/machine/v1.ts +7 -7
  240. package/src/server/plugins/engine/outputFormatters/machine/v2.ts +6 -6
  241. package/src/server/plugins/engine/pageControllers/FileUploadPageController.ts +9 -9
  242. package/src/server/plugins/engine/pageControllers/PageController.ts +7 -7
  243. package/src/server/plugins/engine/pageControllers/QuestionPageController.ts +13 -13
  244. package/src/server/plugins/engine/pageControllers/RepeatPageController.ts +6 -6
  245. package/src/server/plugins/engine/pageControllers/StartPageController.ts +3 -3
  246. package/src/server/plugins/engine/pageControllers/StatusPageController.ts +5 -5
  247. package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +12 -12
  248. package/src/server/plugins/engine/pageControllers/TerminalPageController.ts +3 -3
  249. package/src/server/plugins/engine/pageControllers/__stubs__/request.ts +3 -3
  250. package/src/server/plugins/engine/pageControllers/__stubs__/server.ts +2 -2
  251. package/src/server/plugins/engine/pageControllers/errors.ts +1 -1
  252. package/src/server/plugins/engine/pageControllers/helpers/pages.ts +2 -2
  253. package/src/server/plugins/engine/pageControllers/helpers/state.ts +9 -9
  254. package/src/server/plugins/engine/pageControllers/helpers/submission.ts +5 -5
  255. package/src/server/plugins/engine/pageControllers/index.ts +7 -7
  256. package/src/server/plugins/engine/pageControllers/validationOptions.ts +1 -1
  257. package/src/server/plugins/engine/plugin.ts +14 -14
  258. package/src/server/plugins/engine/routes/file-upload.ts +2 -2
  259. package/src/server/plugins/engine/routes/index.ts +10 -10
  260. package/src/server/plugins/engine/routes/payment-helper.js +4 -4
  261. package/src/server/plugins/engine/routes/payment.js +9 -9
  262. package/src/server/plugins/engine/routes/questions.ts +10 -10
  263. package/src/server/plugins/engine/routes/repeaters/item-delete.ts +6 -6
  264. package/src/server/plugins/engine/routes/repeaters/summary.ts +5 -5
  265. package/src/server/plugins/engine/services/formSubmissionService.js +2 -2
  266. package/src/server/plugins/engine/services/index.js +3 -3
  267. package/src/server/plugins/engine/services/localFormsService.js +2 -2
  268. package/src/server/plugins/engine/services/notifyService.ts +9 -9
  269. package/src/server/plugins/engine/services/uploadService.js +3 -3
  270. package/src/server/plugins/engine/types/index.ts +10 -10
  271. package/src/server/plugins/engine/types/schema.ts +2 -2
  272. package/src/server/plugins/engine/types.ts +22 -17
  273. package/src/server/plugins/engine/validationHelpers.ts +3 -3
  274. package/src/server/plugins/engine/vision.ts +3 -3
  275. package/src/server/plugins/map/index.js +2 -2
  276. package/src/server/plugins/map/routes/get-os-token.js +15 -3
  277. package/src/server/plugins/map/routes/index.js +7 -5
  278. package/src/server/plugins/map/routes/vts/esri-aerial.json +23 -0
  279. package/src/server/plugins/map/service.js +7 -4
  280. package/src/server/plugins/map/test/__stubs__/find.js +1 -1
  281. package/src/server/plugins/nunjucks/context.js +5 -5
  282. package/src/server/plugins/nunjucks/environment.js +6 -6
  283. package/src/server/plugins/nunjucks/filters/answer.js +3 -3
  284. package/src/server/plugins/nunjucks/filters/evaluate.js +2 -2
  285. package/src/server/plugins/nunjucks/filters/field.js +1 -1
  286. package/src/server/plugins/nunjucks/filters/href.js +2 -2
  287. package/src/server/plugins/nunjucks/filters/index.js +8 -8
  288. package/src/server/plugins/nunjucks/filters/page.js +1 -1
  289. package/src/server/plugins/nunjucks/index.js +3 -3
  290. package/src/server/plugins/nunjucks/plugin.js +3 -3
  291. package/src/server/plugins/nunjucks/render.js +2 -2
  292. package/src/server/plugins/nunjucks/types.js +1 -1
  293. package/src/server/plugins/payment/helper.js +2 -2
  294. package/src/server/plugins/payment/service.js +4 -4
  295. package/src/server/plugins/postcode-lookup/index.js +2 -2
  296. package/src/server/plugins/postcode-lookup/models/index.js +3 -3
  297. package/src/server/plugins/postcode-lookup/routes/index.js +24 -14
  298. package/src/server/plugins/postcode-lookup/service.js +7 -4
  299. package/src/server/plugins/postcode-lookup/types.js +1 -1
  300. package/src/server/plugins/session.ts +1 -1
  301. package/src/server/routes/index.ts +2 -2
  302. package/src/server/routes/public.ts +1 -1
  303. package/src/server/routes/types.ts +1 -1
  304. package/src/server/schemas/index.ts +2 -2
  305. package/src/server/secure-context.js +1 -1
  306. package/src/server/services/cacheService.ts +13 -18
  307. package/src/server/services/httpService.ts +1 -1
  308. package/src/server/services/index.ts +1 -1
  309. package/src/server/types.ts +7 -7
  310. package/src/server/utils/notify.ts +2 -2
  311. package/src/server/utils/utils.js +1 -1
  312. package/src/typings/hapi/index.d.ts +4 -4
  313. package/src/typings/joi/index.d.ts +1 -1
  314. package/src/server/common/helpers/logging/logger-options.test.ts +0 -50
  315. package/src/server/index.test.ts +0 -644
  316. package/src/server/plugins/engine/beta/form-context.test.ts +0 -373
  317. package/src/server/plugins/engine/components/AutocompleteField.test.ts +0 -362
  318. package/src/server/plugins/engine/components/CheckboxesField.test.ts +0 -486
  319. package/src/server/plugins/engine/components/DatePartsField.test.ts +0 -927
  320. package/src/server/plugins/engine/components/DeclarationField.test.ts +0 -560
  321. package/src/server/plugins/engine/components/Details.test.ts +0 -49
  322. package/src/server/plugins/engine/components/EastingNorthingField.test.ts +0 -727
  323. package/src/server/plugins/engine/components/EmailAddressField.test.ts +0 -445
  324. package/src/server/plugins/engine/components/FileUploadField.test.ts +0 -1079
  325. package/src/server/plugins/engine/components/GeospatialField.test.ts +0 -380
  326. package/src/server/plugins/engine/components/HiddenField.test.ts +0 -188
  327. package/src/server/plugins/engine/components/Html.test.ts +0 -48
  328. package/src/server/plugins/engine/components/InsetText.test.ts +0 -48
  329. package/src/server/plugins/engine/components/LatLongField.test.ts +0 -898
  330. package/src/server/plugins/engine/components/List.test.ts +0 -79
  331. package/src/server/plugins/engine/components/LocationFieldBase.test.ts +0 -253
  332. package/src/server/plugins/engine/components/LocationFieldHelpers.test.ts +0 -743
  333. package/src/server/plugins/engine/components/Markdown.test.ts +0 -48
  334. package/src/server/plugins/engine/components/MonthYearField.test.ts +0 -617
  335. package/src/server/plugins/engine/components/MultilineTextField.test.ts +0 -647
  336. package/src/server/plugins/engine/components/NationalGridFieldNumberField.test.ts +0 -449
  337. package/src/server/plugins/engine/components/NumberField.test.ts +0 -723
  338. package/src/server/plugins/engine/components/OsGridRefField.test.ts +0 -460
  339. package/src/server/plugins/engine/components/PaymentField.test.ts +0 -745
  340. package/src/server/plugins/engine/components/RadiosField.test.ts +0 -297
  341. package/src/server/plugins/engine/components/SelectField.test.ts +0 -289
  342. package/src/server/plugins/engine/components/TelephoneNumberField.test.ts +0 -384
  343. package/src/server/plugins/engine/components/TextField.test.ts +0 -521
  344. package/src/server/plugins/engine/components/UkAddressField.test.ts +0 -806
  345. package/src/server/plugins/engine/components/YesNoField.test.ts +0 -256
  346. package/src/server/plugins/engine/components/helpers/components.test.ts +0 -399
  347. package/src/server/plugins/engine/components/helpers/geospatial.test.js +0 -55
  348. package/src/server/plugins/engine/components/helpers/helpers.test.ts +0 -219
  349. package/src/server/plugins/engine/date-helper.test.ts +0 -47
  350. package/src/server/plugins/engine/helpers.test.ts +0 -868
  351. package/src/server/plugins/engine/models/FormModel.test.ts +0 -725
  352. package/src/server/plugins/engine/models/SummaryViewModel.test.ts +0 -472
  353. package/src/server/plugins/engine/options.test.js +0 -63
  354. package/src/server/plugins/engine/outputFormatters/adapter/v1.location.test.ts +0 -356
  355. package/src/server/plugins/engine/outputFormatters/adapter/v1.test.ts +0 -871
  356. package/src/server/plugins/engine/outputFormatters/human/v1.payment.test.ts +0 -147
  357. package/src/server/plugins/engine/outputFormatters/human/v1.test.ts +0 -145
  358. package/src/server/plugins/engine/outputFormatters/index.test.ts +0 -17
  359. package/src/server/plugins/engine/outputFormatters/machine/v1.test.ts +0 -268
  360. package/src/server/plugins/engine/outputFormatters/machine/v2.location.test.ts +0 -341
  361. package/src/server/plugins/engine/outputFormatters/machine/v2.payment.test.ts +0 -115
  362. package/src/server/plugins/engine/outputFormatters/machine/v2.test.ts +0 -311
  363. package/src/server/plugins/engine/pageControllers/FileUploadPageController.test.ts +0 -1372
  364. package/src/server/plugins/engine/pageControllers/PageController.test.ts +0 -246
  365. package/src/server/plugins/engine/pageControllers/QuestionPageController.test.ts +0 -1686
  366. package/src/server/plugins/engine/pageControllers/RepeatPageController.test.ts +0 -279
  367. package/src/server/plugins/engine/pageControllers/StartPageController.test.ts +0 -32
  368. package/src/server/plugins/engine/pageControllers/StatusPageController.test.ts +0 -32
  369. package/src/server/plugins/engine/pageControllers/SummaryPageController.test.ts +0 -89
  370. package/src/server/plugins/engine/pageControllers/TerminalController.test.ts +0 -37
  371. package/src/server/plugins/engine/pageControllers/errors.test.ts +0 -78
  372. package/src/server/plugins/engine/pageControllers/helpers/helpers.test.ts +0 -182
  373. package/src/server/plugins/engine/pageControllers/helpers/state.test.ts +0 -359
  374. package/src/server/plugins/engine/pageControllers/helpers/submission.test.ts +0 -373
  375. package/src/server/plugins/engine/referenceNumbers.test.ts +0 -74
  376. package/src/server/plugins/engine/routes/index.test.ts +0 -332
  377. package/src/server/plugins/engine/routes/payment-helper.test.js +0 -136
  378. package/src/server/plugins/engine/routes/payment.test.js +0 -180
  379. package/src/server/plugins/engine/routes/questions.test.ts +0 -502
  380. package/src/server/plugins/engine/routes/repeaters/item-delete.test.ts +0 -83
  381. package/src/server/plugins/engine/routes/repeaters/summary.test.ts +0 -75
  382. package/src/server/plugins/engine/services/formsService.test.js +0 -26
  383. package/src/server/plugins/engine/services/notifyService.test.ts +0 -310
  384. package/src/server/plugins/engine/types/schema.test.ts +0 -234
  385. package/src/server/plugins/engine/views/components/service-banner/template.test.js +0 -43
  386. package/src/server/plugins/engine/views/components/tag-env/template.test.js +0 -28
  387. package/src/server/plugins/engine/views/partials/preview-banner.test.js +0 -122
  388. package/src/server/plugins/map/routes/get-os-token.test.js +0 -55
  389. package/src/server/plugins/map/service.test.js +0 -144
  390. package/src/server/plugins/nunjucks/context.test.js +0 -109
  391. package/src/server/plugins/nunjucks/enviroment.test.js +0 -207
  392. package/src/server/plugins/nunjucks/filters/answer.test.js +0 -92
  393. package/src/server/plugins/nunjucks/filters/field.test.js +0 -75
  394. package/src/server/plugins/nunjucks/filters/href.test.js +0 -80
  395. package/src/server/plugins/nunjucks/filters/merge.test.js +0 -15
  396. package/src/server/plugins/nunjucks/filters/page.test.js +0 -65
  397. package/src/server/plugins/payment/helper.test.js +0 -29
  398. package/src/server/plugins/payment/service.test.js +0 -218
  399. package/src/server/plugins/postcode-lookup/service.test.js +0 -177
  400. package/src/server/postcode-lookup.test.ts +0 -64
  401. package/src/server/routes/dummy-api.test.ts +0 -97
  402. package/src/server/services/cacheService.test.ts +0 -308
  403. package/src/server/services/httpService.test.js +0 -491
  404. package/src/server/utils/file-form-service.test.js +0 -127
  405. package/src/server/utils/notify.test.ts +0 -37
  406. package/src/server/utils/secure-context/get-trust-store-certs.test.js +0 -19
  407. package/src/server/utils/utils.test.js +0 -69
@@ -1,332 +0,0 @@
1
- import { type Page } from '@defra/forms-model'
2
- import Boom from '@hapi/boom'
3
- import { type ResponseObject, type ResponseToolkit } from '@hapi/hapi'
4
-
5
- import {
6
- findPage,
7
- getCacheService,
8
- getPage,
9
- proceed
10
- } from '~/src/server/plugins/engine/helpers.js'
11
- import { type FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
12
- import { type PageControllerClass } from '~/src/server/plugins/engine/pageControllers/helpers/pages.js'
13
- import { redirectOrMakeHandler } from '~/src/server/plugins/engine/routes/index.js'
14
- import {
15
- type AnyFormRequest,
16
- type OnRequestCallback
17
- } from '~/src/server/plugins/engine/types.js'
18
- import { type FormResponseToolkit } from '~/src/server/routes/types.js'
19
- import { type Services } from '~/src/server/types.js'
20
-
21
- jest.mock('~/src/server/plugins/engine/helpers')
22
-
23
- function buildMockModel(
24
- pagesOverride = [] as Page[],
25
- pagesControllerOverride = [] as PageControllerClass[],
26
- servicesOverride = {} as Services
27
- ) {
28
- return {
29
- def: {
30
- metadata: {
31
- submission: { code: 'TEST-CODE' }
32
- } as { submission: { code: string } },
33
- pages: pagesOverride
34
- },
35
- getFormContext: jest.fn().mockReturnValue({
36
- isForceAccess: false,
37
- data: {}
38
- }),
39
- pages: pagesControllerOverride,
40
- services: servicesOverride
41
- } as unknown as FormModel
42
- }
43
-
44
- describe('redirectOrMakeHandler', () => {
45
- const mockServer = {} as unknown as Parameters<
46
- typeof redirectOrMakeHandler
47
- >[0]['server']
48
- const mockRequest: AnyFormRequest = {
49
- server: mockServer,
50
- app: {},
51
- yar: { flash: () => [] },
52
- params: { path: 'test-path' },
53
- query: {}
54
- } as unknown as AnyFormRequest
55
-
56
- const mockH: FormResponseToolkit = {
57
- redirect: jest.fn(),
58
- view: jest.fn(),
59
- continue: Symbol('continue')
60
- } as unknown as FormResponseToolkit
61
-
62
- let mockPage: PageControllerClass
63
-
64
- const mockModel = buildMockModel()
65
-
66
- const mockMakeHandler = jest
67
- .fn()
68
- .mockResolvedValue({ statusCode: 200 } as ResponseObject)
69
-
70
- beforeEach(() => {
71
- jest.clearAllMocks()
72
- mockRequest.app = { model: mockModel }
73
-
74
- // Reset mock page
75
- mockPage = {
76
- getState: jest.fn().mockResolvedValue({ $$__referenceNumber: 'REF-123' }),
77
- mergeState: jest
78
- .fn()
79
- .mockResolvedValue({ $$__referenceNumber: 'REF-123' }),
80
- getRelevantPath: jest.fn().mockReturnValue('/test-path'),
81
- getSummaryPath: jest.fn().mockReturnValue('/summary'),
82
- getHref: jest.fn().mockReturnValue('/test-href'),
83
- path: '/test-path'
84
- } as unknown as PageControllerClass
85
-
86
- // Reset mock model
87
- mockModel.getFormContext = jest.fn().mockReturnValue({
88
- isForceAccess: false,
89
- data: {},
90
- state: {}
91
- })
92
-
93
- // Setup mocks
94
- ;(getCacheService as jest.Mock).mockReturnValue({
95
- getFlash: jest.fn().mockReturnValue({ errors: [] })
96
- })
97
- ;(getPage as jest.Mock).mockReturnValue(mockPage)
98
- ;(findPage as jest.Mock).mockReturnValue({ next: [] })
99
- ;(proceed as jest.Mock).mockReturnValue({ statusCode: 302 })
100
- })
101
-
102
- describe('onRequest callback functionality', () => {
103
- it('should call onRequest callback when provided', async () => {
104
- const onRequestCallback: OnRequestCallback = jest
105
- .fn()
106
- .mockResolvedValue(undefined)
107
-
108
- await redirectOrMakeHandler(
109
- mockRequest,
110
- mockH,
111
- onRequestCallback,
112
- mockMakeHandler
113
- )
114
-
115
- expect(onRequestCallback).toHaveBeenCalledWith(
116
- mockRequest,
117
- mockH as ResponseToolkit,
118
- expect.objectContaining({
119
- isForceAccess: false,
120
- data: {}
121
- })
122
- )
123
- })
124
-
125
- it('should not call onRequest callback when not provided', async () => {
126
- const onRequestCallback = jest.fn()
127
-
128
- await redirectOrMakeHandler(
129
- mockRequest,
130
- mockH,
131
- undefined,
132
- mockMakeHandler
133
- )
134
-
135
- expect(onRequestCallback).not.toHaveBeenCalled()
136
- })
137
-
138
- it('should return takeover response when onRequest returns takeover response', async () => {
139
- const takeoverResponse = {
140
- statusCode: 302,
141
- headers: { location: '/redirect-url' },
142
- _takeover: true
143
- } as unknown as ResponseObject
144
-
145
- const onRequestCallback: OnRequestCallback = jest
146
- .fn()
147
- .mockResolvedValue(takeoverResponse)
148
-
149
- const result = await redirectOrMakeHandler(
150
- mockRequest,
151
- mockH,
152
- onRequestCallback,
153
- mockMakeHandler
154
- )
155
-
156
- expect(result).toBe(takeoverResponse)
157
- expect(mockMakeHandler).not.toHaveBeenCalled()
158
- })
159
-
160
- it('should continue processing when onRequest returns h.continue', async () => {
161
- const onRequestCallback: OnRequestCallback = jest
162
- .fn()
163
- .mockResolvedValue(mockH.continue)
164
-
165
- await redirectOrMakeHandler(
166
- mockRequest,
167
- mockH,
168
- onRequestCallback,
169
- mockMakeHandler
170
- )
171
-
172
- expect(mockMakeHandler).toHaveBeenCalledWith(mockPage, expect.any(Object))
173
- })
174
-
175
- it('should handle onRequest callback errors', async () => {
176
- const error = new Error('onRequest callback error')
177
- const onRequestCallback: OnRequestCallback = jest
178
- .fn()
179
- .mockRejectedValue(error)
180
-
181
- await expect(
182
- redirectOrMakeHandler(
183
- mockRequest,
184
- mockH,
185
- onRequestCallback,
186
- mockMakeHandler
187
- )
188
- ).rejects.toThrow('onRequest callback error')
189
- })
190
- })
191
-
192
- describe('existing functionality', () => {
193
- it('should throw error when model is missing', async () => {
194
- mockRequest.app = {}
195
-
196
- await expect(
197
- redirectOrMakeHandler(mockRequest, mockH, undefined, mockMakeHandler)
198
- ).rejects.toThrow(Boom.notFound('No model found for /test-path'))
199
- })
200
-
201
- it('should call makeHandler when page is relevant', async () => {
202
- const testPage = {
203
- getState: jest
204
- .fn()
205
- .mockResolvedValue({ $$__referenceNumber: 'REF-123' }),
206
- mergeState: jest
207
- .fn()
208
- .mockResolvedValue({ $$__referenceNumber: 'REF-123' }),
209
- getSummaryPath: jest.fn().mockReturnValue('/summary'),
210
- getHref: jest.fn().mockReturnValue('/test-href'),
211
- getRelevantPath: jest.fn().mockReturnValue('/test-path'),
212
- path: '/test-path'
213
- } as unknown as PageControllerClass
214
- ;(getPage as jest.Mock).mockReturnValue(testPage)
215
-
216
- await redirectOrMakeHandler(
217
- mockRequest,
218
- mockH,
219
- undefined,
220
- mockMakeHandler
221
- )
222
-
223
- expect(mockMakeHandler).toHaveBeenCalledWith(testPage, expect.any(Object))
224
- })
225
-
226
- it('should call makeHandler when context has force access', async () => {
227
- mockModel.getFormContext = jest.fn().mockReturnValue({
228
- isForceAccess: true,
229
- data: {},
230
- state: {}
231
- })
232
-
233
- await redirectOrMakeHandler(
234
- mockRequest,
235
- mockH,
236
- undefined,
237
- mockMakeHandler
238
- )
239
-
240
- expect(mockMakeHandler).toHaveBeenCalledWith(mockPage, expect.any(Object))
241
- })
242
-
243
- it('should redirect when page is not relevant', async () => {
244
- const testPage = {
245
- getState: jest
246
- .fn()
247
- .mockResolvedValue({ $$__referenceNumber: 'REF-123' }),
248
- mergeState: jest
249
- .fn()
250
- .mockResolvedValue({ $$__referenceNumber: 'REF-123' }),
251
- getSummaryPath: jest.fn().mockReturnValue('/summary'),
252
- getHref: jest.fn().mockReturnValue('/test-href'),
253
- getRelevantPath: jest.fn().mockReturnValue('/other-path'),
254
- path: '/test-path'
255
- } as unknown as PageControllerClass
256
- ;(getPage as jest.Mock).mockReturnValue(testPage)
257
-
258
- await redirectOrMakeHandler(
259
- mockRequest,
260
- mockH,
261
- undefined,
262
- mockMakeHandler
263
- )
264
-
265
- expect(proceed).toHaveBeenCalledWith(mockRequest, mockH, '/test-href')
266
- expect(mockMakeHandler).not.toHaveBeenCalled()
267
- })
268
-
269
- it('should set returnUrl when redirecting and next pages exist', async () => {
270
- const testPage = {
271
- getState: jest
272
- .fn()
273
- .mockResolvedValue({ $$__referenceNumber: 'REF-123' }),
274
- mergeState: jest
275
- .fn()
276
- .mockResolvedValue({ $$__referenceNumber: 'REF-123' }),
277
- getSummaryPath: jest.fn().mockReturnValue('/summary'),
278
- getRelevantPath: jest.fn().mockReturnValue('/other-path'),
279
- path: '/test-path',
280
- getHref: jest
281
- .fn()
282
- .mockReturnValueOnce('/summary-href') // First call: for summaryPath (returnUrl)
283
- .mockReturnValueOnce('/relevant-path-href') // Second call: for relevantPath (redirect)
284
- } as unknown as PageControllerClass
285
- ;(getPage as jest.Mock).mockReturnValue(testPage)
286
- ;(findPage as jest.Mock).mockReturnValue({ next: ['next-page'] })
287
-
288
- await redirectOrMakeHandler(
289
- mockRequest,
290
- mockH,
291
- undefined,
292
- mockMakeHandler
293
- )
294
-
295
- expect(mockRequest.query.returnUrl).toBe('/summary-href')
296
- expect(proceed).toHaveBeenCalledWith(
297
- mockRequest,
298
- mockH,
299
- '/relevant-path-href'
300
- )
301
- })
302
-
303
- it('should not set returnUrl when redirecting and no next pages exist', async () => {
304
- const testPage = {
305
- getState: jest
306
- .fn()
307
- .mockResolvedValue({ $$__referenceNumber: 'REF-123' }),
308
- mergeState: jest
309
- .fn()
310
- .mockResolvedValue({ $$__referenceNumber: 'REF-123' }),
311
- getSummaryPath: jest.fn().mockReturnValue('/summary'),
312
- getHref: jest.fn().mockReturnValue('/test-href'),
313
- getRelevantPath: jest.fn().mockReturnValue('/other-path'),
314
- path: '/test-path'
315
- } as unknown as PageControllerClass
316
- ;(getPage as jest.Mock).mockReturnValue(testPage)
317
- const returnUrlBefore = mockRequest.query.returnUrl
318
- ;(findPage as jest.Mock).mockReturnValue({ next: [] })
319
-
320
- await redirectOrMakeHandler(
321
- mockRequest,
322
- mockH,
323
- undefined,
324
- mockMakeHandler
325
- )
326
-
327
- // returnUrl should not be set if next pages don't exist
328
- expect(mockRequest.query.returnUrl).toBe(returnUrlBefore)
329
- expect(proceed).toHaveBeenCalledWith(mockRequest, mockH, '/test-href')
330
- })
331
- })
332
- })
@@ -1,136 +0,0 @@
1
- import {
2
- buildPaymentInfo,
3
- getPaymentContext
4
- } from '~/src/server/plugins/engine/routes/payment-helper.js'
5
- import { get } from '~/src/server/services/httpService.js'
6
-
7
- jest.mock('~/src/server/services/httpService.ts')
8
-
9
- describe('payment helper', () => {
10
- const uuid = '5a54c2fe-da49-4202-8cd3-2121eaca03c3'
11
- it('should throw if no session', async () => {
12
- const mockRequest = {
13
- yar: {
14
- get: jest.fn().mockReturnValueOnce(undefined)
15
- }
16
- }
17
- // @ts-expect-error - partial request mock
18
- await expect(() => getPaymentContext(mockRequest, uuid)).rejects.toThrow(
19
- 'No payment session found for uuid=5a54c2fe-da49-4202-8cd3-2121eaca03c3'
20
- )
21
- })
22
-
23
- it('should throw if no payment id', async () => {
24
- const mockRequest = {
25
- yar: {
26
- get: jest.fn().mockReturnValueOnce({})
27
- }
28
- }
29
- // @ts-expect-error - partial request mock
30
- await expect(() => getPaymentContext(mockRequest, uuid)).rejects.toThrow(
31
- 'No paymentId in session'
32
- )
33
- })
34
-
35
- it('should get context successfully', async () => {
36
- const mockRequest = {
37
- yar: {
38
- get: jest.fn().mockReturnValueOnce({
39
- paymentId: 'payment-id',
40
- isLivePayment: false,
41
- formId: 'formid'
42
- })
43
- }
44
- }
45
-
46
- const getPaymentStatusApiResult = {
47
- payment_id: 'payment-id-12345',
48
- _links: {
49
- next_url: {
50
- href: 'http://next-url-href/payment'
51
- }
52
- },
53
- state: {
54
- status: 'created'
55
- }
56
- }
57
-
58
- jest.mocked(get).mockResolvedValueOnce({
59
- res: /** @type {IncomingMessage} */ ({
60
- statusCode: 200,
61
- headers: {}
62
- }),
63
- payload: getPaymentStatusApiResult,
64
- error: undefined
65
- })
66
-
67
- const mockFormsService = {
68
- getFormSecret: () => 'secret-value'
69
- }
70
- // @ts-expect-error - partial request mock
71
- const res = await getPaymentContext(mockRequest, uuid, mockFormsService)
72
- expect(res).toEqual({
73
- paymentStatus: {
74
- paymentId: 'payment-id-12345',
75
- _links: {
76
- next_url: {
77
- href: 'http://next-url-href/payment'
78
- }
79
- },
80
- state: {
81
- status: 'created'
82
- }
83
- },
84
- session: {
85
- formId: 'formid',
86
- isLivePayment: false,
87
- paymentId: 'payment-id'
88
- },
89
- sessionKey: 'payment-5a54c2fe-da49-4202-8cd3-2121eaca03c3'
90
- })
91
- })
92
-
93
- it('should create logging info for a test payment', () => {
94
- const res = buildPaymentInfo(
95
- 'action1',
96
- 'outcome1',
97
- 'reason1',
98
- false,
99
- 'pay-123'
100
- )
101
- expect(res).toEqual({
102
- event: {
103
- category: 'payment',
104
- action: 'action1',
105
- outcome: 'outcome1',
106
- reason: 'reason1',
107
- type: 'test',
108
- reference: 'pay-123'
109
- }
110
- })
111
- })
112
-
113
- it('should create logging info for a live payment', () => {
114
- const res = buildPaymentInfo(
115
- 'action2',
116
- 'outcome2',
117
- 'reason2',
118
- true,
119
- 'pay-123'
120
- )
121
- expect(res).toEqual({
122
- event: {
123
- category: 'payment',
124
- action: 'action2',
125
- outcome: 'outcome2',
126
- reason: 'reason2',
127
- type: 'live',
128
- reference: 'pay-123'
129
- }
130
- })
131
- })
132
- })
133
-
134
- /**
135
- * @import { IncomingMessage } from 'node:http'
136
- */
@@ -1,180 +0,0 @@
1
- import { StatusCodes } from 'http-status-codes'
2
-
3
- import { createServer } from '~/src/server/index.js'
4
- import { getPaymentContext } from '~/src/server/plugins/engine/routes/payment-helper.js'
5
- import { renderResponse } from '~/test/helpers/component-helpers.js'
6
-
7
- jest.mock('~/src/server/plugins/engine/routes/payment-helper.js')
8
-
9
- describe('Payment routes', () => {
10
- /** @type {Server} */
11
- let server
12
-
13
- beforeAll(async () => {
14
- server = await createServer()
15
- await server.initialize()
16
- })
17
-
18
- beforeEach(() => {
19
- jest.resetAllMocks()
20
- })
21
-
22
- describe('Return route /payment-callback', () => {
23
- const uuid = '06a5b11e-e3e0-48a2-8ac3-56c0fcb6c20d'
24
- const options = {
25
- method: 'get',
26
- url: `/payment-callback?uuid=${uuid}`
27
- }
28
-
29
- const paymentSessionData = {
30
- uuid,
31
- formId: 'form-id',
32
- reference: 'form-ref-123',
33
- paymentId: 'payment-id',
34
- amount: 123,
35
- description: 'Payment desc',
36
- isLivePayment: false,
37
- componentName: 'my-component',
38
- returnUrl: 'http://host.com/return-url',
39
- failureUrl: 'http://host.com/failure-url'
40
- }
41
- const sessionKey = 'session-key'
42
-
43
- test.each([
44
- { status: 'capturable', finalUrl: 'http://host.com/return-url' },
45
- { status: 'success', finalUrl: 'http://host.com/return-url' },
46
- { status: 'cancelled', finalUrl: 'http://host.com/failure-url' },
47
- { status: 'failed', finalUrl: 'http://host.com/failure-url' },
48
- { status: 'error', finalUrl: 'http://host.com/failure-url' },
49
- { status: 'created', finalUrl: '/next-url' },
50
- { status: 'started', finalUrl: '/next-url' },
51
- { status: 'submitted', finalUrl: '/next-url' }
52
- ])('should handle payment status of $row.status', async (row) => {
53
- const paymentStatus = {
54
- paymentId: 'new-payment-id',
55
- amount: 125,
56
- _links: {
57
- next_url: {
58
- href: '/next-url',
59
- method: 'get'
60
- },
61
- self: {
62
- href: '/self',
63
- method: 'get'
64
- }
65
- },
66
- state: /** @type {PaymentResponseState} */ ({
67
- status: row.status,
68
- finished: true
69
- })
70
- }
71
- jest.mocked(getPaymentContext).mockResolvedValueOnce({
72
- session: paymentSessionData,
73
- sessionKey,
74
- paymentStatus
75
- })
76
- const { response } = await renderResponse(server, options)
77
-
78
- expect(response.statusCode).toBe(StatusCodes.SEE_OTHER)
79
- expect(response.headers.location).toBe(row.finalUrl)
80
- })
81
-
82
- it('should throw if nextUrl is missing', async () => {
83
- const paymentStatus = {
84
- paymentId: 'new-payment-id',
85
- _links: {
86
- next_url: {},
87
- self: {
88
- href: '/self',
89
- method: 'get'
90
- }
91
- },
92
- state: /** @type {PaymentResponseState} */ ({
93
- status: 'created',
94
- finished: true
95
- })
96
- }
97
- jest.mocked(getPaymentContext).mockResolvedValueOnce({
98
- session: paymentSessionData,
99
- sessionKey,
100
- // @ts-expect-error - deliberate missing element from object
101
- paymentStatus
102
- })
103
- const { response } = await renderResponse(server, options)
104
-
105
- expect(response.statusCode).toBe(StatusCodes.BAD_REQUEST)
106
- // @ts-expect-error - error object
107
- expect(response.result?.message).toBe(
108
- "Payment in state 'created' but no next_url available"
109
- )
110
- })
111
-
112
- it('should throw if invalid status', async () => {
113
- const paymentStatus = {
114
- paymentId: 'new-payment-id',
115
- _links: {
116
- next_url: {
117
- href: '/next-url',
118
- method: 'get'
119
- },
120
- self: {
121
- href: '/self',
122
- method: 'get'
123
- }
124
- },
125
- state: {
126
- status: 'invalid',
127
- finished: true
128
- }
129
- }
130
- jest.mocked(getPaymentContext).mockResolvedValueOnce({
131
- session: paymentSessionData,
132
- sessionKey,
133
- // @ts-expect-error - deliberate invalid value which doesnt meet type
134
- paymentStatus
135
- })
136
- const { response } = await renderResponse(server, options)
137
-
138
- expect(response.statusCode).toBe(StatusCodes.INTERNAL_SERVER_ERROR)
139
- // @ts-expect-error - error object
140
- expect(response.result?.message).toBe('Unknown payment status: invalid')
141
- })
142
-
143
- it('should handle payment with email from GOV.UK Pay response', async () => {
144
- const paymentStatus = {
145
- paymentId: 'new-payment-id',
146
- payment_id: 'new-payment-id',
147
- amount: 125,
148
- email: 'payer@example.com',
149
- _links: {
150
- next_url: {
151
- href: '/next-url',
152
- method: 'get'
153
- },
154
- self: {
155
- href: '/self',
156
- method: 'get'
157
- }
158
- },
159
- state: /** @type {PaymentResponseState} */ ({
160
- status: 'success',
161
- finished: true
162
- })
163
- }
164
- jest.mocked(getPaymentContext).mockResolvedValueOnce({
165
- session: paymentSessionData,
166
- sessionKey,
167
- paymentStatus
168
- })
169
- const { response } = await renderResponse(server, options)
170
-
171
- expect(response.statusCode).toBe(StatusCodes.SEE_OTHER)
172
- expect(response.headers.location).toBe('http://host.com/return-url')
173
- })
174
- })
175
- })
176
-
177
- /**
178
- * @import { Server } from '@hapi/hapi'
179
- * @import { PaymentResponseState } from '~/src/server/plugins/payment/types.js'
180
- */