@ukhomeoffice/cop-react-form-renderer 6.5.1-peter → 6.7.0-alpha

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 (390) hide show
  1. package/dist/components/CheckYourAnswers/Answer.js +12 -12
  2. package/dist/components/CheckYourAnswers/Answer.test.js +92 -127
  3. package/dist/components/CheckYourAnswers/CheckYourAnswers.js +101 -131
  4. package/dist/components/CheckYourAnswers/CheckYourAnswers.test.js +463 -769
  5. package/dist/components/CollectionPage/CollectionPage.js +73 -63
  6. package/dist/components/CollectionPage/CollectionPage.test.js +316 -366
  7. package/dist/components/CollectionSummary/BannerStrip.js +13 -13
  8. package/dist/components/CollectionSummary/BannerStrip.test.js +80 -76
  9. package/dist/components/CollectionSummary/CollectionSummary.js +97 -107
  10. package/dist/components/CollectionSummary/CollectionSummary.test.js +152 -142
  11. package/dist/components/CollectionSummary/Confirmation.js +14 -12
  12. package/dist/components/CollectionSummary/Confirmation.test.js +68 -63
  13. package/dist/components/CollectionSummary/RenderListView.js +45 -51
  14. package/dist/components/CollectionSummary/RenderListView.test.js +78 -77
  15. package/dist/components/CollectionSummary/SummaryCard.js +104 -135
  16. package/dist/components/CollectionSummary/SummaryCard.test.js +930 -962
  17. package/dist/components/CollectionSummary/SummaryCardDetails.js +72 -71
  18. package/dist/components/CollectionSummary/SummaryCardDetails.test.js +128 -135
  19. package/dist/components/CollectionSummary/SummaryCardValidationContext.js +30 -35
  20. package/dist/components/CollectionSummary/SummaryCardValidationContext.test.js +62 -74
  21. package/dist/components/FormComponent/Collection.js +74 -108
  22. package/dist/components/FormComponent/Collection.test.js +909 -1081
  23. package/dist/components/FormComponent/Container.js +40 -38
  24. package/dist/components/FormComponent/Container.test.js +314 -345
  25. package/dist/components/FormComponent/FormComponent.js +69 -72
  26. package/dist/components/FormComponent/FormComponent.test.js +353 -414
  27. package/dist/components/FormComponent/helpers/addLabel.js +4 -7
  28. package/dist/components/FormComponent/helpers/getComponentDisabled.js +1 -1
  29. package/dist/components/FormComponent/helpers/getComponentDisabled.test.js +7 -7
  30. package/dist/components/FormComponent/helpers/getComponentError.js +3 -5
  31. package/dist/components/FormComponent/helpers/getComponentError.test.js +14 -14
  32. package/dist/components/FormComponent/helpers/getComponentFieldSet.js +3 -4
  33. package/dist/components/FormComponent/helpers/getComponentFieldSet.test.js +6 -6
  34. package/dist/components/FormComponent/helpers/index.js +4 -4
  35. package/dist/components/FormPage/FormPage.js +65 -80
  36. package/dist/components/FormPage/FormPage.test.js +127 -163
  37. package/dist/components/FormRenderer/FormRenderer.js +143 -179
  38. package/dist/components/FormRenderer/FormRenderer.test.js +730 -1115
  39. package/dist/components/FormRenderer/handlers/cyaAction.js +2 -2
  40. package/dist/components/FormRenderer/handlers/getPageId.js +1 -3
  41. package/dist/components/FormRenderer/handlers/getPageId.test.js +14 -14
  42. package/dist/components/FormRenderer/handlers/handlers.test.js +32 -32
  43. package/dist/components/FormRenderer/handlers/index.js +1 -1
  44. package/dist/components/FormRenderer/handlers/navigate.js +3 -3
  45. package/dist/components/FormRenderer/handlers/submissionError.js +1 -1
  46. package/dist/components/FormRenderer/helpers/canActionProceed.js +1 -1
  47. package/dist/components/FormRenderer/helpers/canActionProceed.test.js +15 -15
  48. package/dist/components/FormRenderer/helpers/canCYASubmit.js +1 -3
  49. package/dist/components/FormRenderer/helpers/canCYASubmit.test.js +16 -20
  50. package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.js +17 -22
  51. package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.test.js +16 -16
  52. package/dist/components/FormRenderer/helpers/getCYA.js +3 -5
  53. package/dist/components/FormRenderer/helpers/getCYA.test.js +11 -11
  54. package/dist/components/FormRenderer/helpers/getFormState.js +5 -7
  55. package/dist/components/FormRenderer/helpers/getFormState.test.js +10 -10
  56. package/dist/components/FormRenderer/helpers/getNextPageId.js +13 -24
  57. package/dist/components/FormRenderer/helpers/getNextPageId.test.js +67 -67
  58. package/dist/components/FormRenderer/helpers/getPage.js +2 -4
  59. package/dist/components/FormRenderer/helpers/getPage.test.js +11 -11
  60. package/dist/components/FormRenderer/helpers/getRelevantPages.js +7 -9
  61. package/dist/components/FormRenderer/helpers/getRelevantPages.test.js +14 -14
  62. package/dist/components/FormRenderer/helpers/getSubmissionStatus.js +5 -5
  63. package/dist/components/FormRenderer/helpers/getSubmissionStatus.test.js +103 -97
  64. package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.js +62 -60
  65. package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.test.js +71 -78
  66. package/dist/components/FormRenderer/helpers/index.js +2 -4
  67. package/dist/components/FormRenderer/onCYAAction.js +59 -51
  68. package/dist/components/FormRenderer/onCYAAction.test.js +164 -152
  69. package/dist/components/FormRenderer/onPageAction.js +44 -47
  70. package/dist/components/FormRenderer/onPageAction.test.js +223 -213
  71. package/dist/components/FormRenderer/onTaskAction.js +9 -13
  72. package/dist/components/FormRenderer/onTaskAction.test.js +93 -88
  73. package/dist/components/PageActions/ActionButton.js +12 -15
  74. package/dist/components/PageActions/ActionButton.test.js +56 -78
  75. package/dist/components/PageActions/PageActions.js +10 -10
  76. package/dist/components/PageActions/PageActions.test.js +86 -115
  77. package/dist/components/SummaryList/GroupAction.js +9 -17
  78. package/dist/components/SummaryList/GroupAction.test.js +37 -33
  79. package/dist/components/SummaryList/RowAction.js +11 -16
  80. package/dist/components/SummaryList/RowAction.test.js +37 -33
  81. package/dist/components/SummaryList/SummaryList.js +21 -26
  82. package/dist/components/SummaryList/SummaryList.test.js +143 -166
  83. package/dist/components/SummaryList/SummaryListHeadingRow.js +6 -4
  84. package/dist/components/SummaryList/SummaryListRow.js +6 -4
  85. package/dist/components/SummaryList/SummaryListTitleRow.js +5 -3
  86. package/dist/components/SummaryList/helpers/getGroupActionAttributes.js +3 -5
  87. package/dist/components/SummaryList/helpers/getGroupActionAttributes.test.js +22 -22
  88. package/dist/components/SummaryList/helpers/getRowActionAttributes.js +3 -5
  89. package/dist/components/SummaryList/helpers/getRowActionAttributes.test.js +22 -22
  90. package/dist/components/SummaryList/helpers/index.js +1 -1
  91. package/dist/components/TaskList/Task.js +19 -29
  92. package/dist/components/TaskList/Task.test.js +83 -76
  93. package/dist/components/TaskList/TaskList.js +45 -71
  94. package/dist/components/TaskList/TaskList.test.js +113 -111
  95. package/dist/components/TaskList/TaskState.js +7 -5
  96. package/dist/components/TaskList/TaskState.test.js +52 -45
  97. package/dist/components/index.js +7 -7
  98. package/dist/context/HooksContext/HooksContext.js +57 -80
  99. package/dist/context/HooksContext/HooksContext.test.js +26 -35
  100. package/dist/context/HooksContext/index.js +3 -4
  101. package/dist/context/ValidationContext/ValidationContext.js +43 -94
  102. package/dist/context/ValidationContext/ValidationContext.test.js +56 -68
  103. package/dist/context/ValidationContext/index.js +3 -4
  104. package/dist/context/index.js +2 -2
  105. package/dist/hooks/index.js +9 -10
  106. package/dist/hooks/useAxios.js +14 -40
  107. package/dist/hooks/useGetRequest.js +61 -97
  108. package/dist/hooks/useHooks.js +1 -3
  109. package/dist/hooks/useRefData.js +26 -39
  110. package/dist/hooks/useValidation.js +1 -3
  111. package/dist/index.js +13 -14
  112. package/dist/models/CollectionLabels.js +1 -1
  113. package/dist/models/ComponentTypes.js +25 -25
  114. package/dist/models/EventTypes.js +4 -4
  115. package/dist/models/FormPages.js +4 -4
  116. package/dist/models/FormTypes.js +8 -8
  117. package/dist/models/HubFormats.js +3 -3
  118. package/dist/models/PageAction.js +44 -38
  119. package/dist/models/TaskStates.js +29 -28
  120. package/dist/models/index.js +9 -9
  121. package/dist/setupTests.js +30 -31
  122. package/dist/utils/CheckYourAnswers/getCYAAction.js +5 -5
  123. package/dist/utils/CheckYourAnswers/getCYAAction.test.js +52 -54
  124. package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.js +15 -25
  125. package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.test.js +33 -35
  126. package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.js +17 -31
  127. package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.test.js +42 -44
  128. package/dist/utils/CheckYourAnswers/getCYARow.js +6 -6
  129. package/dist/utils/CheckYourAnswers/getCYARow.test.js +86 -86
  130. package/dist/utils/CheckYourAnswers/getCYARowForGroup.js +18 -24
  131. package/dist/utils/CheckYourAnswers/getCYARowForGroup.test.js +15 -16
  132. package/dist/utils/CheckYourAnswers/getCYARowsForCollection.js +33 -36
  133. package/dist/utils/CheckYourAnswers/getCYARowsForCollection.test.js +58 -61
  134. package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.js +83 -89
  135. package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.test.js +164 -138
  136. package/dist/utils/CheckYourAnswers/getCYARowsForContainer.js +25 -20
  137. package/dist/utils/CheckYourAnswers/getCYARowsForContainer.test.js +103 -97
  138. package/dist/utils/CheckYourAnswers/getCYARowsForPage.js +13 -18
  139. package/dist/utils/CheckYourAnswers/getCYARowsForPage.test.js +70 -76
  140. package/dist/utils/CheckYourAnswers/getComponentRowForCYA.js +11 -11
  141. package/dist/utils/CheckYourAnswers/getComponentRowForCYA.test.js +7 -7
  142. package/dist/utils/CheckYourAnswers/index.js +1 -1
  143. package/dist/utils/CheckYourAnswers/showComponentCYA.js +4 -4
  144. package/dist/utils/CheckYourAnswers/showComponentCYA.test.js +25 -25
  145. package/dist/utils/CollectionPage/addCollectionPageEntry.js +2 -2
  146. package/dist/utils/CollectionPage/addCollectionPageEntry.test.js +5 -5
  147. package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.js +2 -2
  148. package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.test.js +17 -18
  149. package/dist/utils/CollectionPage/duplicateCollectionPageEntry.js +18 -20
  150. package/dist/utils/CollectionPage/duplicateCollectionPageEntry.test.js +55 -26
  151. package/dist/utils/CollectionPage/getCollectionPageActiveId.js +2 -2
  152. package/dist/utils/CollectionPage/getCollectionPageActiveId.test.js +10 -10
  153. package/dist/utils/CollectionPage/getCollectionPageActiveIndex.js +7 -11
  154. package/dist/utils/CollectionPage/getCollectionPageActiveIndex.test.js +22 -22
  155. package/dist/utils/CollectionPage/getCollectionPageData.js +8 -12
  156. package/dist/utils/CollectionPage/getCollectionPageData.test.js +19 -19
  157. package/dist/utils/CollectionPage/getErrorsForCollection.js +24 -24
  158. package/dist/utils/CollectionPage/getErrorsForCollection.test.js +20 -22
  159. package/dist/utils/CollectionPage/getQuickEditPage.js +36 -28
  160. package/dist/utils/CollectionPage/getQuickEditPage.test.js +26 -45
  161. package/dist/utils/CollectionPage/index.js +1 -1
  162. package/dist/utils/CollectionPage/mergeCollectionPages.js +31 -35
  163. package/dist/utils/CollectionPage/mergeCollectionPages.test.js +20 -20
  164. package/dist/utils/CollectionPage/removeCollectionPageEntry.js +4 -6
  165. package/dist/utils/CollectionPage/removeCollectionPageEntry.test.js +10 -10
  166. package/dist/utils/CollectionPage/setCollectionPageData.js +10 -16
  167. package/dist/utils/CollectionPage/setCollectionPageData.test.js +24 -24
  168. package/dist/utils/Component/addShowWhen.js +4 -8
  169. package/dist/utils/Component/addShowWhen.test.js +37 -37
  170. package/dist/utils/Component/applyToComponentTree.js +18 -18
  171. package/dist/utils/Component/applyToComponentTree.test.js +27 -32
  172. package/dist/utils/Component/cleanAttributes.js +10 -13
  173. package/dist/utils/Component/cleanAttributes.test.js +17 -18
  174. package/dist/utils/Component/elevateNestedComponents.js +5 -5
  175. package/dist/utils/Component/elevateNestedComponents.test.js +30 -30
  176. package/dist/utils/Component/getComponent.js +88 -94
  177. package/dist/utils/Component/getComponentTests/getComponent.autocomplete.test.js +18 -17
  178. package/dist/utils/Component/getComponentTests/getComponent.calculation.test.js +46 -59
  179. package/dist/utils/Component/getComponentTests/getComponent.checkboxes.test.js +39 -48
  180. package/dist/utils/Component/getComponentTests/getComponent.date.test.js +23 -33
  181. package/dist/utils/Component/getComponentTests/getComponent.details.test.js +20 -18
  182. package/dist/utils/Component/getComponentTests/getComponent.email.test.js +17 -22
  183. package/dist/utils/Component/getComponentTests/getComponent.file.test.js +20 -25
  184. package/dist/utils/Component/getComponentTests/getComponent.heading.test.js +10 -9
  185. package/dist/utils/Component/getComponentTests/getComponent.html.test.js +17 -15
  186. package/dist/utils/Component/getComponentTests/getComponent.insetText.test.js +9 -8
  187. package/dist/utils/Component/getComponentTests/getComponent.list.test.js +17 -15
  188. package/dist/utils/Component/getComponentTests/getComponent.multifile.test.js +22 -26
  189. package/dist/utils/Component/getComponentTests/getComponent.nested.test.js +155 -175
  190. package/dist/utils/Component/getComponentTests/getComponent.paragraph.test.js +17 -15
  191. package/dist/utils/Component/getComponentTests/getComponent.phoneNumber.test.js +17 -22
  192. package/dist/utils/Component/getComponentTests/getComponent.radios.test.js +57 -72
  193. package/dist/utils/Component/getComponentTests/getComponent.select.test.js +17 -22
  194. package/dist/utils/Component/getComponentTests/getComponent.text.test.js +17 -22
  195. package/dist/utils/Component/getComponentTests/getComponent.textArea.test.js +31 -38
  196. package/dist/utils/Component/getComponentTests/getComponent.time.test.js +20 -29
  197. package/dist/utils/Component/getComponentTests/getComponent.unknown.test.js +2 -2
  198. package/dist/utils/Component/getComponentTests/getComponent.warningText.test.js +9 -8
  199. package/dist/utils/Component/getDefaultValue.js +6 -8
  200. package/dist/utils/Component/getDefaultValue.test.js +12 -12
  201. package/dist/utils/Component/getDefaultValueFromConfig.js +22 -21
  202. package/dist/utils/Component/getDefaultValueFromConfig.test.js +31 -31
  203. package/dist/utils/Component/index.js +1 -1
  204. package/dist/utils/Component/isEditable.js +2 -4
  205. package/dist/utils/Component/isEditable.test.js +14 -15
  206. package/dist/utils/Component/optionIsSelected.js +1 -1
  207. package/dist/utils/Component/optionIsSelected.test.js +9 -9
  208. package/dist/utils/Component/setupContainerComponentsPath.js +27 -29
  209. package/dist/utils/Component/setupContainerComponentsPath.test.js +11 -11
  210. package/dist/utils/Component/showComponent.js +1 -1
  211. package/dist/utils/Component/showComponent.test.js +28 -28
  212. package/dist/utils/Component/wrapInFormGroup.js +2 -2
  213. package/dist/utils/Condition/index.js +1 -1
  214. package/dist/utils/Condition/meetsAllConditions.js +8 -8
  215. package/dist/utils/Condition/meetsAllConditions.test.js +20 -20
  216. package/dist/utils/Condition/meetsCondition.js +16 -25
  217. package/dist/utils/Condition/meetsCondition.test.js +402 -402
  218. package/dist/utils/Condition/meetsOneCondition.js +5 -5
  219. package/dist/utils/Condition/meetsOneCondition.test.js +16 -16
  220. package/dist/utils/Condition/setupConditions.js +13 -18
  221. package/dist/utils/Condition/setupConditions.test.js +7 -7
  222. package/dist/utils/Container/getEditableComponents.js +3 -5
  223. package/dist/utils/Container/getEditableComponents.test.js +43 -45
  224. package/dist/utils/Container/index.js +1 -1
  225. package/dist/utils/Container/setupNesting.js +16 -20
  226. package/dist/utils/Container/setupNesting.test.js +27 -30
  227. package/dist/utils/Container/showContainer.js +3 -7
  228. package/dist/utils/Container/showContainer.test.js +30 -30
  229. package/dist/utils/Data/applyFormula.js +38 -48
  230. package/dist/utils/Data/applyFormula.test.js +20 -20
  231. package/dist/utils/Data/getAutocompleteSource.js +18 -26
  232. package/dist/utils/Data/getAutocompleteSource.test.js +80 -86
  233. package/dist/utils/Data/getDataPath.js +18 -28
  234. package/dist/utils/Data/getDataPath.test.js +12 -12
  235. package/dist/utils/Data/getOptions.js +24 -30
  236. package/dist/utils/Data/getOptions.test.js +27 -27
  237. package/dist/utils/Data/getSourceData.js +6 -19
  238. package/dist/utils/Data/getSourceData.test.js +84 -80
  239. package/dist/utils/Data/index.js +1 -1
  240. package/dist/utils/Data/nestInRefdataOptions.js +9 -16
  241. package/dist/utils/Data/nestInRefdataOptions.test.js +16 -16
  242. package/dist/utils/Data/refDataToOptions.js +10 -13
  243. package/dist/utils/Data/refDataToOptions.test.js +19 -19
  244. package/dist/utils/Data/setDataItem.js +7 -8
  245. package/dist/utils/Data/setDataItem.test.js +37 -37
  246. package/dist/utils/Data/setupFormData.js +13 -21
  247. package/dist/utils/Data/setupFormData.test.js +51 -50
  248. package/dist/utils/Data/setupRefDataUrlForComponent.js +20 -26
  249. package/dist/utils/Data/setupRefDataUrlForComponent.test.js +24 -24
  250. package/dist/utils/FormPage/applyConditionalProperties.js +5 -9
  251. package/dist/utils/FormPage/applyConditionalProperties.test.js +15 -18
  252. package/dist/utils/FormPage/getConditionalText.js +3 -3
  253. package/dist/utils/FormPage/getConditionalText.test.js +29 -29
  254. package/dist/utils/FormPage/getFormPage.js +15 -16
  255. package/dist/utils/FormPage/getFormPage.test.js +47 -46
  256. package/dist/utils/FormPage/getFormPages.js +7 -12
  257. package/dist/utils/FormPage/getFormPages.test.js +20 -23
  258. package/dist/utils/FormPage/getPageActions.js +9 -15
  259. package/dist/utils/FormPage/getPageActions.test.js +32 -32
  260. package/dist/utils/FormPage/getParagraphFromText.js +5 -7
  261. package/dist/utils/FormPage/getParagraphFromText.test.js +6 -6
  262. package/dist/utils/FormPage/index.js +2 -4
  263. package/dist/utils/FormPage/showFormPage.js +3 -7
  264. package/dist/utils/FormPage/showFormPage.test.js +32 -32
  265. package/dist/utils/FormPage/showFormPageCYA.js +1 -1
  266. package/dist/utils/FormPage/showFormPageCYA.test.js +8 -8
  267. package/dist/utils/FormPage/useComponent.js +21 -28
  268. package/dist/utils/FormPage/useComponent.test.js +77 -79
  269. package/dist/utils/Format/formatData.js +1 -1
  270. package/dist/utils/Format/formatData.test.js +18 -18
  271. package/dist/utils/Format/formatDataForComponent.js +5 -6
  272. package/dist/utils/Format/formatDataForComponent.test.js +50 -78
  273. package/dist/utils/Format/formatDataForForm.js +6 -8
  274. package/dist/utils/Format/formatDataForForm.test.js +13 -16
  275. package/dist/utils/Format/formatDataForPage.js +4 -5
  276. package/dist/utils/Format/formatDataForPage.test.js +20 -25
  277. package/dist/utils/Format/index.js +1 -1
  278. package/dist/utils/Hub/getFormHub.js +1 -1
  279. package/dist/utils/Hub/getFormHub.test.js +28 -31
  280. package/dist/utils/Hub/index.js +1 -1
  281. package/dist/utils/Meta/constants.js +2 -2
  282. package/dist/utils/Meta/documents/getDocuments.js +1 -1
  283. package/dist/utils/Meta/documents/getDocuments.test.js +24 -16
  284. package/dist/utils/Meta/documents/index.js +1 -1
  285. package/dist/utils/Meta/documents/setDocumentsForField.js +14 -16
  286. package/dist/utils/Meta/documents/setDocumentsForField.test.js +68 -34
  287. package/dist/utils/Meta/index.js +1 -1
  288. package/dist/utils/Operate/checkValueIsTruthy.js +2 -2
  289. package/dist/utils/Operate/checkValueIsTruthy.test.js +16 -16
  290. package/dist/utils/Operate/getFirstOf.js +5 -5
  291. package/dist/utils/Operate/getFirstOf.test.js +31 -31
  292. package/dist/utils/Operate/getIndexOfMatchingValueIn.js +10 -10
  293. package/dist/utils/Operate/getIndexOfMatchingValueIn.test.js +46 -52
  294. package/dist/utils/Operate/index.js +1 -1
  295. package/dist/utils/Operate/persistValueInFormData.js +3 -3
  296. package/dist/utils/Operate/persistValueInFormData.test.js +22 -20
  297. package/dist/utils/Operate/runPageOperations.js +7 -7
  298. package/dist/utils/Operate/runPageOperations.test.js +35 -36
  299. package/dist/utils/Operate/setValueInFormData.js +2 -2
  300. package/dist/utils/Operate/setValueInFormData.test.js +16 -16
  301. package/dist/utils/Operate/shouldRun.js +6 -6
  302. package/dist/utils/Operate/shouldRun.test.js +21 -27
  303. package/dist/utils/Validate/additional/conditionallyRequired.js +4 -4
  304. package/dist/utils/Validate/additional/conditionallyRequired.test.js +18 -18
  305. package/dist/utils/Validate/additional/index.js +6 -6
  306. package/dist/utils/Validate/additional/index.test.js +12 -12
  307. package/dist/utils/Validate/additional/mustBeAfter.js +2 -2
  308. package/dist/utils/Validate/additional/mustBeAfter.test.js +40 -40
  309. package/dist/utils/Validate/additional/mustBeBefore.js +2 -2
  310. package/dist/utils/Validate/additional/mustBeBefore.test.js +28 -28
  311. package/dist/utils/Validate/additional/mustBeEarlierDateTime.js +7 -11
  312. package/dist/utils/Validate/additional/mustBeEarlierDateTime.test.js +37 -41
  313. package/dist/utils/Validate/additional/mustBeGreaterThan.js +2 -2
  314. package/dist/utils/Validate/additional/mustBeGreaterThan.test.js +18 -18
  315. package/dist/utils/Validate/additional/mustBeInTheFuture.js +2 -2
  316. package/dist/utils/Validate/additional/mustBeInTheFuture.test.js +12 -12
  317. package/dist/utils/Validate/additional/mustBeInThePast.js +3 -3
  318. package/dist/utils/Validate/additional/mustBeInThePast.test.js +12 -12
  319. package/dist/utils/Validate/additional/mustBeLessThan.js +2 -2
  320. package/dist/utils/Validate/additional/mustBeLessThan.test.js +17 -17
  321. package/dist/utils/Validate/additional/mustBeLongerThan.js +1 -1
  322. package/dist/utils/Validate/additional/mustBeLongerThan.test.js +16 -16
  323. package/dist/utils/Validate/additional/mustBeNumbersOnly.js +2 -2
  324. package/dist/utils/Validate/additional/mustBeNumbersOnly.test.js +20 -20
  325. package/dist/utils/Validate/additional/mustBeShorterThan.js +1 -1
  326. package/dist/utils/Validate/additional/mustBeShorterThan.test.js +16 -16
  327. package/dist/utils/Validate/additional/mustBeUniqueInCollection.js +8 -4
  328. package/dist/utils/Validate/additional/mustBeUniqueInCollection.test.js +64 -32
  329. package/dist/utils/Validate/additional/mustEnterAtLeastOne.js +2 -2
  330. package/dist/utils/Validate/additional/mustEnterAtLeastOne.test.js +14 -16
  331. package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.js +1 -1
  332. package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.test.js +12 -12
  333. package/dist/utils/Validate/additional/mustNotContainSql.js +3 -4
  334. package/dist/utils/Validate/additional/mustNotContainSql.test.js +14 -14
  335. package/dist/utils/Validate/additional/mustSelectOnlyOne.js +2 -2
  336. package/dist/utils/Validate/additional/mustSelectOnlyOne.test.js +28 -26
  337. package/dist/utils/Validate/additional/utils.js +9 -22
  338. package/dist/utils/Validate/index.js +1 -1
  339. package/dist/utils/Validate/validateCollection.js +19 -25
  340. package/dist/utils/Validate/validateCollection.test.js +74 -66
  341. package/dist/utils/Validate/validateComponent.js +17 -15
  342. package/dist/utils/Validate/validateComponent.test.js +167 -146
  343. package/dist/utils/Validate/validateContainer.js +15 -20
  344. package/dist/utils/Validate/validateContainer.test.js +58 -52
  345. package/dist/utils/Validate/validateDate.js +15 -21
  346. package/dist/utils/Validate/validateDate.test.js +31 -32
  347. package/dist/utils/Validate/validateEmail.js +6 -8
  348. package/dist/utils/Validate/validateEmail.test.js +25 -25
  349. package/dist/utils/Validate/validateMultifile.js +5 -7
  350. package/dist/utils/Validate/validateMultifile.test.js +17 -18
  351. package/dist/utils/Validate/validatePage.js +19 -22
  352. package/dist/utils/Validate/validatePage.test.js +215 -203
  353. package/dist/utils/Validate/validateRegex.js +3 -5
  354. package/dist/utils/Validate/validateRegex.test.js +14 -14
  355. package/dist/utils/Validate/validateRequired.js +4 -6
  356. package/dist/utils/Validate/validateRequired.test.js +18 -18
  357. package/dist/utils/Validate/validateTextArea.js +4 -6
  358. package/dist/utils/Validate/validateTextArea.test.js +20 -20
  359. package/dist/utils/Validate/validateTime.js +11 -18
  360. package/dist/utils/Validate/validateTime.test.js +16 -16
  361. package/dist/utils/index.js +7 -9
  362. package/package.json +2 -2
  363. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/component-used-in-multiple-pages-data.json +0 -4
  364. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/component-used-in-multiple-pages-form.json +0 -61
  365. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/cop-airpax-after.json +0 -429
  366. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/cop-airpax-before.json +0 -449
  367. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/cop-airpax-form.json +0 -15219
  368. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/cop-eab-2-data-after.json +0 -516
  369. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/cop-eab-2-data-before.json +0 -593
  370. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/cop-eab2-form.json +0 -15219
  371. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/cop-mandec-data-after.json +0 -84
  372. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/cop-mandec-data-before.json +0 -98
  373. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/cop-mandec-form.json +0 -9158
  374. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/data-with-collection-data-removed.json +0 -4
  375. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/data-with-collections.json +0 -8
  376. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/data-with-components-removed.json +0 -3
  377. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/data-with-components.json +0 -5
  378. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/data-with-entire-collection-removed.json +0 -3
  379. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/data-with-nested-component-removed.json +0 -10
  380. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/data-with-nested-components.json +0 -11
  381. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/form-for-nested-components.json +0 -96
  382. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/form-with-collections-delete-entire.json +0 -47
  383. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/form-with-collections.json +0 -46
  384. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/form-with-components.json +0 -48
  385. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/test.json +0 -1605
  386. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/test2.json +0 -205
  387. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.js +0 -206
  388. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.test.js +0 -143
  389. package/dist/components/FormRenderer/helpers/deleteNodeByPath.js +0 -26
  390. package/dist/components/FormRenderer/helpers/deleteNodeByPath.test.js +0 -56
@@ -1,426 +1,365 @@
1
1
  "use strict";
2
2
 
3
- function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
3
  var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
5
4
  var _react = _interopRequireDefault(require("react"));
6
5
  var _setupTests = require("../../setupTests");
7
6
  var _FormComponent = _interopRequireDefault(require("./FormComponent"));
8
7
  var _models = require("../../models");
9
8
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
- function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
11
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
12
- function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } // Global imports
9
+ // Global imports
10
+
13
11
  // Local imports
14
- describe('components', function () {
15
- describe('FormComponent', function () {
16
- it('should render a text component appropriately', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
17
- var ID, VALUE, COMPONENT, ON_CHANGE, _renderWithValidation, container, formGroup, label, hint, input;
18
- return _regeneratorRuntime().wrap(function _callee$(_context) {
19
- while (1) switch (_context.prev = _context.next) {
20
- case 0:
21
- ID = 'component';
22
- VALUE = 'Text value';
23
- COMPONENT = {
24
- id: ID,
25
- fieldId: ID,
26
- type: 'text',
27
- label: 'Text component',
28
- hint: 'Text hint'
29
- };
30
- ON_CHANGE = function ON_CHANGE() {};
31
- _renderWithValidation = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_FormComponent.default, {
32
- "data-testid": ID,
33
- component: COMPONENT,
34
- value: VALUE,
35
- onChange: ON_CHANGE
36
- })), container = _renderWithValidation.container; // text components are wrapper in a FormGroup by default.
37
- formGroup = container.childNodes[0];
38
- expect(formGroup.tagName).toEqual('DIV');
39
- expect(formGroup.classList).toContain('govuk-form-group');
40
- label = formGroup.childNodes[0];
41
- expect(label.tagName).toEqual('LABEL');
42
- expect(label.classList).toContain('govuk-label');
43
- expect(label.textContent).toEqual("".concat(COMPONENT.label, " (optional)"));
44
- expect(label.getAttribute('for')).toEqual(ID);
45
- hint = formGroup.childNodes[1];
46
- expect(hint.tagName).toEqual('DIV');
47
- expect(hint.classList).toContain('govuk-hint');
48
- expect(hint.textContent).toEqual(COMPONENT.hint);
49
- input = formGroup.childNodes[2];
50
- expect(input.tagName).toEqual('INPUT');
51
- expect(input.classList).toContain('govuk-input');
52
- expect(input.id).toEqual(ID);
53
- expect(input.value).toEqual(VALUE);
54
- case 22:
55
- case "end":
56
- return _context.stop();
57
- }
58
- }, _callee);
59
- })));
60
- it('should render a text component appropriately with wrap turned off', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
61
- var ID, VALUE, COMPONENT, ON_CHANGE, _renderWithValidation2, container, input;
62
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
63
- while (1) switch (_context2.prev = _context2.next) {
64
- case 0:
65
- ID = 'component';
66
- VALUE = 'Text value';
67
- COMPONENT = {
68
- id: ID,
69
- fieldId: ID,
70
- type: 'text',
71
- label: 'Text component',
72
- hint: 'Text hint'
73
- };
74
- ON_CHANGE = function ON_CHANGE() {};
75
- _renderWithValidation2 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_FormComponent.default, {
76
- "data-testid": ID,
77
- component: COMPONENT,
78
- wrap: false,
79
- value: VALUE,
80
- onChange: ON_CHANGE
81
- })), container = _renderWithValidation2.container; // With wrap = false, there should be no form group.
82
- input = container.childNodes[0];
83
- expect(input.tagName).toEqual('INPUT');
84
- expect(input.classList).toContain('govuk-input');
85
- expect(input.id).toEqual(ID);
86
- expect(input.value).toEqual(VALUE);
87
- case 10:
88
- case "end":
89
- return _context2.stop();
90
- }
91
- }, _callee2);
92
- })));
93
- it('should render an html component appropriately', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
94
- var ID, COMPONENT, _renderWithValidation3, container, p;
95
- return _regeneratorRuntime().wrap(function _callee3$(_context3) {
96
- while (1) switch (_context3.prev = _context3.next) {
97
- case 0:
98
- ID = 'component';
99
- COMPONENT = {
100
- type: 'html',
101
- tagName: 'p',
102
- content: 'HTML content'
103
- };
104
- _renderWithValidation3 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_FormComponent.default, {
105
- "data-testid": ID,
106
- component: COMPONENT
107
- })), container = _renderWithValidation3.container;
108
- p = container.childNodes[0];
109
- expect(p.tagName).toEqual('P');
110
- expect(p.textContent).toEqual(COMPONENT.content);
111
- case 6:
112
- case "end":
113
- return _context3.stop();
114
- }
115
- }, _callee3);
116
- })));
117
- it('should render an overridden html component appropriately', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
118
- var hooks, ID, COMPONENT, _renderWithValidation4, container, div;
119
- return _regeneratorRuntime().wrap(function _callee4$(_context4) {
120
- while (1) switch (_context4.prev = _context4.next) {
121
- case 0:
122
- hooks = {
123
- onGetComponent: function onGetComponent(config, wrap) {
124
- return /*#__PURE__*/_react.default.createElement("div", null, "".concat(config.type, " | ").concat(config.tagName, " | ").concat(config.content, " | ").concat(wrap));
125
- }
126
- };
127
- ID = 'component';
128
- COMPONENT = {
129
- type: 'html',
130
- tagName: 'p',
131
- content: 'HTML content'
132
- };
133
- _renderWithValidation4 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_FormComponent.default, {
134
- "data-testid": ID,
135
- component: COMPONENT
136
- }), {
137
- hooks: hooks
138
- }), container = _renderWithValidation4.container;
139
- div = container.childNodes[0];
140
- expect(div.tagName).toEqual('DIV');
141
- expect(div.textContent).toEqual("".concat(COMPONENT.type, " | ").concat(COMPONENT.tagName, " | ").concat(COMPONENT.content, " | true"));
142
- case 7:
143
- case "end":
144
- return _context4.stop();
145
- }
146
- }, _callee4);
147
- })));
148
- it('should render an overridden html component appropriately and pass through onAction', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {
149
- var hooks, ID, COMPONENT, _renderWithValidation5, container, div;
150
- return _regeneratorRuntime().wrap(function _callee5$(_context5) {
151
- while (1) switch (_context5.prev = _context5.next) {
152
- case 0:
153
- hooks = {
154
- onGetComponent: function onGetComponent(config, wrap) {
155
- return /*#__PURE__*/_react.default.createElement("div", null, "".concat(config.type, " | ").concat(config.tagName, " | ").concat(config.content, " | ").concat(wrap, " | ").concat(config.onAction));
156
- }
157
- };
158
- ID = 'component';
159
- COMPONENT = {
160
- type: 'html',
161
- tagName: 'p',
162
- content: 'HTML content'
163
- };
164
- _renderWithValidation5 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_FormComponent.default, {
165
- "data-testid": ID,
166
- component: COMPONENT,
167
- onAction: "() => {}"
168
- }), {
169
- hooks: hooks
170
- }), container = _renderWithValidation5.container;
171
- div = container.childNodes[0];
172
- expect(div.tagName).toEqual('DIV');
173
- expect(div.textContent).toEqual("".concat(COMPONENT.type, " | ").concat(COMPONENT.tagName, " | ").concat(COMPONENT.content, " | true | () => {}"));
174
- case 7:
175
- case "end":
176
- return _context5.stop();
177
- }
178
- }, _callee5);
179
- })));
180
- it('should render the correct html component when the override returns null', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6() {
181
- var hooks, ID, COMPONENT, _renderWithValidation6, container, p;
182
- return _regeneratorRuntime().wrap(function _callee6$(_context6) {
183
- while (1) switch (_context6.prev = _context6.next) {
184
- case 0:
185
- hooks = {
186
- onGetComponent: function onGetComponent() {
187
- return null;
188
- }
189
- };
190
- ID = 'component';
191
- COMPONENT = {
192
- type: 'html',
193
- tagName: 'p',
194
- content: 'HTML content'
195
- };
196
- _renderWithValidation6 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_FormComponent.default, {
197
- "data-testid": ID,
198
- component: COMPONENT
199
- }), {
200
- hooks: hooks
201
- }), container = _renderWithValidation6.container;
202
- p = container.childNodes[0];
203
- expect(p.tagName).toEqual('P');
204
- expect(p.textContent).toEqual(COMPONENT.content);
205
- case 7:
206
- case "end":
207
- return _context6.stop();
208
- }
209
- }, _callee6);
210
- })));
211
- it('should render a text component appropriately with interpolated label', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7() {
212
- var ID, VALUE, COMPONENT, DATA, ON_CHANGE, _renderWithValidation7, container, formGroup, label, hint, input;
213
- return _regeneratorRuntime().wrap(function _callee7$(_context7) {
214
- while (1) switch (_context7.prev = _context7.next) {
215
- case 0:
216
- ID = 'component';
217
- VALUE = 'Text value'; // eslint-disable-next-line no-template-curly-in-string
218
- COMPONENT = {
219
- id: ID,
220
- fieldId: ID,
221
- type: 'text',
222
- label: '${text} Text component',
223
- cya_label: '${text} Text component',
224
- hint: 'Text hint'
225
- };
226
- DATA = {
227
- text: 'Interpolated'
228
- };
229
- ON_CHANGE = function ON_CHANGE() {};
230
- _renderWithValidation7 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_FormComponent.default, {
231
- "data-testid": ID,
232
- component: COMPONENT,
233
- value: VALUE,
234
- onChange: ON_CHANGE,
235
- formData: DATA
236
- })), container = _renderWithValidation7.container; // text components are wrapper in a FormGroup by default.
237
- formGroup = container.childNodes[0];
238
- expect(formGroup.tagName).toEqual('DIV');
239
- expect(formGroup.classList).toContain('govuk-form-group');
240
- label = formGroup.childNodes[0];
241
- expect(label.tagName).toEqual('LABEL');
242
- expect(label.classList).toContain('govuk-label');
243
- expect(label.textContent).toEqual('Interpolated Text component (optional)');
244
- expect(label.getAttribute('for')).toEqual(ID);
245
- hint = formGroup.childNodes[1];
246
- expect(hint.tagName).toEqual('DIV');
247
- expect(hint.classList).toContain('govuk-hint');
248
- expect(hint.textContent).toEqual(COMPONENT.hint);
249
- input = formGroup.childNodes[2];
250
- expect(input.tagName).toEqual('INPUT');
251
- expect(input.classList).toContain('govuk-input');
252
- expect(input.id).toEqual(ID);
253
- expect(input.value).toEqual(VALUE);
254
- case 23:
255
- case "end":
256
- return _context7.stop();
257
- }
258
- }, _callee7);
259
- })));
260
- it('should correctly handle a component\'s default value when it has no existing value', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8() {
261
- var ID, COMPONENT, DATA, ON_CHANGE_ARGS, ON_CHANGE_COUNT, ON_CHANGE, _renderWithValidation8, container, rerender, formGroup, input;
262
- return _regeneratorRuntime().wrap(function _callee8$(_context8) {
263
- while (1) switch (_context8.prev = _context8.next) {
264
- case 0:
265
- ID = 'component';
266
- COMPONENT = {
267
- id: ID,
268
- fieldId: ID,
269
- type: 'text',
270
- label: 'Text component',
271
- defaultValue: 'default text'
272
- };
273
- DATA = {};
274
- ON_CHANGE_ARGS = [];
275
- ON_CHANGE_COUNT = 0;
276
- ON_CHANGE = function ON_CHANGE(_ref9) {
277
- var target = _ref9.target;
278
- ON_CHANGE_ARGS.push(target);
279
- ON_CHANGE_COUNT += 1;
280
- DATA[target.name] = target.value;
281
- };
282
- _renderWithValidation8 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_FormComponent.default, {
283
- "data-testid": ID,
284
- component: COMPONENT,
285
- value: DATA[ID],
286
- onChange: ON_CHANGE,
287
- formData: DATA
288
- })), container = _renderWithValidation8.container, rerender = _renderWithValidation8.rerender;
289
- expect(ON_CHANGE_COUNT).toEqual(1);
290
- expect(ON_CHANGE_ARGS[0]).toMatchObject({
291
- name: 'component',
292
- value: COMPONENT.defaultValue
293
- });
294
- formGroup = container.childNodes[0];
295
- input = formGroup.childNodes[2];
296
- (0, _setupTests.rerenderWithValidation)(rerender, /*#__PURE__*/_react.default.createElement(_FormComponent.default, {
297
- "data-testid": ID,
298
- component: COMPONENT,
299
- value: DATA[ID],
300
- onChange: ON_CHANGE,
301
- formData: DATA
302
- }));
303
- // Input should only be updated once the changes caused
304
- // by onChange have had another render to propagate down.
305
- expect(input.value).toEqual(COMPONENT.defaultValue);
306
- case 13:
307
- case "end":
308
- return _context8.stop();
309
- }
310
- }, _callee8);
311
- })));
312
- it('should correctly handle a component\'s default value when it has an existing value', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee9() {
313
- var ID, COMPONENT, DATA, ON_CHANGE_ARGS, ON_CHANGE_COUNT, ON_CHANGE, _renderWithValidation9, container, formGroup, input;
314
- return _regeneratorRuntime().wrap(function _callee9$(_context9) {
315
- while (1) switch (_context9.prev = _context9.next) {
316
- case 0:
317
- ID = 'component';
318
- COMPONENT = {
319
- id: ID,
320
- fieldId: ID,
321
- type: 'text',
322
- label: 'Text component',
323
- defaultValue: 'default text'
324
- };
325
- DATA = {
326
- component: 'existing value'
327
- };
328
- ON_CHANGE_ARGS = [];
329
- ON_CHANGE_COUNT = 0;
330
- ON_CHANGE = function ON_CHANGE(_ref11) {
331
- var target = _ref11.target;
332
- ON_CHANGE_ARGS.push(target);
333
- ON_CHANGE_COUNT += 1;
334
- };
335
- _renderWithValidation9 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_FormComponent.default, {
336
- "data-testid": ID,
337
- component: COMPONENT,
338
- value: DATA[ID],
339
- onChange: ON_CHANGE,
340
- formData: DATA
341
- })), container = _renderWithValidation9.container;
342
- expect(ON_CHANGE_COUNT).toEqual(0);
343
- formGroup = container.childNodes[0];
344
- input = formGroup.childNodes[2];
345
- expect(input.value).toEqual(DATA[ID]);
346
- case 11:
347
- case "end":
348
- return _context9.stop();
349
- }
350
- }, _callee9);
351
- })));
352
- it('should correctly handle a nested file input on change event within a nested container', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee10() {
353
- var ID, NESTED_CONTAINER_ID, NESTED_ID, COMPONENT, DATA, ON_CHANGE_ARGS, ON_CHANGE_COUNT, ON_CHANGE, _renderWithValidation10, container, c, formGroup, fieldSet, input, FILE_EXTENSION, FILE_NAME, FILE_TYPE, str, blob, FILE;
354
- return _regeneratorRuntime().wrap(function _callee10$(_context10) {
355
- while (1) switch (_context10.prev = _context10.next) {
356
- case 0:
357
- ID = 'component';
358
- NESTED_CONTAINER_ID = 'nested-container-component';
359
- NESTED_ID = 'nested-component';
360
- COMPONENT = {
361
- id: ID,
362
- fieldId: ID,
363
- type: _models.ComponentTypes.CHECKBOXES,
364
- label: 'Checkboxes component',
365
- data: {
366
- options: [{
367
- value: 'EPSILON',
368
- label: 'Epsilon Label'
369
- }, {
370
- value: 'GAMMA',
371
- label: 'Gamma Label',
372
- nested: [{
373
- id: NESTED_CONTAINER_ID,
374
- fieldId: NESTED_CONTAINER_ID,
375
- type: _models.ComponentTypes.CONTAINER,
376
- components: [{
377
- id: NESTED_ID,
378
- fieldId: NESTED_ID,
379
- label: 'File upload',
380
- type: _models.ComponentTypes.FILE
381
- }]
382
- }]
383
- }]
384
- }
385
- };
386
- DATA = {
387
- component: 'GAMMA'
388
- };
389
- ON_CHANGE_ARGS = [];
390
- ON_CHANGE_COUNT = 0;
391
- ON_CHANGE = function ON_CHANGE(_ref13) {
392
- var target = _ref13.target;
393
- ON_CHANGE_ARGS.push(target);
394
- ON_CHANGE_COUNT += 1;
395
- };
396
- _renderWithValidation10 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_FormComponent.default, {
397
- "data-testid": ID,
398
- component: COMPONENT,
399
- value: DATA[ID],
400
- onChange: ON_CHANGE,
401
- formData: DATA
402
- })), container = _renderWithValidation10.container; // Get hold of the file input.
403
- c = container.childNodes[0];
404
- formGroup = c.childNodes[0];
405
- fieldSet = formGroup.childNodes[2];
406
- input = fieldSet.childNodes[2].childNodes[0].childNodes[0].childNodes[2].childNodes[0];
407
- FILE_EXTENSION = 'json';
408
- FILE_NAME = "test.".concat(FILE_EXTENSION);
409
- FILE_TYPE = 'application/JSON';
410
- str = JSON.stringify({
411
- alpha: 'bravo'
412
- });
413
- blob = new Blob([str]);
414
- FILE = new File([blob], FILE_NAME, {
415
- type: FILE_TYPE
416
- });
417
- _userEvent.default.upload(input, FILE);
418
- expect(ON_CHANGE_COUNT).toEqual(3);
419
- case 21:
420
- case "end":
421
- return _context10.stop();
12
+
13
+ describe('components', () => {
14
+ describe('FormComponent', () => {
15
+ it('should render a text component appropriately', async () => {
16
+ const ID = 'component';
17
+ const VALUE = 'Text value';
18
+ const COMPONENT = {
19
+ id: ID,
20
+ fieldId: ID,
21
+ type: 'text',
22
+ label: 'Text component',
23
+ hint: 'Text hint'
24
+ };
25
+ const ON_CHANGE = () => {};
26
+ const {
27
+ container
28
+ } = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_FormComponent.default, {
29
+ "data-testid": ID,
30
+ component: COMPONENT,
31
+ value: VALUE,
32
+ onChange: ON_CHANGE
33
+ }));
34
+
35
+ // text components are wrapper in a FormGroup by default.
36
+ const formGroup = container.childNodes[0];
37
+ expect(formGroup.tagName).toEqual('DIV');
38
+ expect(formGroup.classList).toContain('govuk-form-group');
39
+ const label = formGroup.childNodes[0];
40
+ expect(label.tagName).toEqual('LABEL');
41
+ expect(label.classList).toContain('govuk-label');
42
+ expect(label.textContent).toEqual("".concat(COMPONENT.label, " (optional)"));
43
+ expect(label.getAttribute('for')).toEqual(ID);
44
+ const hint = formGroup.childNodes[1];
45
+ expect(hint.tagName).toEqual('DIV');
46
+ expect(hint.classList).toContain('govuk-hint');
47
+ expect(hint.textContent).toEqual(COMPONENT.hint);
48
+ const input = formGroup.childNodes[2];
49
+ expect(input.tagName).toEqual('INPUT');
50
+ expect(input.classList).toContain('govuk-input');
51
+ expect(input.id).toEqual(ID);
52
+ expect(input.value).toEqual(VALUE);
53
+ });
54
+ it('should render a text component appropriately with wrap turned off', async () => {
55
+ const ID = 'component';
56
+ const VALUE = 'Text value';
57
+ const COMPONENT = {
58
+ id: ID,
59
+ fieldId: ID,
60
+ type: 'text',
61
+ label: 'Text component',
62
+ hint: 'Text hint'
63
+ };
64
+ const ON_CHANGE = () => {};
65
+ const {
66
+ container
67
+ } = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_FormComponent.default, {
68
+ "data-testid": ID,
69
+ component: COMPONENT,
70
+ wrap: false,
71
+ value: VALUE,
72
+ onChange: ON_CHANGE
73
+ }));
74
+
75
+ // With wrap = false, there should be no form group.
76
+ const input = container.childNodes[0];
77
+ expect(input.tagName).toEqual('INPUT');
78
+ expect(input.classList).toContain('govuk-input');
79
+ expect(input.id).toEqual(ID);
80
+ expect(input.value).toEqual(VALUE);
81
+ });
82
+ it('should render an html component appropriately', async () => {
83
+ const ID = 'component';
84
+ const COMPONENT = {
85
+ type: 'html',
86
+ tagName: 'p',
87
+ content: 'HTML content'
88
+ };
89
+ const {
90
+ container
91
+ } = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_FormComponent.default, {
92
+ "data-testid": ID,
93
+ component: COMPONENT
94
+ }));
95
+ const p = container.childNodes[0];
96
+ expect(p.tagName).toEqual('P');
97
+ expect(p.textContent).toEqual(COMPONENT.content);
98
+ });
99
+ it('should render an overridden html component appropriately', async () => {
100
+ const hooks = {
101
+ onGetComponent: (config, wrap) => /*#__PURE__*/_react.default.createElement("div", null, "".concat(config.type, " | ").concat(config.tagName, " | ").concat(config.content, " | ").concat(wrap))
102
+ };
103
+ const ID = 'component';
104
+ const COMPONENT = {
105
+ type: 'html',
106
+ tagName: 'p',
107
+ content: 'HTML content'
108
+ };
109
+ const {
110
+ container
111
+ } = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_FormComponent.default, {
112
+ "data-testid": ID,
113
+ component: COMPONENT
114
+ }), {
115
+ hooks
116
+ });
117
+ const div = container.childNodes[0];
118
+ expect(div.tagName).toEqual('DIV');
119
+ expect(div.textContent).toEqual("".concat(COMPONENT.type, " | ").concat(COMPONENT.tagName, " | ").concat(COMPONENT.content, " | true"));
120
+ });
121
+ it('should render an overridden html component appropriately and pass through onAction', async () => {
122
+ const hooks = {
123
+ onGetComponent: (config, wrap) => /*#__PURE__*/_react.default.createElement("div", null, "".concat(config.type, " | ").concat(config.tagName, " | ").concat(config.content, " | ").concat(wrap, " | ").concat(config.onAction))
124
+ };
125
+ const ID = 'component';
126
+ const COMPONENT = {
127
+ type: 'html',
128
+ tagName: 'p',
129
+ content: 'HTML content'
130
+ };
131
+ const {
132
+ container
133
+ } = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_FormComponent.default, {
134
+ "data-testid": ID,
135
+ component: COMPONENT,
136
+ onAction: "() => {}"
137
+ }), {
138
+ hooks
139
+ });
140
+ const div = container.childNodes[0];
141
+ expect(div.tagName).toEqual('DIV');
142
+ expect(div.textContent).toEqual("".concat(COMPONENT.type, " | ").concat(COMPONENT.tagName, " | ").concat(COMPONENT.content, " | true | () => {}"));
143
+ });
144
+ it('should render the correct html component when the override returns null', async () => {
145
+ const hooks = {
146
+ onGetComponent: () => null
147
+ };
148
+ const ID = 'component';
149
+ const COMPONENT = {
150
+ type: 'html',
151
+ tagName: 'p',
152
+ content: 'HTML content'
153
+ };
154
+ const {
155
+ container
156
+ } = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_FormComponent.default, {
157
+ "data-testid": ID,
158
+ component: COMPONENT
159
+ }), {
160
+ hooks
161
+ });
162
+ const p = container.childNodes[0];
163
+ expect(p.tagName).toEqual('P');
164
+ expect(p.textContent).toEqual(COMPONENT.content);
165
+ });
166
+ it('should render a text component appropriately with interpolated label', async () => {
167
+ const ID = 'component';
168
+ const VALUE = 'Text value';
169
+ // eslint-disable-next-line no-template-curly-in-string
170
+ const COMPONENT = {
171
+ id: ID,
172
+ fieldId: ID,
173
+ type: 'text',
174
+ label: '${text} Text component',
175
+ cya_label: '${text} Text component',
176
+ hint: 'Text hint'
177
+ };
178
+ const DATA = {
179
+ text: 'Interpolated'
180
+ };
181
+ const ON_CHANGE = () => {};
182
+ const {
183
+ container
184
+ } = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_FormComponent.default, {
185
+ "data-testid": ID,
186
+ component: COMPONENT,
187
+ value: VALUE,
188
+ onChange: ON_CHANGE,
189
+ formData: DATA
190
+ }));
191
+
192
+ // text components are wrapper in a FormGroup by default.
193
+ const formGroup = container.childNodes[0];
194
+ expect(formGroup.tagName).toEqual('DIV');
195
+ expect(formGroup.classList).toContain('govuk-form-group');
196
+ const label = formGroup.childNodes[0];
197
+ expect(label.tagName).toEqual('LABEL');
198
+ expect(label.classList).toContain('govuk-label');
199
+ expect(label.textContent).toEqual('Interpolated Text component (optional)');
200
+ expect(label.getAttribute('for')).toEqual(ID);
201
+ const hint = formGroup.childNodes[1];
202
+ expect(hint.tagName).toEqual('DIV');
203
+ expect(hint.classList).toContain('govuk-hint');
204
+ expect(hint.textContent).toEqual(COMPONENT.hint);
205
+ const input = formGroup.childNodes[2];
206
+ expect(input.tagName).toEqual('INPUT');
207
+ expect(input.classList).toContain('govuk-input');
208
+ expect(input.id).toEqual(ID);
209
+ expect(input.value).toEqual(VALUE);
210
+ });
211
+ it('should correctly handle a component\'s default value when it has no existing value', async () => {
212
+ const ID = 'component';
213
+ const COMPONENT = {
214
+ id: ID,
215
+ fieldId: ID,
216
+ type: 'text',
217
+ label: 'Text component',
218
+ defaultValue: 'default text'
219
+ };
220
+ const DATA = {};
221
+ const ON_CHANGE_ARGS = [];
222
+ let ON_CHANGE_COUNT = 0;
223
+ const ON_CHANGE = _ref => {
224
+ let {
225
+ target
226
+ } = _ref;
227
+ ON_CHANGE_ARGS.push(target);
228
+ ON_CHANGE_COUNT += 1;
229
+ DATA[target.name] = target.value;
230
+ };
231
+ const {
232
+ container,
233
+ rerender
234
+ } = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_FormComponent.default, {
235
+ "data-testid": ID,
236
+ component: COMPONENT,
237
+ value: DATA[ID],
238
+ onChange: ON_CHANGE,
239
+ formData: DATA
240
+ }));
241
+ expect(ON_CHANGE_COUNT).toEqual(1);
242
+ expect(ON_CHANGE_ARGS[0]).toMatchObject({
243
+ name: 'component',
244
+ value: COMPONENT.defaultValue
245
+ });
246
+ const formGroup = container.childNodes[0];
247
+ const input = formGroup.childNodes[2];
248
+ (0, _setupTests.rerenderWithValidation)(rerender, /*#__PURE__*/_react.default.createElement(_FormComponent.default, {
249
+ "data-testid": ID,
250
+ component: COMPONENT,
251
+ value: DATA[ID],
252
+ onChange: ON_CHANGE,
253
+ formData: DATA
254
+ }));
255
+ // Input should only be updated once the changes caused
256
+ // by onChange have had another render to propagate down.
257
+ expect(input.value).toEqual(COMPONENT.defaultValue);
258
+ });
259
+ it('should correctly handle a component\'s default value when it has an existing value', async () => {
260
+ const ID = 'component';
261
+ const COMPONENT = {
262
+ id: ID,
263
+ fieldId: ID,
264
+ type: 'text',
265
+ label: 'Text component',
266
+ defaultValue: 'default text'
267
+ };
268
+ const DATA = {
269
+ component: 'existing value'
270
+ };
271
+ const ON_CHANGE_ARGS = [];
272
+ let ON_CHANGE_COUNT = 0;
273
+ const ON_CHANGE = _ref2 => {
274
+ let {
275
+ target
276
+ } = _ref2;
277
+ ON_CHANGE_ARGS.push(target);
278
+ ON_CHANGE_COUNT += 1;
279
+ };
280
+ const {
281
+ container
282
+ } = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_FormComponent.default, {
283
+ "data-testid": ID,
284
+ component: COMPONENT,
285
+ value: DATA[ID],
286
+ onChange: ON_CHANGE,
287
+ formData: DATA
288
+ }));
289
+ expect(ON_CHANGE_COUNT).toEqual(0);
290
+ const formGroup = container.childNodes[0];
291
+ const input = formGroup.childNodes[2];
292
+ expect(input.value).toEqual(DATA[ID]);
293
+ });
294
+ it('should correctly handle a nested file input on change event within a nested container', async () => {
295
+ const ID = 'component';
296
+ const NESTED_CONTAINER_ID = 'nested-container-component';
297
+ const NESTED_ID = 'nested-component';
298
+ const COMPONENT = {
299
+ id: ID,
300
+ fieldId: ID,
301
+ type: _models.ComponentTypes.CHECKBOXES,
302
+ label: 'Checkboxes component',
303
+ data: {
304
+ options: [{
305
+ value: 'EPSILON',
306
+ label: 'Epsilon Label'
307
+ }, {
308
+ value: 'GAMMA',
309
+ label: 'Gamma Label',
310
+ nested: [{
311
+ id: NESTED_CONTAINER_ID,
312
+ fieldId: NESTED_CONTAINER_ID,
313
+ type: _models.ComponentTypes.CONTAINER,
314
+ components: [{
315
+ id: NESTED_ID,
316
+ fieldId: NESTED_ID,
317
+ label: 'File upload',
318
+ type: _models.ComponentTypes.FILE
319
+ }]
320
+ }]
321
+ }]
422
322
  }
423
- }, _callee10);
424
- })));
323
+ };
324
+ const DATA = {
325
+ component: 'GAMMA'
326
+ };
327
+ const ON_CHANGE_ARGS = [];
328
+ let ON_CHANGE_COUNT = 0;
329
+ const ON_CHANGE = _ref3 => {
330
+ let {
331
+ target
332
+ } = _ref3;
333
+ ON_CHANGE_ARGS.push(target);
334
+ ON_CHANGE_COUNT += 1;
335
+ };
336
+ const {
337
+ container
338
+ } = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_FormComponent.default, {
339
+ "data-testid": ID,
340
+ component: COMPONENT,
341
+ value: DATA[ID],
342
+ onChange: ON_CHANGE,
343
+ formData: DATA
344
+ }));
345
+
346
+ // Get hold of the file input.
347
+ const c = container.childNodes[0];
348
+ const formGroup = c.childNodes[0];
349
+ const fieldSet = formGroup.childNodes[2];
350
+ const input = fieldSet.childNodes[2].childNodes[0].childNodes[0].childNodes[2].childNodes[0];
351
+ const FILE_EXTENSION = 'json';
352
+ const FILE_NAME = "test.".concat(FILE_EXTENSION);
353
+ const FILE_TYPE = 'application/JSON';
354
+ const str = JSON.stringify({
355
+ alpha: 'bravo'
356
+ });
357
+ const blob = new Blob([str]);
358
+ const FILE = new File([blob], FILE_NAME, {
359
+ type: FILE_TYPE
360
+ });
361
+ _userEvent.default.upload(input, FILE);
362
+ expect(ON_CHANGE_COUNT).toEqual(3);
363
+ });
425
364
  });
426
365
  });