@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,745 +0,0 @@
1
- import {
2
- ComponentType,
3
- type FormMetadata,
4
- type PaymentFieldComponent
5
- } from '@defra/forms-model'
6
- import { StatusCodes } from 'http-status-codes'
7
-
8
- import { ComponentCollection } from '~/src/server/plugins/engine/components/ComponentCollection.js'
9
- import { PaymentField } from '~/src/server/plugins/engine/components/PaymentField.js'
10
- import {
11
- getAnswer,
12
- type Field
13
- } from '~/src/server/plugins/engine/components/helpers/components.js'
14
- import { FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
15
- import { PaymentPreAuthError } from '~/src/server/plugins/engine/pageControllers/errors.js'
16
- import {
17
- type FormContext,
18
- type FormValue,
19
- type PaymentExternalArgs
20
- } from '~/src/server/plugins/engine/types.js'
21
- import {
22
- type FormRequestPayload,
23
- type FormResponseToolkit
24
- } from '~/src/server/routes/types.js'
25
- import { get, post, postJson } from '~/src/server/services/httpService.js'
26
- import { type Services } from '~/src/server/types.js'
27
- import definition from '~/test/form/definitions/blank.js'
28
- import { getFormData, getFormState } from '~/test/helpers/component-helpers.js'
29
-
30
- jest.mock('~/src/server/services/httpService.ts')
31
-
32
- const mockServices = {
33
- formsService: {
34
- getFormSecret: () => 'secret-value'
35
- }
36
- } as unknown as Services
37
-
38
- describe('PaymentField', () => {
39
- let model: FormModel
40
-
41
- beforeEach(() => {
42
- model = new FormModel(definition, {
43
- basePath: 'test'
44
- })
45
- })
46
-
47
- describe('Defaults', () => {
48
- let def: PaymentFieldComponent
49
- let collection: ComponentCollection
50
- let field: Field
51
-
52
- beforeEach(() => {
53
- def = {
54
- title: 'Example payment field',
55
- name: 'myComponent',
56
- type: ComponentType.PaymentField,
57
- options: {
58
- amount: 100,
59
- description: 'Test payment description'
60
- }
61
- } satisfies PaymentFieldComponent
62
-
63
- collection = new ComponentCollection([def], { model })
64
- field = collection.fields[0]
65
- })
66
-
67
- describe('Schema', () => {
68
- it('uses component title as label as default', () => {
69
- const { formSchema } = collection
70
- const { keys } = formSchema.describe()
71
-
72
- expect(keys).toHaveProperty(
73
- 'myComponent',
74
- expect.objectContaining({
75
- flags: expect.objectContaining({
76
- label: 'Example payment field'
77
- })
78
- })
79
- )
80
- })
81
-
82
- it('uses component name as keys', () => {
83
- const { formSchema } = collection
84
- const { keys } = formSchema.describe()
85
-
86
- expect(field.keys).toEqual(['myComponent'])
87
- expect(field.collection).toBeUndefined()
88
-
89
- for (const key of field.keys) {
90
- expect(keys).toHaveProperty(key)
91
- }
92
- })
93
-
94
- it('is required by default', () => {
95
- const { formSchema } = collection
96
- const { keys } = formSchema.describe()
97
-
98
- expect(keys).toHaveProperty(
99
- 'myComponent',
100
- expect.objectContaining({
101
- keys: expect.objectContaining({
102
- amount: expect.objectContaining({
103
- flags: expect.objectContaining({
104
- presence: 'required'
105
- })
106
- })
107
- })
108
- })
109
- )
110
- })
111
-
112
- it('adds errors for empty value', () => {
113
- const payment = {
114
- paymentId: '',
115
- reference: '',
116
- amount: 0,
117
- description: '',
118
- uuid: '',
119
- formId: '',
120
- isLivePayment: false
121
- }
122
- const result = collection.validate(
123
- getFormData(payment as unknown as FormValue)
124
- )
125
-
126
- const errors = result.errors ?? []
127
-
128
- expect(errors[0]).toEqual(
129
- expect.objectContaining({
130
- text: 'Enter myComponent.paymentId'
131
- })
132
- )
133
-
134
- expect(errors[1]).toEqual(
135
- expect.objectContaining({
136
- text: 'Enter myComponent.reference'
137
- })
138
- )
139
-
140
- expect(errors[2]).toEqual(
141
- expect.objectContaining({
142
- text: 'Enter myComponent.description'
143
- })
144
- )
145
-
146
- expect(errors[3]).toEqual(
147
- expect.objectContaining({
148
- text: 'Enter myComponent.uuid'
149
- })
150
- )
151
-
152
- expect(errors[4]).toEqual(
153
- expect.objectContaining({
154
- text: 'Enter myComponent.formId'
155
- })
156
- )
157
-
158
- expect(errors[5]).toEqual(
159
- expect.objectContaining({
160
- text: 'Select myComponent.preAuth'
161
- })
162
- )
163
- })
164
-
165
- it('adds errors for invalid values', () => {
166
- const result1 = collection.validate(getFormData(['invalid']))
167
- const result2 = collection.validate(
168
- // @ts-expect-error - Allow invalid param for test
169
- getFormData({ unknown: 'invalid' })
170
- )
171
-
172
- expect(result1.errors).toBeTruthy()
173
- expect(result2.errors).toBeTruthy()
174
- })
175
- })
176
-
177
- describe('State', () => {
178
- const paymentForState = {
179
- paymentId: 'payment-id',
180
- reference: 'payment-ref',
181
- amount: 150,
182
- description: 'payment description',
183
- uuid: 'ee501106-4ce1-4947-91a7-7cc1a335ccd8',
184
- formId: 'formid',
185
- isLivePayment: false
186
- }
187
- it('returns text from state', () => {
188
- const state1 = getFormState(paymentForState as unknown as FormValue)
189
- const state2 = getFormState(null)
190
-
191
- const answer1 = getAnswer(field, state1)
192
- const answer2 = getAnswer(field, state2)
193
-
194
- expect(answer1).toBe('£150.00 - payment description')
195
- expect(answer2).toBe('')
196
- })
197
- })
198
-
199
- describe('View model', () => {
200
- it('sets Nunjucks component defaults', () => {
201
- const viewModel = field.getViewModel(getFormData(undefined))
202
-
203
- expect(viewModel).toEqual(
204
- expect.objectContaining({
205
- label: { text: def.title },
206
- name: 'myComponent',
207
- id: 'myComponent',
208
- amount: '£100.00',
209
- attributes: {},
210
- description: 'Test payment description'
211
- })
212
- )
213
- })
214
-
215
- it('sets Nunjucks component values', () => {
216
- const paymentForViewModel = {
217
- paymentId: 'payment-id',
218
- reference: 'payment-ref',
219
- uuid: 'ee501106-4ce1-4947-91a7-7cc1a335ccd8',
220
- formId: 'formid',
221
- amount: 100,
222
- description: 'Test payment description',
223
- isLivePayment: false
224
- } as unknown as FormValue
225
- const viewModel = field.getViewModel(getFormData(paymentForViewModel))
226
-
227
- expect(viewModel).toEqual(
228
- expect.objectContaining({
229
- label: { text: def.title },
230
- name: 'myComponent',
231
- id: 'myComponent',
232
- amount: '£100.00',
233
- attributes: {},
234
- description: 'Test payment description'
235
- })
236
- )
237
- })
238
- })
239
-
240
- describe('AllPossibleErrors', () => {
241
- it('should return errors', () => {
242
- const errors = field.getAllPossibleErrors()
243
- expect(errors.baseErrors).not.toBeEmpty()
244
- expect(errors.advancedSettingsErrors).toBeEmpty()
245
- })
246
- })
247
- })
248
-
249
- describe('dispatcher and onSubmit', () => {
250
- const def = {
251
- title: 'Example payment field',
252
- name: 'myComponent',
253
- type: ComponentType.PaymentField,
254
- options: {
255
- amount: 100,
256
- description: 'Test payment description'
257
- }
258
- } satisfies PaymentFieldComponent
259
-
260
- const collection = new ComponentCollection([def], { model })
261
- const paymentField = collection.fields[0] as PaymentField
262
- paymentField.model = { services: mockServices } as unknown as FormModel
263
-
264
- describe('dispatcher', () => {
265
- it('should create payment and redirect to gov pay', async () => {
266
- const mockYarSet = jest.fn()
267
- const mockRequest = {
268
- server: {
269
- plugins: {
270
- // eslint-disable-next-line no-useless-computed-key
271
- ['forms-engine-plugin']: {
272
- baseUrl: 'base-url'
273
- }
274
- }
275
- },
276
- yar: {
277
- set: mockYarSet
278
- }
279
- } as unknown as FormRequestPayload
280
- const mockH = {
281
- redirect: jest
282
- .fn()
283
- .mockReturnValueOnce({ code: jest.fn().mockReturnValueOnce('ok') })
284
- } as unknown as FormResponseToolkit
285
- const args = {
286
- controller: {
287
- model: {
288
- formId: 'formid',
289
- basePath: 'base-path',
290
- name: 'PaymentModel',
291
- services: mockServices
292
- },
293
- getState: jest
294
- .fn()
295
- .mockResolvedValueOnce({ $$__referenceNumber: 'pay-ref-123' })
296
- },
297
- component: paymentField,
298
- sourceUrl: 'http://localhost:3009/test-payment',
299
- isLive: false,
300
- isPreview: true
301
- } as unknown as PaymentExternalArgs
302
- // @ts-expect-error - partial mock
303
- jest.mocked(postJson).mockResolvedValueOnce({
304
- payload: {
305
- state: {
306
- status: 'created'
307
- },
308
- payment_id: 'new-payment-id',
309
- _links: {
310
- next_url: {
311
- href: '/next-url'
312
- }
313
- }
314
- }
315
- })
316
-
317
- const res = await PaymentField.dispatcher(mockRequest, mockH, args)
318
- expect(res).toBe('ok')
319
- expect(mockYarSet).toHaveBeenCalledWith(expect.any(String), {
320
- amount: 100,
321
- componentName: 'myComponent',
322
- description: 'Test payment description',
323
- failureUrl: 'http://localhost:3009/test-payment',
324
- formId: 'formid',
325
- isLivePayment: false,
326
- paymentId: 'new-payment-id',
327
- reference: 'pay-ref-123',
328
- returnUrl: 'base-url/base-path/summary',
329
- uuid: expect.any(String)
330
- })
331
- })
332
-
333
- it('should redirect to summary if payment is already pre-authorised', async () => {
334
- const mockRedirectCode = jest.fn().mockReturnValueOnce('redirected')
335
- const mockH = {
336
- redirect: jest.fn().mockReturnValueOnce({ code: mockRedirectCode })
337
- } as unknown as FormResponseToolkit
338
- const mockRequest = {
339
- server: {
340
- plugins: {
341
- // eslint-disable-next-line no-useless-computed-key
342
- ['forms-engine-plugin']: {
343
- baseUrl: 'base-url'
344
- }
345
- }
346
- },
347
- yar: {
348
- set: jest.fn()
349
- }
350
- } as unknown as FormRequestPayload
351
- const args = {
352
- controller: {
353
- model: {
354
- formId: 'formid',
355
- basePath: 'base-path',
356
- name: 'PaymentModel',
357
- services: mockServices
358
- },
359
- getState: jest.fn().mockResolvedValueOnce({
360
- $$__referenceNumber: 'pay-ref-123',
361
- myComponent: {
362
- paymentId: 'existing-payment-id',
363
- amount: 100,
364
- description: 'Test payment',
365
- preAuth: {
366
- status: 'success',
367
- createdAt: '2026-01-29T12:00:00.000Z'
368
- }
369
- }
370
- })
371
- },
372
- component: paymentField,
373
- sourceUrl: 'http://localhost:3009/test-payment',
374
- isLive: false,
375
- isPreview: true
376
- } as unknown as PaymentExternalArgs
377
-
378
- const res = await PaymentField.dispatcher(mockRequest, mockH, args)
379
-
380
- expect(res).toBe('redirected')
381
- expect(mockH.redirect).toHaveBeenCalledWith(
382
- 'base-url/base-path/summary'
383
- )
384
- expect(mockRedirectCode).toHaveBeenCalledWith(303)
385
- expect(postJson).not.toHaveBeenCalled()
386
- })
387
-
388
- it('should display error if create payment fails (e.g. network or bad api key) - test payment', async () => {
389
- const mockYarSet = jest.fn()
390
- const mockYarFlash = jest.fn()
391
- const mockRequest = {
392
- server: {
393
- plugins: {
394
- // eslint-disable-next-line no-useless-computed-key
395
- ['forms-engine-plugin']: {
396
- baseUrl: 'base-url'
397
- }
398
- }
399
- },
400
- yar: {
401
- set: mockYarSet,
402
- flash: mockYarFlash
403
- },
404
- url: {
405
- href: '/here'
406
- }
407
- } as unknown as FormRequestPayload
408
- const mockH = {
409
- redirect: jest
410
- .fn()
411
- .mockReturnValueOnce({ code: jest.fn().mockReturnValueOnce('ok') })
412
- } as unknown as FormResponseToolkit
413
- const args = {
414
- controller: {
415
- model: {
416
- formId: 'formid',
417
- basePath: 'base-path',
418
- name: 'PaymentModel',
419
- services: mockServices
420
- },
421
- getState: jest
422
- .fn()
423
- .mockResolvedValueOnce({ $$__referenceNumber: 'pay-ref-123' })
424
- },
425
- component: paymentField,
426
- sourceUrl: 'http://localhost:3009/test-payment',
427
- isLive: false,
428
- isPreview: true
429
- } as unknown as PaymentExternalArgs
430
- jest.mocked(postJson).mockImplementationOnce(() => {
431
- // eslint-disable-next-line @typescript-eslint/only-throw-error
432
- throw { output: { statusCode: StatusCodes.UNAUTHORIZED } }
433
- })
434
-
435
- const res = await PaymentField.dispatcher(mockRequest, mockH, args)
436
- expect(res).toBe('ok')
437
- expect(mockYarSet).not.toHaveBeenCalled()
438
- expect(mockYarFlash).toHaveBeenCalledWith(
439
- 'COMPONENT_STATE_ERROR',
440
- {
441
- href: '#myComponent',
442
- name: 'myComponent',
443
- text: 'Add a valid test API key before you can preview the payment journey.'
444
- },
445
- true
446
- )
447
- })
448
-
449
- it('should display error if create payment fails (e.g. network or bad api key) - live payment', async () => {
450
- const mockYarSet = jest.fn()
451
- const mockYarFlash = jest.fn()
452
- const mockRequest = {
453
- server: {
454
- plugins: {
455
- // eslint-disable-next-line no-useless-computed-key
456
- ['forms-engine-plugin']: {
457
- baseUrl: 'base-url'
458
- }
459
- }
460
- },
461
- yar: {
462
- set: mockYarSet,
463
- flash: mockYarFlash
464
- },
465
- url: {
466
- href: '/here'
467
- }
468
- } as unknown as FormRequestPayload
469
- const mockH = {
470
- redirect: jest
471
- .fn()
472
- .mockReturnValueOnce({ code: jest.fn().mockReturnValueOnce('ok') })
473
- } as unknown as FormResponseToolkit
474
- const args = {
475
- controller: {
476
- model: {
477
- formId: 'formid',
478
- basePath: 'base-path',
479
- name: 'PaymentModel',
480
- services: mockServices
481
- },
482
- getState: jest
483
- .fn()
484
- .mockResolvedValueOnce({ $$__referenceNumber: 'pay-ref-123' })
485
- },
486
- component: paymentField,
487
- sourceUrl: 'http://localhost:3009/test-payment',
488
- isLive: true,
489
- isPreview: false
490
- } as unknown as PaymentExternalArgs
491
- jest.mocked(postJson).mockImplementationOnce(() => {
492
- // eslint-disable-next-line @typescript-eslint/only-throw-error
493
- throw { output: { statusCode: StatusCodes.UNAUTHORIZED } }
494
- })
495
-
496
- const res = await PaymentField.dispatcher(mockRequest, mockH, args)
497
- expect(res).toBe('ok')
498
- expect(mockYarSet).not.toHaveBeenCalled()
499
- expect(mockYarFlash).toHaveBeenCalledWith(
500
- 'COMPONENT_STATE_ERROR',
501
- {
502
- href: '#myComponent',
503
- name: 'myComponent',
504
- text: 'There is a problem and we cannot take a payment. Contact us (details in the footer of this form) or save your progress and return to the form later.'
505
- },
506
- true
507
- )
508
- })
509
- })
510
-
511
- describe('onSubmit', () => {
512
- it('should throw if missing state', async () => {
513
- const mockRequest = {} as unknown as FormRequestPayload
514
-
515
- const error = await paymentField
516
- .onSubmit(
517
- mockRequest,
518
- {} as FormMetadata,
519
- { state: {} } as FormContext
520
- )
521
- .catch((e: unknown) => e)
522
-
523
- expect(error).toBeInstanceOf(PaymentPreAuthError)
524
- expect((error as PaymentPreAuthError).component).toBe(paymentField)
525
- expect((error as PaymentPreAuthError).userMessage).toBe(
526
- 'Complete the payment to continue'
527
- )
528
- })
529
-
530
- it('should ignore if our state says payment already captured', async () => {
531
- const mockRequest = {} as unknown as FormRequestPayload
532
-
533
- await paymentField.onSubmit(
534
- mockRequest,
535
- {} as FormMetadata,
536
- {
537
- state: {
538
- myComponent: {
539
- capture: {
540
- status: 'success'
541
- },
542
- paymentId: 'payment-id',
543
- amount: 123,
544
- description: 'Payment desc'
545
- }
546
- }
547
- } as unknown as FormContext
548
- )
549
- expect(get).not.toHaveBeenCalled()
550
- expect(post).not.toHaveBeenCalled()
551
- })
552
-
553
- it('should mark payment already captured according to gov pay', async () => {
554
- const mockRequest = {} as unknown as FormRequestPayload
555
- jest
556
- .mocked(get)
557
- // @ts-expect-error - partial mock
558
- .mockResolvedValueOnce({
559
- payload: { amount: 10000, state: { status: 'success' } }
560
- })
561
- await paymentField.onSubmit(
562
- mockRequest,
563
- {} as FormMetadata,
564
- {
565
- state: {
566
- myComponent: {
567
- paymentId: 'payment-id',
568
- amount: 100,
569
- description: 'Payment desc',
570
- isLivePayment: false,
571
- formId: 'formid'
572
- }
573
- }
574
- } as unknown as FormContext
575
- )
576
- expect(get).toHaveBeenCalled()
577
- expect(post).not.toHaveBeenCalled()
578
- })
579
-
580
- it('should throw if bad status', async () => {
581
- const mockRequest = {} as unknown as FormRequestPayload
582
- jest
583
- .mocked(get)
584
- // @ts-expect-error - partial mock
585
- .mockResolvedValueOnce({
586
- payload: { amount: 10000, state: { status: 'bad' } }
587
- })
588
- const error = await paymentField
589
- .onSubmit(
590
- mockRequest,
591
- {} as FormMetadata,
592
- {
593
- state: {
594
- myComponent: {
595
- paymentId: 'payment-id',
596
- amount: 100,
597
- description: 'Payment desc',
598
- isLivePayment: false,
599
- formId: 'formid'
600
- }
601
- }
602
- } as unknown as FormContext
603
- )
604
- .catch((e: unknown) => e)
605
-
606
- expect(error).toBeInstanceOf(PaymentPreAuthError)
607
- expect((error as PaymentPreAuthError).component).toBe(paymentField)
608
- expect((error as PaymentPreAuthError).userMessage).toBe(
609
- 'Your payment authorisation has expired. Please add your payment details again.'
610
- )
611
- })
612
-
613
- it('should throw if error during capture', async () => {
614
- const mockRequest = {} as unknown as FormRequestPayload
615
- jest
616
- .mocked(get)
617
- // @ts-expect-error - partial mock
618
- .mockResolvedValueOnce({
619
- payload: { amount: 10000, state: { status: 'capturable' } }
620
- })
621
- // @ts-expect-error - partial mock
622
- jest.mocked(post).mockResolvedValueOnce({ res: { statusCode: 400 } })
623
- const error = await paymentField
624
- .onSubmit(
625
- mockRequest,
626
- {} as FormMetadata,
627
- {
628
- state: {
629
- myComponent: {
630
- paymentId: 'payment-id',
631
- amount: 123,
632
- description: 'Payment desc',
633
- isLivePayment: false,
634
- formId: 'formid'
635
- }
636
- }
637
- } as unknown as FormContext
638
- )
639
- .catch((e: unknown) => e)
640
-
641
- expect(error).toBeInstanceOf(PaymentPreAuthError)
642
- expect((error as PaymentPreAuthError).component).toBe(paymentField)
643
- expect((error as PaymentPreAuthError).userMessage).toBe(
644
- 'There was a problem and your form was not submitted. Try submitting the form again.'
645
- )
646
- })
647
-
648
- it('should throw if amount mismatch', async () => {
649
- const mockRequest = {} as unknown as FormRequestPayload
650
- jest
651
- .mocked(get)
652
- // @ts-expect-error - partial mock
653
- .mockResolvedValueOnce({
654
- payload: { amount: 5000, state: { status: 'capturable' } }
655
- })
656
- // @ts-expect-error - partial mock
657
- jest.mocked(post).mockResolvedValueOnce({ res: { statusCode: 200 } })
658
- const error = await paymentField
659
- .onSubmit(
660
- mockRequest,
661
- {} as FormMetadata,
662
- {
663
- state: {
664
- myComponent: {
665
- paymentId: 'payment-id',
666
- amount: 123,
667
- description: 'Payment desc',
668
- isLivePayment: false,
669
- formId: 'formid'
670
- }
671
- }
672
- } as unknown as FormContext
673
- )
674
- .catch((e: unknown) => e)
675
-
676
- expect(error).toBeInstanceOf(PaymentPreAuthError)
677
- expect((error as PaymentPreAuthError).component).toBe(paymentField)
678
- expect((error as PaymentPreAuthError).userMessage).toBe(
679
- 'The pre-authorised payment amount is somehow different from that requested. Try adding payment details again.'
680
- )
681
- })
682
-
683
- it('should capture payment if no errors', async () => {
684
- const mockRequest = {} as unknown as FormRequestPayload
685
- jest
686
- .mocked(get)
687
- // @ts-expect-error - partial mock
688
- .mockResolvedValueOnce({
689
- payload: { amount: 10000, state: { status: 'capturable' } }
690
- })
691
- // @ts-expect-error - partial mock
692
- jest.mocked(post).mockResolvedValueOnce({ res: { statusCode: 200 } })
693
- await paymentField.onSubmit(
694
- mockRequest,
695
- {} as FormMetadata,
696
- {
697
- state: {
698
- myComponent: {
699
- paymentId: 'payment-id',
700
- amount: 123,
701
- description: 'Payment desc',
702
- isLivePayment: false,
703
- formId: 'formid'
704
- }
705
- }
706
- } as unknown as FormContext
707
- )
708
- expect(get).toHaveBeenCalled()
709
- expect(post).toHaveBeenCalled()
710
- })
711
- })
712
-
713
- describe('getFormValue', () => {
714
- it('should return undefined', () => {
715
- expect(paymentField.getFormValue({})).toBeUndefined()
716
- })
717
- it('should return value', () => {
718
- const payment = {
719
- paymentId: 'payment-id',
720
- amount: 123,
721
- description: 'Payment desc',
722
- isLivePayment: false,
723
- formId: 'formid'
724
- }
725
- expect(paymentField.getFormValue(payment)).toEqual(payment)
726
- })
727
- })
728
-
729
- describe('isState', () => {
730
- it('should return false if not valid state', () => {
731
- expect(paymentField.isState({})).toBe(false)
732
- })
733
- it('should return value', () => {
734
- const payment = {
735
- paymentId: 'payment-id',
736
- amount: 123,
737
- description: 'Payment desc',
738
- isLivePayment: false,
739
- formId: 'formid'
740
- }
741
- expect(paymentField.isState(payment)).toBe(true)
742
- })
743
- })
744
- })
745
- })