@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,871 +0,0 @@
1
- import {
2
- type FormMetadata,
3
- type SubmitResponsePayload
4
- } from '@defra/forms-model'
5
-
6
- import { FileUploadField } from '~/src/server/plugins/engine/components/FileUploadField.js'
7
- import { type Field } from '~/src/server/plugins/engine/components/helpers/components.js'
8
- import { FormModel } from '~/src/server/plugins/engine/models/index.js'
9
- import {
10
- type DetailItem,
11
- type DetailItemField,
12
- type DetailItemRepeat
13
- } from '~/src/server/plugins/engine/models/types.js'
14
- import { format } from '~/src/server/plugins/engine/outputFormatters/adapter/v1.js'
15
- import { buildFormContextRequest } from '~/src/server/plugins/engine/pageControllers/__stubs__/request.js'
16
- import { FormAdapterSubmissionSchemaVersion } from '~/src/server/plugins/engine/types/index.js'
17
- import {
18
- FileStatus,
19
- UploadStatus,
20
- type FileState,
21
- type FormAdapterSubmissionMessagePayload
22
- } from '~/src/server/plugins/engine/types.js'
23
- import { FormStatus } from '~/src/server/routes/types.js'
24
- import definition from '~/test/form/definitions/repeat-mixed.js'
25
-
26
- const submitResponse = {
27
- message: 'Submit completed',
28
- result: {
29
- files: {
30
- main: '00000000-0000-0000-0000-000000000000',
31
- repeaters: {
32
- exampleRepeat: '11111111-1111-1111-1111-111111111111'
33
- }
34
- }
35
- }
36
- }
37
-
38
- const model = new FormModel(definition, {
39
- basePath: 'test'
40
- })
41
-
42
- const dummyField: Field = {
43
- getFormValueFromState: (_) => 'hello world'
44
- } as Field
45
-
46
- const itemId1 = 'abc-123'
47
- const itemId2 = 'xyz-987'
48
-
49
- const state = {
50
- $$__referenceNumber: 'foobar',
51
- orderType: 'delivery',
52
- pizza: [
53
- {
54
- toppings: 'Ham',
55
- quantity: 2,
56
- itemId: itemId1
57
- },
58
- {
59
- toppings: 'Pepperoni',
60
- quantity: 1,
61
- itemId: itemId2
62
- }
63
- ]
64
- }
65
-
66
- const pageUrl = new URL('http://example.com/repeat/pizza-order/summary')
67
-
68
- const request = buildFormContextRequest({
69
- method: 'get',
70
- url: pageUrl,
71
- path: pageUrl.pathname,
72
- params: {
73
- path: 'pizza-order',
74
- slug: 'repeat'
75
- },
76
- query: {},
77
- app: { model }
78
- })
79
-
80
- const context = model.getFormContext(request, state)
81
-
82
- const testDetailItemField: DetailItemField = {
83
- name: 'exampleField',
84
- label: 'Example Field',
85
- href: '/example-field',
86
- title: 'Example Field Title',
87
- field: dummyField,
88
- value: 'Example Value'
89
- } as DetailItemField
90
-
91
- const testDetailItemField2: DetailItemField = {
92
- name: 'exampleField2',
93
- label: 'Example Field 2',
94
- href: '/example-field-2',
95
- title: 'Example Field 2 Title',
96
- field: dummyField,
97
- value: 'Example Value 2'
98
- } as DetailItemField
99
-
100
- const testDetailItemRepeat: DetailItemRepeat = {
101
- name: 'exampleRepeat',
102
- label: 'Example Repeat',
103
- href: '/example-repeat',
104
- title: 'Example Repeat Title',
105
- value: 'Example Repeat Value',
106
- subItems: [
107
- [
108
- {
109
- name: 'subItem1_1',
110
- label: 'Sub Item 1 1',
111
- field: dummyField,
112
- href: '/sub-item-1-1',
113
- title: 'Sub Item 1 1 Title',
114
- value: 'Sub Item 1 1 Value'
115
- } as DetailItemField,
116
- {
117
- name: 'subItem1_2',
118
- label: 'Sub Item 1 2',
119
- field: dummyField,
120
- href: '/sub-item-1-2',
121
- title: 'Sub Item 1 2 Title',
122
- value: 'Sub Item 1 2 Value'
123
- } as DetailItemField
124
- ],
125
- [
126
- {
127
- name: 'subItem2_1',
128
- label: 'Sub Item 2 1',
129
- field: dummyField,
130
- href: '/sub-item-2-1',
131
- title: 'Sub Item 2 1 Title',
132
- value: 'Sub Item 2 1 Value'
133
- } as DetailItemField
134
- ]
135
- ]
136
- } as DetailItemRepeat
137
-
138
- const fileState: FileState = {
139
- uploadId: '123',
140
- status: {
141
- form: {
142
- file: {
143
- fileId: '123-456-789',
144
- contentLength: 1,
145
- filename: 'foobar.txt',
146
- fileStatus: FileStatus.complete
147
- }
148
- },
149
- uploadStatus: UploadStatus.ready,
150
- numberOfRejectedFiles: 0,
151
- metadata: {
152
- retrievalKey: '123'
153
- }
154
- }
155
- }
156
-
157
- const fileState2: FileState = {
158
- uploadId: '456',
159
- status: {
160
- form: {
161
- file: {
162
- fileId: '456-789-123',
163
- contentLength: 1,
164
- filename: 'bazbuzz.txt',
165
- fileStatus: FileStatus.complete
166
- }
167
- },
168
- uploadStatus: UploadStatus.ready,
169
- numberOfRejectedFiles: 0,
170
- metadata: {
171
- retrievalKey: '456'
172
- }
173
- }
174
- }
175
-
176
- const testDetailItemFile1: DetailItemField = Object.create(
177
- FileUploadField.prototype
178
- )
179
- Object.assign(testDetailItemFile1, {
180
- name: 'exampleFile1',
181
- label: 'Example File Field',
182
- href: '/example-file',
183
- title: 'Example File Field Title',
184
- field: testDetailItemFile1,
185
- value: 'Example File Value',
186
- state: {
187
- exampleFile1: [fileState, fileState2]
188
- }
189
- })
190
-
191
- const items: DetailItem[] = [
192
- testDetailItemField,
193
- testDetailItemField2,
194
- testDetailItemRepeat,
195
- testDetailItemFile1
196
- ]
197
-
198
- describe('Adapter v1 formatter', () => {
199
- beforeEach(() => {
200
- jest.clearAllMocks()
201
- jest.useFakeTimers()
202
- jest.setSystemTime(new Date('2024-01-15T10:30:00.000Z'))
203
- })
204
-
205
- afterEach(() => {
206
- jest.useRealTimers()
207
- })
208
-
209
- it('should return the adapter v1 output with complete formMetadata', () => {
210
- const formMetadata: Partial<FormMetadata> = {
211
- id: 'form-123',
212
- slug: 'test-form',
213
- title: 'Test Form',
214
- notificationEmail: 'test@example.com'
215
- } as FormMetadata
216
-
217
- const formStatus = {
218
- isPreview: false,
219
- state: FormStatus.Live
220
- }
221
-
222
- const body = format(
223
- context,
224
- items,
225
- model,
226
- submitResponse,
227
- formStatus,
228
- formMetadata as FormMetadata
229
- )
230
- const parsedBody = JSON.parse(body) as FormAdapterSubmissionMessagePayload
231
-
232
- expect(parsedBody.meta).toEqual({
233
- schemaVersion: FormAdapterSubmissionSchemaVersion.V1,
234
- timestamp: '2024-01-15T10:30:00.000Z',
235
- referenceNumber: 'foobar',
236
- formName: definition.name,
237
- formId: 'form-123',
238
- formSlug: 'test-form',
239
- status: FormStatus.Live,
240
- isPreview: false,
241
- notificationEmail: 'test@example.com'
242
- })
243
-
244
- expect(parsedBody.data).toEqual({
245
- main: {
246
- exampleField: 'hello world',
247
- exampleField2: 'hello world'
248
- },
249
- repeaters: {
250
- exampleRepeat: [
251
- {
252
- subItem1_1: 'hello world',
253
- subItem1_2: 'hello world'
254
- },
255
- {
256
- subItem2_1: 'hello world'
257
- }
258
- ]
259
- },
260
- files: {
261
- exampleFile1: [
262
- {
263
- fileId: '123-456-789',
264
- fileName: 'foobar.txt',
265
- userDownloadLink: 'https://forms-designer/file-download/123-456-789'
266
- },
267
- {
268
- fileId: '456-789-123',
269
- fileName: 'bazbuzz.txt',
270
- userDownloadLink: 'https://forms-designer/file-download/456-789-123'
271
- }
272
- ]
273
- }
274
- })
275
-
276
- expect(parsedBody.result).toEqual({
277
- files: {
278
- main: '00000000-0000-0000-0000-000000000000',
279
- repeaters: {
280
- exampleRepeat: '11111111-1111-1111-1111-111111111111'
281
- }
282
- }
283
- })
284
- })
285
-
286
- it('should handle preview form status correctly', () => {
287
- const formMetadata: Partial<FormMetadata> = {
288
- id: 'form-123',
289
- slug: 'test-form',
290
- title: 'Test Form',
291
- notificationEmail: 'test@example.com'
292
- } as FormMetadata
293
-
294
- const formStatus = {
295
- isPreview: true,
296
- state: FormStatus.Draft
297
- }
298
-
299
- const body = format(
300
- context,
301
- items,
302
- model,
303
- submitResponse,
304
- formStatus,
305
- formMetadata as FormMetadata
306
- )
307
- const parsedBody = JSON.parse(body) as FormAdapterSubmissionMessagePayload
308
-
309
- expect(parsedBody.meta.status).toBe(FormStatus.Draft)
310
- expect(parsedBody.meta.isPreview).toBe(true)
311
- })
312
-
313
- it('should handle missing formMetadata with empty strings', () => {
314
- const formStatus = {
315
- isPreview: false,
316
- state: FormStatus.Live
317
- }
318
-
319
- const body = format(context, items, model, submitResponse, formStatus)
320
- const parsedBody = JSON.parse(body) as FormAdapterSubmissionMessagePayload
321
-
322
- expect(parsedBody.meta.formId).toBe('')
323
- expect(parsedBody.meta.formSlug).toBe('')
324
- expect(parsedBody.meta.notificationEmail).toBe('')
325
- expect(parsedBody.meta.formName).toBe(definition.name)
326
- expect(parsedBody.meta.referenceNumber).toBe('foobar')
327
- })
328
-
329
- it('should handle partial formMetadata', () => {
330
- const formMetadata: Partial<FormMetadata> = {
331
- id: 'form-456',
332
- slug: 'partial-form',
333
- title: 'Partial Form'
334
- } as FormMetadata
335
-
336
- const formStatus = {
337
- isPreview: true,
338
- state: FormStatus.Draft
339
- }
340
-
341
- const body = format(
342
- context,
343
- items,
344
- model,
345
- submitResponse,
346
- formStatus,
347
- formMetadata as FormMetadata
348
- )
349
- const parsedBody = JSON.parse(body) as FormAdapterSubmissionMessagePayload
350
-
351
- expect(parsedBody.meta.formId).toBe('form-456')
352
- expect(parsedBody.meta.formSlug).toBe('partial-form')
353
- expect(parsedBody.meta.notificationEmail).toBe('')
354
- expect(parsedBody.meta.status).toBe(FormStatus.Draft)
355
- expect(parsedBody.meta.isPreview).toBe(true)
356
- })
357
-
358
- it('should use correct schema version', () => {
359
- const formStatus = {
360
- isPreview: false,
361
- state: FormStatus.Live
362
- }
363
-
364
- const body = format(context, items, model, submitResponse, formStatus)
365
- const parsedBody = JSON.parse(body) as FormAdapterSubmissionMessagePayload
366
-
367
- expect(parsedBody.meta.schemaVersion).toBe(
368
- FormAdapterSubmissionSchemaVersion.V1
369
- )
370
- expect(parsedBody.meta.schemaVersion).toBe(1)
371
- })
372
-
373
- it('should generate valid timestamp', () => {
374
- const formStatus = {
375
- isPreview: false,
376
- state: FormStatus.Live
377
- }
378
-
379
- const body = format(context, items, model, submitResponse, formStatus)
380
- const parsedBody = JSON.parse(body) as FormAdapterSubmissionMessagePayload
381
-
382
- expect(parsedBody.meta.timestamp).toBe('2024-01-15T10:30:00.000Z')
383
- expect(typeof parsedBody.meta.timestamp).toBe('string')
384
-
385
- expect(new Date(parsedBody.meta.timestamp)).toEqual(
386
- new Date('2024-01-15T10:30:00.000Z')
387
- )
388
- })
389
-
390
- it('should handle empty items array', () => {
391
- const formStatus = {
392
- isPreview: false,
393
- state: FormStatus.Live
394
- }
395
-
396
- const body = format(context, [], model, submitResponse, formStatus)
397
- const parsedBody = JSON.parse(body) as FormAdapterSubmissionMessagePayload
398
-
399
- expect(parsedBody.data.main).toEqual({})
400
- expect(parsedBody.data.repeaters).toEqual({})
401
- expect(parsedBody.data.files).toEqual({})
402
- expect(parsedBody.result).toEqual({
403
- files: {
404
- main: '00000000-0000-0000-0000-000000000000',
405
- repeaters: {
406
- exampleRepeat: '11111111-1111-1111-1111-111111111111'
407
- }
408
- }
409
- })
410
- })
411
-
412
- it('should handle different form statuses', () => {
413
- const testCases = [
414
- {
415
- isPreview: false,
416
- state: FormStatus.Live,
417
- expectedStatus: FormStatus.Live
418
- },
419
- {
420
- isPreview: true,
421
- state: FormStatus.Draft,
422
- expectedStatus: FormStatus.Draft
423
- },
424
- {
425
- isPreview: true,
426
- state: FormStatus.Live,
427
- expectedStatus: FormStatus.Live
428
- }
429
- ]
430
-
431
- testCases.forEach(({ isPreview, state, expectedStatus }) => {
432
- const formStatus = { isPreview, state }
433
- const body = format(context, items, model, submitResponse, formStatus)
434
- const parsedBody = JSON.parse(body) as FormAdapterSubmissionMessagePayload
435
-
436
- expect(parsedBody.meta.status).toBe(expectedStatus)
437
- expect(parsedBody.meta.isPreview).toBe(isPreview)
438
- })
439
- })
440
-
441
- it('should return valid JSON string', () => {
442
- const formStatus = {
443
- isPreview: false,
444
- state: FormStatus.Live
445
- }
446
-
447
- const body = format(context, items, model, submitResponse, formStatus)
448
-
449
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
450
- expect(() => JSON.parse(body)).not.toThrow()
451
- expect(typeof body).toBe('string')
452
- })
453
-
454
- it('should handle formMetadata with only id', () => {
455
- const formMetadata: Partial<FormMetadata> = {
456
- id: 'only-id-form'
457
- } as FormMetadata
458
-
459
- const formStatus = {
460
- isPreview: false,
461
- state: FormStatus.Live
462
- }
463
-
464
- const body = format(
465
- context,
466
- items,
467
- model,
468
- submitResponse,
469
- formStatus,
470
- formMetadata as FormMetadata
471
- )
472
- const parsedBody = JSON.parse(body) as FormAdapterSubmissionMessagePayload
473
-
474
- expect(parsedBody.meta.formId).toBe('only-id-form')
475
- expect(parsedBody.meta.formSlug).toBe('')
476
- expect(parsedBody.meta.notificationEmail).toBe('')
477
- })
478
-
479
- it('should handle formMetadata with only slug', () => {
480
- const formMetadata: Partial<FormMetadata> = {
481
- slug: 'only-slug-form'
482
- } as FormMetadata
483
-
484
- const formStatus = {
485
- isPreview: false,
486
- state: FormStatus.Live
487
- }
488
-
489
- const body = format(
490
- context,
491
- items,
492
- model,
493
- submitResponse,
494
- formStatus,
495
- formMetadata as FormMetadata
496
- )
497
- const parsedBody = JSON.parse(body) as FormAdapterSubmissionMessagePayload
498
-
499
- expect(parsedBody.meta.formId).toBe('')
500
- expect(parsedBody.meta.formSlug).toBe('only-slug-form')
501
- expect(parsedBody.meta.notificationEmail).toBe('')
502
- })
503
-
504
- it('should handle formMetadata with only notificationEmail', () => {
505
- const formMetadata: Partial<FormMetadata> = {
506
- notificationEmail: 'only-email@example.com'
507
- } as FormMetadata
508
-
509
- const formStatus = {
510
- isPreview: false,
511
- state: FormStatus.Live
512
- }
513
-
514
- const body = format(
515
- context,
516
- items,
517
- model,
518
- submitResponse,
519
- formStatus,
520
- formMetadata as FormMetadata
521
- )
522
- const parsedBody = JSON.parse(body) as FormAdapterSubmissionMessagePayload
523
-
524
- expect(parsedBody.meta.formId).toBe('')
525
- expect(parsedBody.meta.formSlug).toBe('')
526
- expect(parsedBody.meta.notificationEmail).toBe('only-email@example.com')
527
- })
528
-
529
- it('should include CSV file IDs from submitResponse.result.files', () => {
530
- const formStatus = {
531
- isPreview: false,
532
- state: FormStatus.Live
533
- }
534
-
535
- const body = format(context, items, model, submitResponse, formStatus)
536
- const parsedBody = JSON.parse(body) as FormAdapterSubmissionMessagePayload
537
-
538
- expect(parsedBody.data.main).toEqual({
539
- exampleField: 'hello world',
540
- exampleField2: 'hello world'
541
- })
542
-
543
- expect(parsedBody.data.repeaters.exampleRepeat).toEqual([
544
- {
545
- subItem1_1: 'hello world',
546
- subItem1_2: 'hello world'
547
- },
548
- {
549
- subItem2_1: 'hello world'
550
- }
551
- ])
552
-
553
- expect(parsedBody.data.files.exampleFile1).toEqual([
554
- {
555
- fileId: '123-456-789',
556
- fileName: 'foobar.txt',
557
- userDownloadLink: 'https://forms-designer/file-download/123-456-789'
558
- },
559
- {
560
- fileId: '456-789-123',
561
- fileName: 'bazbuzz.txt',
562
- userDownloadLink: 'https://forms-designer/file-download/456-789-123'
563
- }
564
- ])
565
-
566
- expect(parsedBody.result).toEqual({
567
- files: {
568
- main: '00000000-0000-0000-0000-000000000000',
569
- repeaters: {
570
- exampleRepeat: '11111111-1111-1111-1111-111111111111'
571
- }
572
- }
573
- })
574
- })
575
-
576
- it('should handle submitResponse without CSV file IDs gracefully', () => {
577
- const submitResponseWithoutFiles = {
578
- message: 'Submit completed',
579
- result: {
580
- files: {
581
- main: '',
582
- repeaters: {}
583
- }
584
- }
585
- }
586
-
587
- const formStatus = {
588
- isPreview: false,
589
- state: FormStatus.Live
590
- }
591
-
592
- const body = format(
593
- context,
594
- items,
595
- model,
596
- submitResponseWithoutFiles,
597
- formStatus
598
- )
599
- const parsedBody = JSON.parse(body) as FormAdapterSubmissionMessagePayload
600
-
601
- expect(parsedBody.data.main).toEqual({
602
- exampleField: 'hello world',
603
- exampleField2: 'hello world'
604
- })
605
-
606
- expect(parsedBody.data.repeaters.exampleRepeat).toEqual([
607
- {
608
- subItem1_1: 'hello world',
609
- subItem1_2: 'hello world'
610
- },
611
- {
612
- subItem2_1: 'hello world'
613
- }
614
- ])
615
- })
616
-
617
- it('should handle submitResponse with only main CSV file ID', () => {
618
- const submitResponseWithMainOnly = {
619
- message: 'Submit completed',
620
- result: {
621
- files: {
622
- main: 'main-only-file-id',
623
- repeaters: {}
624
- }
625
- }
626
- }
627
-
628
- const formStatus = {
629
- isPreview: false,
630
- state: FormStatus.Live
631
- }
632
-
633
- const body = format(
634
- context,
635
- items,
636
- model,
637
- submitResponseWithMainOnly,
638
- formStatus
639
- )
640
- const parsedBody = JSON.parse(body) as FormAdapterSubmissionMessagePayload
641
-
642
- expect(parsedBody.data.main).toEqual({
643
- exampleField: 'hello world',
644
- exampleField2: 'hello world'
645
- })
646
-
647
- expect(parsedBody.data.repeaters.exampleRepeat).toEqual([
648
- {
649
- subItem1_1: 'hello world',
650
- subItem1_2: 'hello world'
651
- },
652
- {
653
- subItem2_1: 'hello world'
654
- }
655
- ])
656
-
657
- expect(parsedBody.result).toEqual({
658
- files: {
659
- main: 'main-only-file-id',
660
- repeaters: {}
661
- }
662
- })
663
- })
664
-
665
- it('should handle submitResponse with missing repeaters property', () => {
666
- const submitResponseWithoutRepeaters = {
667
- message: 'Submit completed',
668
- result: {
669
- files: {
670
- main: 'main-only-file-id'
671
- }
672
- }
673
- }
674
-
675
- const formStatus = {
676
- isPreview: false,
677
- state: FormStatus.Live
678
- }
679
-
680
- const body = format(
681
- context,
682
- items,
683
- model,
684
- submitResponseWithoutRepeaters as unknown as SubmitResponsePayload,
685
- formStatus
686
- )
687
- const parsedBody = JSON.parse(body) as FormAdapterSubmissionMessagePayload
688
-
689
- expect(parsedBody.result).toEqual({
690
- files: {
691
- main: 'main-only-file-id',
692
- repeaters: {}
693
- }
694
- })
695
- })
696
-
697
- it('should handle missing versionMetadata gracefully', () => {
698
- const formMetadata: Partial<FormMetadata> = {
699
- id: 'form-123',
700
- slug: 'test-form',
701
- title: 'Test Form',
702
- notificationEmail: 'test@example.com'
703
- } as FormMetadata
704
-
705
- const formStatus = {
706
- isPreview: false,
707
- state: FormStatus.Live
708
- }
709
-
710
- const body = format(
711
- context,
712
- items,
713
- model,
714
- submitResponse,
715
- formStatus,
716
- formMetadata as FormMetadata
717
- )
718
- const parsedBody = JSON.parse(body) as FormAdapterSubmissionMessagePayload
719
-
720
- expect(parsedBody.meta.versionMetadata).toBeUndefined()
721
- })
722
-
723
- it('should handle optional fields that are undefined', () => {
724
- const formMetadata: Partial<FormMetadata> = {
725
- id: 'form-123',
726
- slug: 'test-form',
727
- title: 'Test Form',
728
- notificationEmail: 'test@example.com'
729
- } as FormMetadata
730
-
731
- const formStatus = {
732
- isPreview: false,
733
- state: FormStatus.Live
734
- }
735
-
736
- const dummyField: Field = {
737
- getFormValueFromState: (_) => undefined
738
- } as Field
739
-
740
- const items: DetailItem[] = [
741
- {
742
- name: 'exampleField3',
743
- label: 'Example Field 3',
744
- href: '/example-field-3',
745
- title: 'Example Field 3 Title',
746
- field: dummyField,
747
- value: ''
748
- } as DetailItemField
749
- ]
750
-
751
- const body = format(
752
- context,
753
- items,
754
- model,
755
- submitResponse,
756
- formStatus,
757
- formMetadata as FormMetadata
758
- )
759
- const parsedBody = JSON.parse(body) as FormAdapterSubmissionMessagePayload
760
- expect(parsedBody.data.main).toEqual({ exampleField3: null })
761
- })
762
-
763
- describe('version metadata handling', () => {
764
- it('should include versionMetadata from $$__formVersion in definition metadata', () => {
765
- const definitionWithFormVersion = {
766
- ...definition,
767
- metadata: {
768
- $$__formVersion: {
769
- versionNumber: 42,
770
- createdAt: new Date('2024-06-01T00:00:00.000Z')
771
- }
772
- }
773
- }
774
-
775
- const modelWithFormVersion = new FormModel(definitionWithFormVersion, {
776
- basePath: 'test'
777
- })
778
-
779
- const contextWithFormVersion = modelWithFormVersion.getFormContext(
780
- request,
781
- state
782
- )
783
-
784
- const formMetadata: Partial<FormMetadata> = {
785
- id: 'form-123',
786
- slug: 'test-form',
787
- title: 'Test Form',
788
- notificationEmail: 'test@example.com',
789
- versions: [
790
- {
791
- versionNumber: 1,
792
- createdAt: new Date('2024-01-01T00:00:00.000Z')
793
- }
794
- ]
795
- }
796
-
797
- const formStatus = {
798
- isPreview: false,
799
- state: FormStatus.Live
800
- }
801
-
802
- const body = format(
803
- contextWithFormVersion,
804
- items,
805
- modelWithFormVersion,
806
- submitResponse,
807
- formStatus,
808
- formMetadata as FormMetadata
809
- )
810
- const parsedBody = JSON.parse(body) as FormAdapterSubmissionMessagePayload
811
-
812
- expect(parsedBody.meta.versionMetadata).toEqual({
813
- versionNumber: 42,
814
- createdAt: '2024-06-01T00:00:00.000Z'
815
- })
816
- })
817
-
818
- it('should not include versionMetadata when no versions exist', () => {
819
- const formMetadata: Partial<FormMetadata> = {
820
- id: 'form-123',
821
- slug: 'test-form',
822
- title: 'Test Form',
823
- notificationEmail: 'test@example.com'
824
- }
825
-
826
- const formStatus = {
827
- isPreview: false,
828
- state: FormStatus.Live
829
- }
830
-
831
- const body = format(
832
- context,
833
- items,
834
- model,
835
- submitResponse,
836
- formStatus,
837
- formMetadata as FormMetadata
838
- )
839
- const parsedBody = JSON.parse(body) as FormAdapterSubmissionMessagePayload
840
-
841
- expect(parsedBody.meta.versionMetadata).toBeUndefined()
842
- })
843
-
844
- it('should not include versionMetadata when versions array is empty', () => {
845
- const formMetadata: Partial<FormMetadata> = {
846
- id: 'form-123',
847
- slug: 'test-form',
848
- title: 'Test Form',
849
- notificationEmail: 'test@example.com',
850
- versions: []
851
- }
852
-
853
- const formStatus = {
854
- isPreview: false,
855
- state: FormStatus.Live
856
- }
857
-
858
- const body = format(
859
- context,
860
- items,
861
- model,
862
- submitResponse,
863
- formStatus,
864
- formMetadata as FormMetadata
865
- )
866
- const parsedBody = JSON.parse(body) as FormAdapterSubmissionMessagePayload
867
-
868
- expect(parsedBody.meta.versionMetadata).toBeUndefined()
869
- })
870
- })
871
- })