@defra/forms-engine-plugin 4.7.2 → 4.7.3

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 (402) hide show
  1. package/.server/client/javascripts/geospatial-map.d.ts +6 -6
  2. package/.server/client/javascripts/geospatial-map.js +3 -3
  3. package/.server/client/javascripts/location-map.d.ts +1 -1
  4. package/.server/client/javascripts/location-map.js +1 -1
  5. package/.server/client/javascripts/map.d.ts +1 -1
  6. package/.server/client/javascripts/map.js +1 -1
  7. package/.server/client/javascripts/shared.d.ts +7 -7
  8. package/.server/server/index.d.ts +1 -1
  9. package/.server/server/plugins/crumb.d.ts +1 -1
  10. package/.server/server/plugins/engine/beta/form-context.d.ts +6 -6
  11. package/.server/server/plugins/engine/components/AutocompleteField.d.ts +4 -4
  12. package/.server/server/plugins/engine/components/CheckboxesField.d.ts +2 -2
  13. package/.server/server/plugins/engine/components/CheckboxesField.js +2 -2
  14. package/.server/server/plugins/engine/components/CheckboxesField.js.map +1 -1
  15. package/.server/server/plugins/engine/components/ComponentBase.d.ts +5 -5
  16. package/.server/server/plugins/engine/components/ComponentCollection.d.ts +8 -8
  17. package/.server/server/plugins/engine/components/DatePartsField.d.ts +11 -11
  18. package/.server/server/plugins/engine/components/DeclarationField.d.ts +3 -3
  19. package/.server/server/plugins/engine/components/Details.d.ts +1 -1
  20. package/.server/server/plugins/engine/components/EastingNorthingField.d.ts +22 -22
  21. package/.server/server/plugins/engine/components/EmailAddressField.d.ts +4 -4
  22. package/.server/server/plugins/engine/components/FileUploadField.d.ts +3 -3
  23. package/.server/server/plugins/engine/components/FormComponent.d.ts +10 -10
  24. package/.server/server/plugins/engine/components/GeospatialField.d.ts +6 -6
  25. package/.server/server/plugins/engine/components/HiddenField.d.ts +2 -2
  26. package/.server/server/plugins/engine/components/Html.d.ts +1 -1
  27. package/.server/server/plugins/engine/components/InsetText.d.ts +1 -1
  28. package/.server/server/plugins/engine/components/LatLongField.d.ts +22 -22
  29. package/.server/server/plugins/engine/components/List.d.ts +8 -8
  30. package/.server/server/plugins/engine/components/ListFormComponent.d.ts +10 -10
  31. package/.server/server/plugins/engine/components/LocationFieldBase.d.ts +6 -6
  32. package/.server/server/plugins/engine/components/LocationFieldHelpers.d.ts +14 -14
  33. package/.server/server/plugins/engine/components/Markdown.d.ts +1 -1
  34. package/.server/server/plugins/engine/components/MonthYearField.d.ts +11 -11
  35. package/.server/server/plugins/engine/components/MultilineTextField.d.ts +5 -5
  36. package/.server/server/plugins/engine/components/NationalGridFieldNumberField.d.ts +1 -1
  37. package/.server/server/plugins/engine/components/NumberField.d.ts +3 -3
  38. package/.server/server/plugins/engine/components/OsGridRefField.d.ts +1 -1
  39. package/.server/server/plugins/engine/components/PaymentField.d.ts +12 -12
  40. package/.server/server/plugins/engine/components/RadiosField.d.ts +1 -1
  41. package/.server/server/plugins/engine/components/SelectField.d.ts +4 -4
  42. package/.server/server/plugins/engine/components/SelectionControlField.d.ts +10 -10
  43. package/.server/server/plugins/engine/components/TelephoneNumberField.d.ts +4 -4
  44. package/.server/server/plugins/engine/components/TextField.d.ts +2 -2
  45. package/.server/server/plugins/engine/components/UkAddressField.d.ts +11 -11
  46. package/.server/server/plugins/engine/components/YesNoField.d.ts +2 -2
  47. package/.server/server/plugins/engine/components/helpers/__stubs__/geospatial.d.ts +1 -1
  48. package/.server/server/plugins/engine/components/helpers/components.d.ts +5 -5
  49. package/.server/server/plugins/engine/components/helpers/geospatial.d.ts +1 -1
  50. package/.server/server/plugins/engine/components/index.d.ts +27 -27
  51. package/.server/server/plugins/engine/components/types.d.ts +1 -1
  52. package/.server/server/plugins/engine/configureEnginePlugin.d.ts +4 -4
  53. package/.server/server/plugins/engine/date-helper.d.ts +1 -1
  54. package/.server/server/plugins/engine/helpers.d.ts +8 -8
  55. package/.server/server/plugins/engine/index.d.ts +5 -5
  56. package/.server/server/plugins/engine/models/FormModel.d.ts +6 -6
  57. package/.server/server/plugins/engine/models/SummaryViewModel.d.ts +6 -6
  58. package/.server/server/plugins/engine/models/index.d.ts +2 -2
  59. package/.server/server/plugins/engine/models/types.d.ts +4 -4
  60. package/.server/server/plugins/engine/options.d.ts +1 -1
  61. package/.server/server/plugins/engine/options.js +1 -1
  62. package/.server/server/plugins/engine/options.test.js +1 -1
  63. package/.server/server/plugins/engine/outputFormatters/adapter/v1.d.ts +4 -4
  64. package/.server/server/plugins/engine/outputFormatters/human/v1.d.ts +4 -4
  65. package/.server/server/plugins/engine/outputFormatters/index.d.ts +5 -5
  66. package/.server/server/plugins/engine/outputFormatters/machine/v1.d.ts +4 -4
  67. package/.server/server/plugins/engine/outputFormatters/machine/v2.d.ts +4 -4
  68. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.d.ts +8 -8
  69. package/.server/server/plugins/engine/pageControllers/PageController.d.ts +6 -6
  70. package/.server/server/plugins/engine/pageControllers/QuestionPageController.d.ts +8 -8
  71. package/.server/server/plugins/engine/pageControllers/RepeatPageController.d.ts +5 -5
  72. package/.server/server/plugins/engine/pageControllers/StartPageController.d.ts +4 -4
  73. package/.server/server/plugins/engine/pageControllers/StatusPageController.d.ts +4 -4
  74. package/.server/server/plugins/engine/pageControllers/SummaryPageController.d.ts +5 -5
  75. package/.server/server/plugins/engine/pageControllers/TerminalPageController.d.ts +3 -3
  76. package/.server/server/plugins/engine/pageControllers/__stubs__/request.d.ts +2 -2
  77. package/.server/server/plugins/engine/pageControllers/errors.d.ts +1 -1
  78. package/.server/server/plugins/engine/pageControllers/helpers/pages.d.ts +2 -2
  79. package/.server/server/plugins/engine/pageControllers/helpers/state.d.ts +5 -5
  80. package/.server/server/plugins/engine/pageControllers/helpers/state.js +1 -1
  81. package/.server/server/plugins/engine/pageControllers/helpers/state.js.map +1 -1
  82. package/.server/server/plugins/engine/pageControllers/helpers/submission.d.ts +1 -1
  83. package/.server/server/plugins/engine/pageControllers/index.d.ts +7 -7
  84. package/.server/server/plugins/engine/plugin.d.ts +1 -1
  85. package/.server/server/plugins/engine/routes/file-upload.d.ts +1 -1
  86. package/.server/server/plugins/engine/routes/index.d.ts +3 -3
  87. package/.server/server/plugins/engine/routes/payment-helper.d.ts +3 -3
  88. package/.server/server/plugins/engine/routes/payment-helper.js +2 -2
  89. package/.server/server/plugins/engine/routes/payment.js +5 -5
  90. package/.server/server/plugins/engine/routes/payment.test.js +1 -1
  91. package/.server/server/plugins/engine/routes/questions.d.ts +2 -2
  92. package/.server/server/plugins/engine/routes/repeaters/item-delete.d.ts +2 -2
  93. package/.server/server/plugins/engine/routes/repeaters/summary.d.ts +2 -2
  94. package/.server/server/plugins/engine/services/index.d.ts +3 -3
  95. package/.server/server/plugins/engine/services/notifyService.d.ts +4 -4
  96. package/.server/server/plugins/engine/services/uploadService.d.ts +2 -2
  97. package/.server/server/plugins/engine/services/uploadService.js +1 -1
  98. package/.server/server/plugins/engine/types/index.d.ts +10 -10
  99. package/.server/server/plugins/engine/types/schema.d.ts +1 -1
  100. package/.server/server/plugins/engine/types.d.ts +25 -16
  101. package/.server/server/plugins/engine/types.js.map +1 -1
  102. package/.server/server/plugins/engine/validationHelpers.d.ts +2 -2
  103. package/.server/server/plugins/engine/vision.d.ts +1 -1
  104. package/.server/server/plugins/map/index.d.ts +1 -1
  105. package/.server/server/plugins/map/index.js +1 -1
  106. package/.server/server/plugins/map/routes/get-os-token.d.ts +11 -1
  107. package/.server/server/plugins/map/routes/get-os-token.js +12 -2
  108. package/.server/server/plugins/map/routes/get-os-token.js.map +1 -1
  109. package/.server/server/plugins/map/routes/index.d.ts +4 -4
  110. package/.server/server/plugins/map/routes/index.js +3 -2
  111. package/.server/server/plugins/map/routes/index.js.map +1 -1
  112. package/.server/server/plugins/map/service.d.ts +1 -1
  113. package/.server/server/plugins/map/service.js +5 -2
  114. package/.server/server/plugins/map/service.js.map +1 -1
  115. package/.server/server/plugins/map/test/__stubs__/find.d.ts +1 -1
  116. package/.server/server/plugins/map/test/__stubs__/find.js +1 -1
  117. package/.server/server/plugins/nunjucks/context.d.ts +2 -2
  118. package/.server/server/plugins/nunjucks/context.js +2 -2
  119. package/.server/server/plugins/nunjucks/context.test.js +1 -1
  120. package/.server/server/plugins/nunjucks/enviroment.test.js +1 -1
  121. package/.server/server/plugins/nunjucks/environment.d.ts +3 -3
  122. package/.server/server/plugins/nunjucks/environment.js +3 -3
  123. package/.server/server/plugins/nunjucks/filters/answer.d.ts +1 -1
  124. package/.server/server/plugins/nunjucks/filters/answer.js +2 -2
  125. package/.server/server/plugins/nunjucks/filters/answer.test.js +1 -1
  126. package/.server/server/plugins/nunjucks/filters/evaluate.d.ts +1 -1
  127. package/.server/server/plugins/nunjucks/filters/evaluate.js +1 -1
  128. package/.server/server/plugins/nunjucks/filters/field.d.ts +1 -1
  129. package/.server/server/plugins/nunjucks/filters/field.js +1 -1
  130. package/.server/server/plugins/nunjucks/filters/field.test.js +1 -1
  131. package/.server/server/plugins/nunjucks/filters/href.d.ts +1 -1
  132. package/.server/server/plugins/nunjucks/filters/href.js +1 -1
  133. package/.server/server/plugins/nunjucks/filters/href.test.js +1 -1
  134. package/.server/server/plugins/nunjucks/filters/index.d.ts +8 -8
  135. package/.server/server/plugins/nunjucks/filters/page.d.ts +1 -1
  136. package/.server/server/plugins/nunjucks/filters/page.js +1 -1
  137. package/.server/server/plugins/nunjucks/filters/page.test.js +1 -1
  138. package/.server/server/plugins/nunjucks/index.d.ts +3 -3
  139. package/.server/server/plugins/nunjucks/render.d.ts +2 -2
  140. package/.server/server/plugins/nunjucks/render.js +1 -1
  141. package/.server/server/plugins/nunjucks/types.d.ts +1 -1
  142. package/.server/server/plugins/nunjucks/types.js +1 -1
  143. package/.server/server/plugins/payment/helper.d.ts +2 -2
  144. package/.server/server/plugins/payment/helper.js +1 -1
  145. package/.server/server/plugins/payment/service.d.ts +3 -3
  146. package/.server/server/plugins/payment/service.js +1 -1
  147. package/.server/server/plugins/postcode-lookup/index.d.ts +1 -1
  148. package/.server/server/plugins/postcode-lookup/index.js +1 -1
  149. package/.server/server/plugins/postcode-lookup/models/index.d.ts +6 -6
  150. package/.server/server/plugins/postcode-lookup/models/index.js +1 -1
  151. package/.server/server/plugins/postcode-lookup/routes/index.d.ts +6 -6
  152. package/.server/server/plugins/postcode-lookup/routes/index.js +15 -15
  153. package/.server/server/plugins/postcode-lookup/routes/index.js.map +1 -1
  154. package/.server/server/plugins/postcode-lookup/service.d.ts +1 -1
  155. package/.server/server/plugins/postcode-lookup/service.js +5 -2
  156. package/.server/server/plugins/postcode-lookup/service.js.map +1 -1
  157. package/.server/server/plugins/postcode-lookup/types.js +1 -1
  158. package/.server/server/routes/index.d.ts +2 -2
  159. package/.server/server/routes/types.d.ts +1 -1
  160. package/.server/server/schemas/index.d.ts +2 -2
  161. package/.server/server/services/cacheService.d.ts +8 -8
  162. package/.server/server/services/cacheService.js +2 -5
  163. package/.server/server/services/cacheService.js.map +1 -1
  164. package/.server/server/services/httpService.test.js +1 -1
  165. package/.server/server/services/index.d.ts +1 -1
  166. package/.server/server/types.d.ts +7 -7
  167. package/.server/server/utils/file-form-service.d.ts +2 -2
  168. package/.server/server/utils/file-form-service.js +1 -1
  169. package/package.json +8 -4
  170. package/src/client/javascripts/application.js +1 -1
  171. package/src/client/javascripts/geospatial-map.js +4 -4
  172. package/src/client/javascripts/location-map.js +2 -2
  173. package/src/client/javascripts/map.js +3 -3
  174. package/src/client/javascripts/shared.js +7 -7
  175. package/src/index.ts +3 -3
  176. package/src/server/common/helpers/logging/logger-options.ts +1 -1
  177. package/src/server/common/helpers/logging/logger.ts +1 -1
  178. package/src/server/common/helpers/logging/request-logger.ts +1 -1
  179. package/src/server/common/helpers/logging/request-tracing.js +1 -1
  180. package/src/server/common/helpers/redis-client.js +2 -2
  181. package/src/server/index.ts +13 -13
  182. package/src/server/plugins/crumb.ts +2 -2
  183. package/src/server/plugins/engine/beta/form-context.ts +9 -9
  184. package/src/server/plugins/engine/components/AutocompleteField.ts +3 -3
  185. package/src/server/plugins/engine/components/CheckboxesField.ts +7 -8
  186. package/src/server/plugins/engine/components/ComponentBase.ts +5 -5
  187. package/src/server/plugins/engine/components/ComponentCollection.ts +9 -9
  188. package/src/server/plugins/engine/components/DatePartsField.ts +8 -8
  189. package/src/server/plugins/engine/components/DeclarationField.ts +3 -3
  190. package/src/server/plugins/engine/components/Details.ts +1 -1
  191. package/src/server/plugins/engine/components/EastingNorthingField.ts +9 -9
  192. package/src/server/plugins/engine/components/EmailAddressField.ts +3 -3
  193. package/src/server/plugins/engine/components/FileUploadField.ts +6 -6
  194. package/src/server/plugins/engine/components/FormComponent.ts +4 -4
  195. package/src/server/plugins/engine/components/GeospatialField.ts +5 -5
  196. package/src/server/plugins/engine/components/HiddenField.ts +4 -4
  197. package/src/server/plugins/engine/components/Html.ts +1 -1
  198. package/src/server/plugins/engine/components/InsetText.ts +1 -1
  199. package/src/server/plugins/engine/components/LatLongField.ts +9 -9
  200. package/src/server/plugins/engine/components/List.ts +2 -2
  201. package/src/server/plugins/engine/components/ListFormComponent.ts +4 -4
  202. package/src/server/plugins/engine/components/LocationFieldBase.ts +5 -5
  203. package/src/server/plugins/engine/components/LocationFieldHelpers.ts +5 -5
  204. package/src/server/plugins/engine/components/Markdown.ts +1 -1
  205. package/src/server/plugins/engine/components/MonthYearField.ts +8 -8
  206. package/src/server/plugins/engine/components/MultilineTextField.ts +4 -4
  207. package/src/server/plugins/engine/components/NationalGridFieldNumberField.ts +2 -2
  208. package/src/server/plugins/engine/components/NumberField.ts +3 -3
  209. package/src/server/plugins/engine/components/OsGridRefField.ts +2 -2
  210. package/src/server/plugins/engine/components/PaymentField.ts +8 -8
  211. package/src/server/plugins/engine/components/RadiosField.ts +1 -1
  212. package/src/server/plugins/engine/components/SelectField.ts +2 -2
  213. package/src/server/plugins/engine/components/SelectionControlField.ts +4 -4
  214. package/src/server/plugins/engine/components/TelephoneNumberField.ts +4 -4
  215. package/src/server/plugins/engine/components/TextField.ts +3 -3
  216. package/src/server/plugins/engine/components/UkAddressField.ts +7 -7
  217. package/src/server/plugins/engine/components/YesNoField.ts +5 -5
  218. package/src/server/plugins/engine/components/helpers/__stubs__/geospatial.ts +1 -1
  219. package/src/server/plugins/engine/components/helpers/components.ts +8 -8
  220. package/src/server/plugins/engine/components/helpers/geospatial.ts +1 -1
  221. package/src/server/plugins/engine/components/index.ts +27 -27
  222. package/src/server/plugins/engine/components/types.ts +1 -1
  223. package/src/server/plugins/engine/configureEnginePlugin.ts +10 -10
  224. package/src/server/plugins/engine/date-helper.ts +1 -1
  225. package/src/server/plugins/engine/helpers.ts +8 -8
  226. package/src/server/plugins/engine/index.ts +8 -8
  227. package/src/server/plugins/engine/models/FormModel.ts +15 -15
  228. package/src/server/plugins/engine/models/SummaryViewModel.ts +10 -10
  229. package/src/server/plugins/engine/models/index.ts +2 -2
  230. package/src/server/plugins/engine/models/types.ts +4 -4
  231. package/src/server/plugins/engine/options.js +3 -3
  232. package/src/server/plugins/engine/outputFormatters/adapter/v1.ts +6 -6
  233. package/src/server/plugins/engine/outputFormatters/human/v1.ts +9 -9
  234. package/src/server/plugins/engine/outputFormatters/index.ts +8 -8
  235. package/src/server/plugins/engine/outputFormatters/machine/v1.ts +7 -7
  236. package/src/server/plugins/engine/outputFormatters/machine/v2.ts +6 -6
  237. package/src/server/plugins/engine/pageControllers/FileUploadPageController.ts +9 -9
  238. package/src/server/plugins/engine/pageControllers/PageController.ts +7 -7
  239. package/src/server/plugins/engine/pageControllers/QuestionPageController.ts +13 -13
  240. package/src/server/plugins/engine/pageControllers/RepeatPageController.ts +6 -6
  241. package/src/server/plugins/engine/pageControllers/StartPageController.ts +3 -3
  242. package/src/server/plugins/engine/pageControllers/StatusPageController.ts +5 -5
  243. package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +12 -12
  244. package/src/server/plugins/engine/pageControllers/TerminalPageController.ts +3 -3
  245. package/src/server/plugins/engine/pageControllers/__stubs__/request.ts +3 -3
  246. package/src/server/plugins/engine/pageControllers/__stubs__/server.ts +2 -2
  247. package/src/server/plugins/engine/pageControllers/errors.ts +1 -1
  248. package/src/server/plugins/engine/pageControllers/helpers/pages.ts +2 -2
  249. package/src/server/plugins/engine/pageControllers/helpers/state.ts +9 -9
  250. package/src/server/plugins/engine/pageControllers/helpers/submission.ts +5 -5
  251. package/src/server/plugins/engine/pageControllers/index.ts +7 -7
  252. package/src/server/plugins/engine/pageControllers/validationOptions.ts +1 -1
  253. package/src/server/plugins/engine/plugin.ts +14 -14
  254. package/src/server/plugins/engine/routes/file-upload.ts +2 -2
  255. package/src/server/plugins/engine/routes/index.ts +10 -10
  256. package/src/server/plugins/engine/routes/payment-helper.js +4 -4
  257. package/src/server/plugins/engine/routes/payment.js +9 -9
  258. package/src/server/plugins/engine/routes/questions.ts +10 -10
  259. package/src/server/plugins/engine/routes/repeaters/item-delete.ts +6 -6
  260. package/src/server/plugins/engine/routes/repeaters/summary.ts +5 -5
  261. package/src/server/plugins/engine/services/formSubmissionService.js +2 -2
  262. package/src/server/plugins/engine/services/index.js +3 -3
  263. package/src/server/plugins/engine/services/localFormsService.js +2 -2
  264. package/src/server/plugins/engine/services/notifyService.ts +9 -9
  265. package/src/server/plugins/engine/services/uploadService.js +3 -3
  266. package/src/server/plugins/engine/types/index.ts +10 -10
  267. package/src/server/plugins/engine/types/schema.ts +2 -2
  268. package/src/server/plugins/engine/types.ts +22 -17
  269. package/src/server/plugins/engine/validationHelpers.ts +3 -3
  270. package/src/server/plugins/engine/vision.ts +3 -3
  271. package/src/server/plugins/map/index.js +2 -2
  272. package/src/server/plugins/map/routes/get-os-token.js +15 -3
  273. package/src/server/plugins/map/routes/index.js +7 -5
  274. package/src/server/plugins/map/service.js +7 -4
  275. package/src/server/plugins/map/test/__stubs__/find.js +1 -1
  276. package/src/server/plugins/nunjucks/context.js +5 -5
  277. package/src/server/plugins/nunjucks/environment.js +6 -6
  278. package/src/server/plugins/nunjucks/filters/answer.js +3 -3
  279. package/src/server/plugins/nunjucks/filters/evaluate.js +2 -2
  280. package/src/server/plugins/nunjucks/filters/field.js +1 -1
  281. package/src/server/plugins/nunjucks/filters/href.js +2 -2
  282. package/src/server/plugins/nunjucks/filters/index.js +8 -8
  283. package/src/server/plugins/nunjucks/filters/page.js +1 -1
  284. package/src/server/plugins/nunjucks/index.js +3 -3
  285. package/src/server/plugins/nunjucks/plugin.js +3 -3
  286. package/src/server/plugins/nunjucks/render.js +2 -2
  287. package/src/server/plugins/nunjucks/types.js +1 -1
  288. package/src/server/plugins/payment/helper.js +2 -2
  289. package/src/server/plugins/payment/service.js +4 -4
  290. package/src/server/plugins/postcode-lookup/index.js +2 -2
  291. package/src/server/plugins/postcode-lookup/models/index.js +3 -3
  292. package/src/server/plugins/postcode-lookup/routes/index.js +24 -14
  293. package/src/server/plugins/postcode-lookup/service.js +7 -4
  294. package/src/server/plugins/postcode-lookup/types.js +1 -1
  295. package/src/server/plugins/session.ts +1 -1
  296. package/src/server/routes/index.ts +2 -2
  297. package/src/server/routes/public.ts +1 -1
  298. package/src/server/routes/types.ts +1 -1
  299. package/src/server/schemas/index.ts +2 -2
  300. package/src/server/secure-context.js +1 -1
  301. package/src/server/services/cacheService.ts +13 -18
  302. package/src/server/services/httpService.ts +1 -1
  303. package/src/server/services/index.ts +1 -1
  304. package/src/server/types.ts +7 -7
  305. package/src/server/utils/notify.ts +2 -2
  306. package/src/server/utils/utils.js +1 -1
  307. package/src/typings/hapi/index.d.ts +4 -4
  308. package/src/typings/joi/index.d.ts +1 -1
  309. package/src/server/common/helpers/logging/logger-options.test.ts +0 -50
  310. package/src/server/index.test.ts +0 -644
  311. package/src/server/plugins/engine/beta/form-context.test.ts +0 -373
  312. package/src/server/plugins/engine/components/AutocompleteField.test.ts +0 -362
  313. package/src/server/plugins/engine/components/CheckboxesField.test.ts +0 -486
  314. package/src/server/plugins/engine/components/DatePartsField.test.ts +0 -927
  315. package/src/server/plugins/engine/components/DeclarationField.test.ts +0 -560
  316. package/src/server/plugins/engine/components/Details.test.ts +0 -49
  317. package/src/server/plugins/engine/components/EastingNorthingField.test.ts +0 -727
  318. package/src/server/plugins/engine/components/EmailAddressField.test.ts +0 -445
  319. package/src/server/plugins/engine/components/FileUploadField.test.ts +0 -1079
  320. package/src/server/plugins/engine/components/GeospatialField.test.ts +0 -380
  321. package/src/server/plugins/engine/components/HiddenField.test.ts +0 -188
  322. package/src/server/plugins/engine/components/Html.test.ts +0 -48
  323. package/src/server/plugins/engine/components/InsetText.test.ts +0 -48
  324. package/src/server/plugins/engine/components/LatLongField.test.ts +0 -898
  325. package/src/server/plugins/engine/components/List.test.ts +0 -79
  326. package/src/server/plugins/engine/components/LocationFieldBase.test.ts +0 -253
  327. package/src/server/plugins/engine/components/LocationFieldHelpers.test.ts +0 -743
  328. package/src/server/plugins/engine/components/Markdown.test.ts +0 -48
  329. package/src/server/plugins/engine/components/MonthYearField.test.ts +0 -617
  330. package/src/server/plugins/engine/components/MultilineTextField.test.ts +0 -647
  331. package/src/server/plugins/engine/components/NationalGridFieldNumberField.test.ts +0 -449
  332. package/src/server/plugins/engine/components/NumberField.test.ts +0 -723
  333. package/src/server/plugins/engine/components/OsGridRefField.test.ts +0 -460
  334. package/src/server/plugins/engine/components/PaymentField.test.ts +0 -745
  335. package/src/server/plugins/engine/components/RadiosField.test.ts +0 -297
  336. package/src/server/plugins/engine/components/SelectField.test.ts +0 -289
  337. package/src/server/plugins/engine/components/TelephoneNumberField.test.ts +0 -384
  338. package/src/server/plugins/engine/components/TextField.test.ts +0 -521
  339. package/src/server/plugins/engine/components/UkAddressField.test.ts +0 -806
  340. package/src/server/plugins/engine/components/YesNoField.test.ts +0 -256
  341. package/src/server/plugins/engine/components/helpers/components.test.ts +0 -399
  342. package/src/server/plugins/engine/components/helpers/geospatial.test.js +0 -55
  343. package/src/server/plugins/engine/components/helpers/helpers.test.ts +0 -219
  344. package/src/server/plugins/engine/date-helper.test.ts +0 -47
  345. package/src/server/plugins/engine/helpers.test.ts +0 -868
  346. package/src/server/plugins/engine/models/FormModel.test.ts +0 -725
  347. package/src/server/plugins/engine/models/SummaryViewModel.test.ts +0 -472
  348. package/src/server/plugins/engine/options.test.js +0 -63
  349. package/src/server/plugins/engine/outputFormatters/adapter/v1.location.test.ts +0 -356
  350. package/src/server/plugins/engine/outputFormatters/adapter/v1.test.ts +0 -871
  351. package/src/server/plugins/engine/outputFormatters/human/v1.payment.test.ts +0 -147
  352. package/src/server/plugins/engine/outputFormatters/human/v1.test.ts +0 -145
  353. package/src/server/plugins/engine/outputFormatters/index.test.ts +0 -17
  354. package/src/server/plugins/engine/outputFormatters/machine/v1.test.ts +0 -268
  355. package/src/server/plugins/engine/outputFormatters/machine/v2.location.test.ts +0 -341
  356. package/src/server/plugins/engine/outputFormatters/machine/v2.payment.test.ts +0 -115
  357. package/src/server/plugins/engine/outputFormatters/machine/v2.test.ts +0 -311
  358. package/src/server/plugins/engine/pageControllers/FileUploadPageController.test.ts +0 -1372
  359. package/src/server/plugins/engine/pageControllers/PageController.test.ts +0 -246
  360. package/src/server/plugins/engine/pageControllers/QuestionPageController.test.ts +0 -1686
  361. package/src/server/plugins/engine/pageControllers/RepeatPageController.test.ts +0 -279
  362. package/src/server/plugins/engine/pageControllers/StartPageController.test.ts +0 -32
  363. package/src/server/plugins/engine/pageControllers/StatusPageController.test.ts +0 -32
  364. package/src/server/plugins/engine/pageControllers/SummaryPageController.test.ts +0 -89
  365. package/src/server/plugins/engine/pageControllers/TerminalController.test.ts +0 -37
  366. package/src/server/plugins/engine/pageControllers/errors.test.ts +0 -78
  367. package/src/server/plugins/engine/pageControllers/helpers/helpers.test.ts +0 -182
  368. package/src/server/plugins/engine/pageControllers/helpers/state.test.ts +0 -359
  369. package/src/server/plugins/engine/pageControllers/helpers/submission.test.ts +0 -373
  370. package/src/server/plugins/engine/referenceNumbers.test.ts +0 -74
  371. package/src/server/plugins/engine/routes/index.test.ts +0 -332
  372. package/src/server/plugins/engine/routes/payment-helper.test.js +0 -136
  373. package/src/server/plugins/engine/routes/payment.test.js +0 -180
  374. package/src/server/plugins/engine/routes/questions.test.ts +0 -502
  375. package/src/server/plugins/engine/routes/repeaters/item-delete.test.ts +0 -83
  376. package/src/server/plugins/engine/routes/repeaters/summary.test.ts +0 -75
  377. package/src/server/plugins/engine/services/formsService.test.js +0 -26
  378. package/src/server/plugins/engine/services/notifyService.test.ts +0 -310
  379. package/src/server/plugins/engine/types/schema.test.ts +0 -234
  380. package/src/server/plugins/engine/views/components/service-banner/template.test.js +0 -43
  381. package/src/server/plugins/engine/views/components/tag-env/template.test.js +0 -28
  382. package/src/server/plugins/engine/views/partials/preview-banner.test.js +0 -122
  383. package/src/server/plugins/map/routes/get-os-token.test.js +0 -55
  384. package/src/server/plugins/map/service.test.js +0 -144
  385. package/src/server/plugins/nunjucks/context.test.js +0 -109
  386. package/src/server/plugins/nunjucks/enviroment.test.js +0 -207
  387. package/src/server/plugins/nunjucks/filters/answer.test.js +0 -92
  388. package/src/server/plugins/nunjucks/filters/field.test.js +0 -75
  389. package/src/server/plugins/nunjucks/filters/href.test.js +0 -80
  390. package/src/server/plugins/nunjucks/filters/merge.test.js +0 -15
  391. package/src/server/plugins/nunjucks/filters/page.test.js +0 -65
  392. package/src/server/plugins/payment/helper.test.js +0 -29
  393. package/src/server/plugins/payment/service.test.js +0 -218
  394. package/src/server/plugins/postcode-lookup/service.test.js +0 -177
  395. package/src/server/postcode-lookup.test.ts +0 -64
  396. package/src/server/routes/dummy-api.test.ts +0 -97
  397. package/src/server/services/cacheService.test.ts +0 -308
  398. package/src/server/services/httpService.test.js +0 -491
  399. package/src/server/utils/file-form-service.test.js +0 -127
  400. package/src/server/utils/notify.test.ts +0 -37
  401. package/src/server/utils/secure-context/get-trust-store-certs.test.js +0 -19
  402. 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
- */