@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,177 +0,0 @@
1
- import Boom from '@hapi/boom'
2
-
3
- import * as service from '~/src/server/plugins/postcode-lookup/service.js'
4
- import { result as postcodeResult } from '~/src/server/plugins/postcode-lookup/test/__stubs__/postcode.js'
5
- import { result as queryResult } from '~/src/server/plugins/postcode-lookup/test/__stubs__/query.js'
6
- import { result as uprnResult } from '~/src/server/plugins/postcode-lookup/test/__stubs__/uprn.js'
7
- import { getJson } from '~/src/server/services/httpService.js'
8
-
9
- jest.mock('~/src/server/services/httpService.ts')
10
-
11
- describe('Postcode lookup service', () => {
12
- describe('searchByPostcode', () => {
13
- it('should return formatted addresses', async () => {
14
- jest.mocked(getJson).mockResolvedValueOnce({
15
- res: /** @type {IncomingMessage} */ ({
16
- statusCode: 200,
17
- headers: {}
18
- }),
19
- payload: postcodeResult,
20
- error: undefined
21
- })
22
-
23
- const results = await service.searchByPostcode('NW1 6XE', 'apikey')
24
-
25
- expect(results).toHaveLength(10)
26
- expect(results.at(0)).toEqual({
27
- address: "EMILIA'S CRAFTED PASTA, 215, BAKER STREET, LONDON, NW1 6XE",
28
- addressLine1: "Emilia's Crafted Pasta 215",
29
- addressLine2: 'Baker Street',
30
- county: '',
31
- formatted: "Emilia's Crafted Pasta 215, Baker Street, London, NW1 6XE",
32
- postcode: 'NW1 6XE',
33
- town: 'London',
34
- uprn: '10033619968'
35
- })
36
- })
37
-
38
- it('should return an empty response when an error is encountered', async () => {
39
- jest.mocked(getJson).mockResolvedValueOnce({
40
- res: /** @type {IncomingMessage} */ ({
41
- statusCode: 300,
42
- headers: {}
43
- }),
44
- payload: undefined,
45
- error: new Error('Unknown error')
46
- })
47
-
48
- const results = await service.searchByPostcode('NW1 6XE', 'apikey')
49
-
50
- expect(results).toHaveLength(0)
51
- expect(results).toEqual([])
52
- })
53
-
54
- it('should return an empty response when a non 200 response is encountered', async () => {
55
- jest
56
- .mocked(getJson)
57
- .mockRejectedValueOnce(
58
- Boom.badRequest(
59
- 'OS API error',
60
- new Error('Invalid postcode segments')
61
- )
62
- )
63
-
64
- const results = await service.searchByPostcode(
65
- 'invalid postcode',
66
- 'apikey'
67
- )
68
-
69
- expect(results).toHaveLength(0)
70
- expect(results).toEqual([])
71
- })
72
-
73
- it('should return an empty response when no results are returned', async () => {
74
- jest.mocked(getJson).mockResolvedValueOnce({
75
- res: /** @type {IncomingMessage} */ ({
76
- statusCode: 200,
77
- headers: {}
78
- }),
79
- payload: { results: undefined },
80
- error: undefined
81
- })
82
-
83
- const results = await service.searchByPostcode('NW1 6XE', 'apikey')
84
-
85
- expect(results).toHaveLength(0)
86
- expect(results).toEqual([])
87
- })
88
- })
89
-
90
- describe('searchByUPRN', () => {
91
- it('should return formatted addresses', async () => {
92
- jest.mocked(getJson).mockResolvedValueOnce({
93
- res: /** @type {IncomingMessage} */ ({
94
- statusCode: 200,
95
- headers: {}
96
- }),
97
- payload: uprnResult,
98
- error: undefined
99
- })
100
-
101
- const results = await service.searchByUPRN('100023071949', 'apikey')
102
-
103
- expect(results).toHaveLength(1)
104
- expect(results.at(0)).toEqual({
105
- address: 'SHERLOCK HOLMES MUSEUM, 221B, BAKER STREET, LONDON, NW1 6XE',
106
- addressLine1: 'Sherlock Holmes Museum 221b',
107
- addressLine2: 'Baker Street',
108
- county: '',
109
- formatted: 'Sherlock Holmes Museum 221b, Baker Street, London, NW1 6XE',
110
- postcode: 'NW1 6XE',
111
- town: 'London',
112
- uprn: '100023071949'
113
- })
114
- })
115
- })
116
-
117
- describe('searchByQuery', () => {
118
- it('should return formatted addresses', async () => {
119
- jest.mocked(getJson).mockResolvedValueOnce({
120
- res: /** @type {IncomingMessage} */ ({
121
- statusCode: 200,
122
- headers: {}
123
- }),
124
- payload: queryResult,
125
- error: undefined
126
- })
127
-
128
- const results = await service.searchByQuery(
129
- 'Prime minister downing',
130
- 'apikey'
131
- )
132
-
133
- expect(results).toHaveLength(5)
134
- expect(results.at(0)).toEqual({
135
- address: 'BAKER STREET COTTAGE, BAKER STREET, FROME, BA11 3BL',
136
- addressLine1: 'Baker Street Cottage',
137
- addressLine2: 'Baker Street',
138
- town: 'Frome',
139
- county: '',
140
- formatted: 'Baker Street Cottage, Baker Street, Frome, BA11 3BL',
141
- postcode: 'BA11 3BL',
142
- uprn: '250034655'
143
- })
144
- })
145
- })
146
-
147
- describe('search', () => {
148
- it('should return formatted addresses', async () => {
149
- jest.mocked(getJson).mockResolvedValueOnce({
150
- res: /** @type {IncomingMessage} */ ({
151
- statusCode: 200,
152
- headers: {}
153
- }),
154
- payload: postcodeResult,
155
- error: undefined
156
- })
157
-
158
- const results = await service.search('NW1 6XE', 'Emilia', 'apikey')
159
-
160
- expect(results).toHaveLength(1)
161
- expect(results.at(0)).toEqual({
162
- address: "EMILIA'S CRAFTED PASTA, 215, BAKER STREET, LONDON, NW1 6XE",
163
- addressLine1: "Emilia's Crafted Pasta 215",
164
- addressLine2: 'Baker Street',
165
- county: '',
166
- formatted: "Emilia's Crafted Pasta 215, Baker Street, London, NW1 6XE",
167
- postcode: 'NW1 6XE',
168
- town: 'London',
169
- uprn: '10033619968'
170
- })
171
- })
172
- })
173
- })
174
-
175
- /**
176
- * @import { IncomingMessage } from 'node:http'
177
- */
@@ -1,64 +0,0 @@
1
- import { type Server } from '@hapi/hapi'
2
-
3
- import { createServer } from '~/src/server/index.js'
4
- import { getFormMetadata } from '~/src/server/plugins/engine/services/formsService.js'
5
- import * as defaultServices from '~/src/server/plugins/engine/services/index.js'
6
- import * as fixtures from '~/test/fixtures/index.js'
7
-
8
- jest.mock('~/src/server/plugins/engine/services/formsService.js')
9
- jest.mock('~/src/server/plugins/engine/services/uploadService.js')
10
-
11
- describe('Postcode lookup plugin', () => {
12
- let server: Server
13
-
14
- beforeEach(() => {
15
- jest.mocked(getFormMetadata).mockResolvedValue(fixtures.form.metadata)
16
- })
17
-
18
- afterAll(async () => {
19
- await server.stop()
20
- })
21
-
22
- describe('Plugin registration', () => {
23
- test('Registers plugin with ordnance survey key', async () => {
24
- server = await createServer({
25
- services: defaultServices,
26
- ordnanceSurveyApiKey: 'dummy'
27
- })
28
- await server.initialize()
29
-
30
- expect(server.registrations).toHaveProperty(
31
- '@defra/forms-engine-plugin/postcode-lookup',
32
- {
33
- name: '@defra/forms-engine-plugin/postcode-lookup',
34
- options: { ordnanceSurveyApiKey: 'dummy' },
35
- version: undefined
36
- }
37
- )
38
-
39
- expect(
40
- server.table().find((route) => route.path === '/postcode-lookup')
41
- ).toBeDefined()
42
- })
43
-
44
- test('Does not register plugin when no ordnance survey key is provided', async () => {
45
- server = await createServer({
46
- services: defaultServices
47
- })
48
- await server.initialize()
49
-
50
- expect(server.registrations).not.toHaveProperty(
51
- '@defra/forms-engine-plugin/postcode-lookup',
52
- {
53
- name: '@defra/forms-engine-plugin/postcode-lookup',
54
- options: { ordnanceSurveyApiKey: 'dummy' },
55
- version: undefined
56
- }
57
- )
58
-
59
- expect(
60
- server.table().find((route) => route.path === '/postcode-lookup')
61
- ).toBeUndefined()
62
- })
63
- })
64
- })
@@ -1,97 +0,0 @@
1
- import { type Server } from '@hapi/hapi'
2
- import MockDate from 'mockdate'
3
-
4
- import { createServer } from '~/src/server/index.js'
5
-
6
- describe('Dummy API', () => {
7
- let server: Server
8
-
9
- const payload = {
10
- meta: {
11
- referenceNumber: 'FOO-BAR-123'
12
- },
13
- data: {
14
- main: {
15
- applicantFirstName: 'Joe',
16
- applicantLastName: 'Bloggs',
17
- dateOfBirth: '2020-01-01'
18
- }
19
- }
20
- }
21
-
22
- beforeAll(async () => {
23
- MockDate.set('2025-01-01T00:00:00Z')
24
- server = await createServer({
25
- enforceCsrf: false
26
- })
27
- await server.initialize()
28
- })
29
-
30
- afterAll(async () => {
31
- await server.stop()
32
- MockDate.reset()
33
- })
34
-
35
- it('should validate on-load-page POST response', async () => {
36
- const res = await server.inject({
37
- method: 'POST',
38
- url: '/api/example/on-load-page',
39
- payload
40
- })
41
-
42
- expect(res.statusCode).toBe(200)
43
- expect(res.result).toMatchObject({
44
- submissionEvent: 'GET',
45
- submissionReferenceNumber: payload.meta.referenceNumber
46
- })
47
- })
48
-
49
- /*
50
- This is just dummy code that won't run in prod, we don't need a full suite of tests.
51
- */
52
- it('should validate on-summary POST response', async () => {
53
- const res = await server.inject({
54
- method: 'POST',
55
- url: '/api/example/on-summary',
56
- payload
57
- })
58
-
59
- expect(res.statusCode).toBe(200)
60
- expect(res.result).toMatchObject({
61
- calculatedAge: 5,
62
- submissionEvent: 'POST',
63
- submissionReferenceNumber: payload.meta.referenceNumber
64
- })
65
- })
66
-
67
- it('should calculate age correctly when birthday has not occurred yet this year', async () => {
68
- // Set today's date to just before the birthday in 2025
69
- MockDate.set('2025-01-01T00:00:00Z')
70
-
71
- const payloadWithFutureBirthday = {
72
- meta: {
73
- referenceNumber: 'FOO-BAR-456'
74
- },
75
- data: {
76
- main: {
77
- applicantFirstName: 'Jane',
78
- applicantLastName: 'Doe',
79
- dateOfBirth: '2020-02-01' // Birthday is in February, today is January
80
- }
81
- }
82
- }
83
-
84
- const res = await server.inject({
85
- method: 'POST',
86
- url: '/api/example/on-summary',
87
- payload: payloadWithFutureBirthday
88
- })
89
-
90
- expect(res.statusCode).toBe(200)
91
- expect(res.result).toMatchObject({
92
- calculatedAge: 4, // Should be 4, not 5, because birthday hasn't occurred yet
93
- submissionEvent: 'POST',
94
- submissionReferenceNumber: payloadWithFutureBirthday.meta.referenceNumber
95
- })
96
- })
97
- })
@@ -1,308 +0,0 @@
1
- import { type Request, type Server } from '@hapi/hapi'
2
-
3
- import { config } from '~/src/config/index.js'
4
- import { type FormRequest } from '~/src/server/routes/types.js'
5
- import { CacheService, merge } from '~/src/server/services/cacheService.js'
6
-
7
- describe('CacheService', () => {
8
- let mockServer: Partial<Server>
9
- let mockCache: {
10
- get: jest.Mock
11
- set: jest.Mock
12
- drop: jest.Mock
13
- }
14
- let cacheService: CacheService
15
-
16
- beforeEach(() => {
17
- mockCache = {
18
- get: jest.fn(),
19
- set: jest.fn(),
20
- drop: jest.fn()
21
- }
22
-
23
- mockServer = {
24
- log: jest.fn(),
25
- cache: (() => ({
26
- ...mockCache,
27
- provision: jest.fn()
28
- })) as unknown as Server['cache'],
29
- logger: {
30
- info: jest.fn()
31
- } as unknown as Server['logger']
32
- }
33
-
34
- cacheService = new CacheService({
35
- server: mockServer as Server,
36
- cacheName: 'test-cache'
37
- })
38
- })
39
-
40
- describe('getState', () => {
41
- describe('when cache exists', () => {
42
- it('should return cached state', async () => {
43
- const mockRequest = {
44
- yar: { id: 'some-session' },
45
- params: { state: 'form1', slug: 'page1' }
46
- } as unknown as FormRequest
47
- const mockState = { someData: 'test' }
48
-
49
- mockCache.get.mockResolvedValue(mockState)
50
-
51
- const result = await cacheService.getState(mockRequest)
52
-
53
- expect(result).toEqual(mockState)
54
- expect(mockCache.get).toHaveBeenCalledWith({
55
- segment: 'cache',
56
- id: 'some-session:form1:page1:'
57
- })
58
- })
59
- })
60
-
61
- describe('when cache does not exist', () => {
62
- it('should return empty object', async () => {
63
- const mockRequest = {
64
- yar: { id: 'some-session' },
65
- params: { state: 'form1', slug: 'page1' }
66
- } as unknown as FormRequest
67
-
68
- mockCache.get.mockResolvedValue(null)
69
-
70
- const result = await cacheService.getState(mockRequest)
71
-
72
- expect(result).toEqual({})
73
- })
74
- })
75
- })
76
-
77
- describe('setState', () => {
78
- it('should set state with correct TTL and return updated state', async () => {
79
- const mockRequest = {
80
- yar: { id: 'some-session' },
81
- params: { state: 'form1', slug: 'page1' }
82
- } as unknown as FormRequest
83
- const mockState = { someData: 'test' }
84
- const mockTTL = 3600000
85
-
86
- jest.spyOn(config, 'get').mockReturnValue(mockTTL)
87
-
88
- // Mock getState to return the updated state after set
89
- jest.spyOn(cacheService, 'getState').mockResolvedValue(mockState)
90
-
91
- await expect(
92
- cacheService.setState(mockRequest, mockState)
93
- ).resolves.toEqual(mockState)
94
-
95
- expect(mockCache.set).toHaveBeenCalledWith(
96
- {
97
- segment: 'cache',
98
- id: 'some-session:form1:page1:'
99
- },
100
- mockState,
101
- mockTTL
102
- )
103
- expect(cacheService.getState).toHaveBeenCalledWith(mockRequest)
104
- })
105
- })
106
-
107
- describe('Key', () => {
108
- describe('when session ID is missing', () => {
109
- it('should throw error', () => {
110
- const mockRequest = {
111
- yar: { id: null },
112
- params: {}
113
- } as unknown as Request
114
-
115
- expect(() => cacheService.Key(mockRequest)).toThrow(
116
- 'No session ID found'
117
- )
118
- })
119
- })
120
- })
121
-
122
- describe('merge', () => {
123
- describe('when merging objects', () => {
124
- it('should merge them correctly', () => {
125
- const state = { field1: 'some-data-1', field2: 'some-data-2' }
126
- const update = { field2: 'updated', field3: 'some-data-3' }
127
-
128
- const result = merge(state, update)
129
-
130
- expect(result).toEqual({
131
- field1: 'some-data-1',
132
- field2: 'updated',
133
- field3: 'some-data-3'
134
- })
135
- })
136
- })
137
-
138
- describe('when merging arrays', () => {
139
- it('should overwrite instead of merge', () => {
140
- const state = { items: ['some-item-1', 'some-item-2'] }
141
- const update = { items: ['some-item-3'] }
142
-
143
- const result = merge(state, update)
144
-
145
- expect(result.items).toEqual(['some-item-3'])
146
- })
147
- })
148
- })
149
-
150
- describe('getFlash', () => {
151
- describe('when messages exist', () => {
152
- it('should return first message', () => {
153
- const mockRequest = {
154
- yar: {
155
- id: 'some-session',
156
- flash: jest.fn().mockReturnValue([{ errors: [{ type: 'error' }] }])
157
- },
158
- params: { state: 'form1', slug: 'page1' }
159
- } as unknown as FormRequest
160
-
161
- const result = cacheService.getFlash(mockRequest)
162
-
163
- expect(result).toEqual({ errors: [{ type: 'error' }] })
164
- })
165
- })
166
-
167
- describe('when no messages exist', () => {
168
- it('should return undefined', () => {
169
- const mockRequest = {
170
- yar: {
171
- id: 'some-session',
172
- flash: jest.fn().mockReturnValue([])
173
- },
174
- params: { state: 'form1', slug: 'page1' }
175
- } as unknown as FormRequest
176
-
177
- const result = cacheService.getFlash(mockRequest)
178
-
179
- expect(result).toBeUndefined()
180
- })
181
- })
182
- })
183
-
184
- describe('setFlash', () => {
185
- it('should set flash message', () => {
186
- const mockRequest = {
187
- yar: {
188
- id: 'some-session',
189
- flash: jest.fn()
190
- },
191
- params: { state: 'form1', slug: 'page1' }
192
- } as unknown as FormRequest
193
- const message = {
194
- errors: [
195
- {
196
- type: 'error',
197
- href: '#error',
198
- name: 'error',
199
- text: 'Error message',
200
- path: ['path-abc']
201
- }
202
- ]
203
- }
204
-
205
- cacheService.setFlash(mockRequest, message)
206
-
207
- expect(mockRequest.yar.flash).toHaveBeenCalledWith(
208
- 'some-session:form1:page1:',
209
- message
210
- )
211
- })
212
- })
213
-
214
- describe('clearState', () => {
215
- it('should clear state from cache', async () => {
216
- const mockRequest = {
217
- yar: { id: 'some-session' },
218
- params: { state: 'form1', slug: 'page1' }
219
- } as unknown as FormRequest
220
-
221
- await cacheService.clearState(mockRequest)
222
-
223
- expect(mockCache.drop).toHaveBeenCalledWith({
224
- segment: 'cache',
225
- id: 'some-session:form1:page1:'
226
- })
227
- })
228
-
229
- it('should not clear state when session ID is undefined', async () => {
230
- const mockRequest = {
231
- yar: { id: undefined },
232
- params: { state: 'form1', slug: 'page1' }
233
- } as unknown as FormRequest
234
-
235
- await cacheService.clearState(mockRequest)
236
-
237
- expect(mockCache.drop).not.toHaveBeenCalled()
238
- })
239
-
240
- it('should not clear state when session ID is null', async () => {
241
- const mockRequest = {
242
- yar: { id: null },
243
- params: { state: 'form1', slug: 'page1' }
244
- } as unknown as FormRequest
245
-
246
- await cacheService.clearState(mockRequest)
247
-
248
- expect(mockCache.drop).not.toHaveBeenCalled()
249
- })
250
- })
251
-
252
- describe('getConfirmationState', () => {
253
- it('should return confirmation state from cache', async () => {
254
- const mockRequest = {
255
- yar: { id: 'some-session' },
256
- params: { state: 'form1', slug: 'page1' }
257
- } as unknown as FormRequest
258
- const mockState = { confirmed: true as const }
259
-
260
- mockCache.get.mockResolvedValue(mockState)
261
-
262
- const result = await cacheService.getConfirmationState(mockRequest)
263
-
264
- expect(result).toEqual(mockState)
265
- expect(mockCache.get).toHaveBeenCalledWith({
266
- segment: 'cache',
267
- id: 'some-session:form1:page1::confirmation'
268
- })
269
- })
270
-
271
- it('should return empty object when no confirmation state exists', async () => {
272
- const mockRequest = {
273
- yar: { id: 'some-session' },
274
- params: { state: 'form1', slug: 'page1' }
275
- } as unknown as FormRequest
276
-
277
- mockCache.get.mockResolvedValue(null)
278
-
279
- const result = await cacheService.getConfirmationState(mockRequest)
280
-
281
- expect(result).toEqual({})
282
- })
283
- })
284
-
285
- describe('setConfirmationState', () => {
286
- it('should set confirmation state in cache', async () => {
287
- const mockRequest = {
288
- yar: { id: 'some-session' },
289
- params: { state: 'form1', slug: 'page1' }
290
- } as unknown as FormRequest
291
- const mockState = { confirmed: true as const }
292
- const mockTTL = 3600000
293
-
294
- jest.spyOn(config, 'get').mockReturnValue(mockTTL)
295
-
296
- await cacheService.setConfirmationState(mockRequest, mockState)
297
-
298
- expect(mockCache.set).toHaveBeenCalledWith(
299
- {
300
- segment: 'cache',
301
- id: 'some-session:form1:page1::confirmation'
302
- },
303
- mockState,
304
- mockTTL
305
- )
306
- })
307
- })
308
- })