@defra/forms-engine-plugin 4.7.2 → 4.7.3

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