@ukhomeoffice/cop-react-form-renderer 6.7.0-alpha → 6.11.1

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 (372) hide show
  1. package/dist/components/CheckYourAnswers/Answer.js +22 -16
  2. package/dist/components/CheckYourAnswers/Answer.test.js +180 -92
  3. package/dist/components/CheckYourAnswers/CheckYourAnswers.js +137 -103
  4. package/dist/components/CheckYourAnswers/CheckYourAnswers.test.js +861 -463
  5. package/dist/components/CollectionPage/CollectionPage.js +63 -73
  6. package/dist/components/CollectionPage/CollectionPage.test.js +366 -316
  7. package/dist/components/CollectionSummary/BannerStrip.js +13 -13
  8. package/dist/components/CollectionSummary/BannerStrip.test.js +76 -80
  9. package/dist/components/CollectionSummary/CollectionSummary.js +126 -99
  10. package/dist/components/CollectionSummary/CollectionSummary.test.js +188 -152
  11. package/dist/components/CollectionSummary/Confirmation.js +12 -14
  12. package/dist/components/CollectionSummary/Confirmation.test.js +63 -68
  13. package/dist/components/CollectionSummary/RenderListView.js +52 -46
  14. package/dist/components/CollectionSummary/RenderListView.scss +1 -1
  15. package/dist/components/CollectionSummary/RenderListView.test.js +77 -78
  16. package/dist/components/CollectionSummary/SummaryCard.js +152 -110
  17. package/dist/components/CollectionSummary/SummaryCard.test.js +1018 -929
  18. package/dist/components/CollectionSummary/SummaryCardDetails.js +137 -94
  19. package/dist/components/CollectionSummary/SummaryCardDetails.scss +13 -4
  20. package/dist/components/CollectionSummary/SummaryCardDetails.test.js +331 -128
  21. package/dist/components/CollectionSummary/SummaryCardValidationContext.js +35 -30
  22. package/dist/components/CollectionSummary/SummaryCardValidationContext.test.js +74 -62
  23. package/dist/components/FormComponent/Collection.js +108 -74
  24. package/dist/components/FormComponent/Collection.test.js +1081 -909
  25. package/dist/components/FormComponent/Container.js +39 -40
  26. package/dist/components/FormComponent/Container.test.js +412 -312
  27. package/dist/components/FormComponent/FormComponent.js +72 -69
  28. package/dist/components/FormComponent/FormComponent.test.js +414 -353
  29. package/dist/components/FormComponent/helpers/addLabel.js +7 -4
  30. package/dist/components/FormComponent/helpers/getComponentDisabled.js +1 -1
  31. package/dist/components/FormComponent/helpers/getComponentDisabled.test.js +7 -7
  32. package/dist/components/FormComponent/helpers/getComponentError.js +5 -3
  33. package/dist/components/FormComponent/helpers/getComponentError.test.js +14 -14
  34. package/dist/components/FormComponent/helpers/getComponentFieldSet.js +4 -3
  35. package/dist/components/FormComponent/helpers/getComponentFieldSet.test.js +6 -6
  36. package/dist/components/FormComponent/helpers/index.js +4 -4
  37. package/dist/components/FormPage/FormPage.js +80 -65
  38. package/dist/components/FormPage/FormPage.test.js +163 -127
  39. package/dist/components/FormRenderer/FormRenderer.js +180 -143
  40. package/dist/components/FormRenderer/FormRenderer.test.js +1115 -730
  41. package/dist/components/FormRenderer/handlers/cyaAction.js +2 -2
  42. package/dist/components/FormRenderer/handlers/getPageId.js +3 -1
  43. package/dist/components/FormRenderer/handlers/getPageId.test.js +14 -14
  44. package/dist/components/FormRenderer/handlers/handlers.test.js +32 -32
  45. package/dist/components/FormRenderer/handlers/index.js +1 -1
  46. package/dist/components/FormRenderer/handlers/navigate.js +3 -3
  47. package/dist/components/FormRenderer/handlers/submissionError.js +1 -1
  48. package/dist/components/FormRenderer/helpers/canActionProceed.js +1 -1
  49. package/dist/components/FormRenderer/helpers/canActionProceed.test.js +15 -15
  50. package/dist/components/FormRenderer/helpers/canCYASubmit.js +3 -1
  51. package/dist/components/FormRenderer/helpers/canCYASubmit.test.js +20 -16
  52. package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.js +22 -17
  53. package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.test.js +16 -16
  54. package/dist/components/FormRenderer/helpers/getCYA.js +5 -3
  55. package/dist/components/FormRenderer/helpers/getCYA.test.js +11 -11
  56. package/dist/components/FormRenderer/helpers/getFormState.js +7 -5
  57. package/dist/components/FormRenderer/helpers/getFormState.test.js +10 -10
  58. package/dist/components/FormRenderer/helpers/getNextPageId.js +24 -13
  59. package/dist/components/FormRenderer/helpers/getNextPageId.test.js +67 -67
  60. package/dist/components/FormRenderer/helpers/getPage.js +4 -2
  61. package/dist/components/FormRenderer/helpers/getPage.test.js +11 -11
  62. package/dist/components/FormRenderer/helpers/getRelevantPages.js +9 -7
  63. package/dist/components/FormRenderer/helpers/getRelevantPages.test.js +14 -14
  64. package/dist/components/FormRenderer/helpers/getSubmissionStatus.js +5 -5
  65. package/dist/components/FormRenderer/helpers/getSubmissionStatus.test.js +97 -103
  66. package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.js +60 -62
  67. package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.test.js +78 -71
  68. package/dist/components/FormRenderer/helpers/index.js +1 -1
  69. package/dist/components/FormRenderer/onCYAAction.js +51 -59
  70. package/dist/components/FormRenderer/onCYAAction.test.js +152 -164
  71. package/dist/components/FormRenderer/onPageAction.js +39 -43
  72. package/dist/components/FormRenderer/onPageAction.test.js +208 -223
  73. package/dist/components/FormRenderer/onTaskAction.js +13 -9
  74. package/dist/components/FormRenderer/onTaskAction.test.js +88 -93
  75. package/dist/components/PageActions/ActionButton.js +15 -12
  76. package/dist/components/PageActions/ActionButton.test.js +78 -56
  77. package/dist/components/PageActions/PageActions.js +10 -10
  78. package/dist/components/PageActions/PageActions.test.js +115 -86
  79. package/dist/components/SummaryList/GroupAction.js +17 -9
  80. package/dist/components/SummaryList/GroupAction.test.js +33 -37
  81. package/dist/components/SummaryList/RowAction.js +16 -11
  82. package/dist/components/SummaryList/RowAction.test.js +33 -37
  83. package/dist/components/SummaryList/SummaryList.js +34 -21
  84. package/dist/components/SummaryList/SummaryList.scss +15 -0
  85. package/dist/components/SummaryList/SummaryList.test.js +226 -143
  86. package/dist/components/SummaryList/SummaryListHeadingRow.js +4 -6
  87. package/dist/components/SummaryList/SummaryListHeadingRowWithAction.js +53 -0
  88. package/dist/components/SummaryList/SummaryListHeadingRowWithAction.scss +38 -0
  89. package/dist/components/SummaryList/SummaryListRow.js +4 -6
  90. package/dist/components/SummaryList/SummaryListTitleRow.js +3 -5
  91. package/dist/components/SummaryList/helpers/getGroupActionAttributes.js +5 -3
  92. package/dist/components/SummaryList/helpers/getGroupActionAttributes.test.js +22 -22
  93. package/dist/components/SummaryList/helpers/getRowActionAttributes.js +5 -3
  94. package/dist/components/SummaryList/helpers/getRowActionAttributes.test.js +22 -22
  95. package/dist/components/SummaryList/helpers/index.js +1 -1
  96. package/dist/components/TaskList/Task.js +29 -19
  97. package/dist/components/TaskList/Task.test.js +76 -83
  98. package/dist/components/TaskList/TaskList.js +92 -49
  99. package/dist/components/TaskList/TaskList.scss +24 -0
  100. package/dist/components/TaskList/TaskList.test.js +255 -113
  101. package/dist/components/TaskList/TaskState.js +5 -7
  102. package/dist/components/TaskList/TaskState.test.js +45 -52
  103. package/dist/components/index.js +7 -7
  104. package/dist/context/HooksContext/HooksContext.js +80 -57
  105. package/dist/context/HooksContext/HooksContext.test.js +35 -26
  106. package/dist/context/HooksContext/index.js +4 -3
  107. package/dist/context/ValidationContext/ValidationContext.js +94 -43
  108. package/dist/context/ValidationContext/ValidationContext.test.js +68 -56
  109. package/dist/context/ValidationContext/index.js +4 -3
  110. package/dist/context/index.js +2 -2
  111. package/dist/hooks/index.js +10 -9
  112. package/dist/hooks/useAxios.js +40 -14
  113. package/dist/hooks/useGetRequest.js +97 -61
  114. package/dist/hooks/useHooks.js +3 -1
  115. package/dist/hooks/useRefData.js +39 -26
  116. package/dist/hooks/useValidation.js +3 -1
  117. package/dist/index.js +14 -13
  118. package/dist/models/CollectionLabels.js +1 -1
  119. package/dist/models/ComponentTypes.js +25 -25
  120. package/dist/models/EventTypes.js +4 -4
  121. package/dist/models/FormPages.js +4 -4
  122. package/dist/models/FormTypes.js +8 -8
  123. package/dist/models/HubFormats.js +3 -3
  124. package/dist/models/PageAction.js +38 -44
  125. package/dist/models/TaskStates.js +28 -29
  126. package/dist/models/index.js +9 -9
  127. package/dist/setupTests.js +31 -30
  128. package/dist/utils/CheckYourAnswers/getCYAAction.js +5 -5
  129. package/dist/utils/CheckYourAnswers/getCYAAction.test.js +54 -52
  130. package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.js +25 -15
  131. package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.test.js +35 -33
  132. package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.js +31 -17
  133. package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.test.js +44 -42
  134. package/dist/utils/CheckYourAnswers/getCYARow.js +6 -6
  135. package/dist/utils/CheckYourAnswers/getCYARow.test.js +86 -86
  136. package/dist/utils/CheckYourAnswers/getCYARowForGroup.js +24 -18
  137. package/dist/utils/CheckYourAnswers/getCYARowForGroup.test.js +16 -15
  138. package/dist/utils/CheckYourAnswers/getCYARowsForCollection.js +36 -33
  139. package/dist/utils/CheckYourAnswers/getCYARowsForCollection.test.js +61 -58
  140. package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.js +108 -87
  141. package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.test.js +281 -162
  142. package/dist/utils/CheckYourAnswers/getCYARowsForContainer.js +20 -25
  143. package/dist/utils/CheckYourAnswers/getCYARowsForContainer.test.js +97 -103
  144. package/dist/utils/CheckYourAnswers/getCYARowsForPage.js +18 -13
  145. package/dist/utils/CheckYourAnswers/getCYARowsForPage.test.js +76 -70
  146. package/dist/utils/CheckYourAnswers/getSummaryListRowForDetails.js +42 -0
  147. package/dist/utils/CheckYourAnswers/getSummaryListRowForDetails.test.js +56 -0
  148. package/dist/utils/CheckYourAnswers/index.js +1 -1
  149. package/dist/utils/CheckYourAnswers/showComponentCYA.js +4 -4
  150. package/dist/utils/CheckYourAnswers/showComponentCYA.test.js +25 -25
  151. package/dist/utils/CollectionPage/addCollectionPageEntry.js +2 -2
  152. package/dist/utils/CollectionPage/addCollectionPageEntry.test.js +5 -5
  153. package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.js +2 -2
  154. package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.test.js +18 -17
  155. package/dist/utils/CollectionPage/duplicateCollectionPageEntry.js +22 -12
  156. package/dist/utils/CollectionPage/duplicateCollectionPageEntry.test.js +38 -47
  157. package/dist/utils/CollectionPage/getCollectionPageActiveId.js +2 -2
  158. package/dist/utils/CollectionPage/getCollectionPageActiveId.test.js +10 -10
  159. package/dist/utils/CollectionPage/getCollectionPageActiveIndex.js +11 -7
  160. package/dist/utils/CollectionPage/getCollectionPageActiveIndex.test.js +22 -22
  161. package/dist/utils/CollectionPage/getCollectionPageData.js +12 -8
  162. package/dist/utils/CollectionPage/getCollectionPageData.test.js +19 -19
  163. package/dist/utils/CollectionPage/getErrorsForCollection.js +24 -24
  164. package/dist/utils/CollectionPage/getErrorsForCollection.test.js +22 -20
  165. package/dist/utils/CollectionPage/getQuickEditPage.js +31 -35
  166. package/dist/utils/CollectionPage/getQuickEditPage.test.js +27 -15
  167. package/dist/utils/CollectionPage/index.js +1 -1
  168. package/dist/utils/CollectionPage/mergeCollectionPages.js +43 -31
  169. package/dist/utils/CollectionPage/mergeCollectionPages.test.js +26 -26
  170. package/dist/utils/CollectionPage/removeCollectionPageEntry.js +6 -4
  171. package/dist/utils/CollectionPage/removeCollectionPageEntry.test.js +10 -10
  172. package/dist/utils/CollectionPage/setCollectionPageData.js +16 -10
  173. package/dist/utils/CollectionPage/setCollectionPageData.test.js +24 -24
  174. package/dist/utils/Component/addShowWhen.js +8 -4
  175. package/dist/utils/Component/addShowWhen.test.js +37 -37
  176. package/dist/utils/Component/applyToComponentTree.js +18 -18
  177. package/dist/utils/Component/applyToComponentTree.test.js +32 -27
  178. package/dist/utils/Component/cleanAttributes.js +13 -10
  179. package/dist/utils/Component/cleanAttributes.test.js +18 -17
  180. package/dist/utils/Component/elevateNestedComponents.js +7 -6
  181. package/dist/utils/Component/elevateNestedComponents.test.js +68 -30
  182. package/dist/utils/Component/getComponent.js +94 -88
  183. package/dist/utils/Component/getComponentTests/getComponent.autocomplete.test.js +17 -18
  184. package/dist/utils/Component/getComponentTests/getComponent.calculation.test.js +59 -46
  185. package/dist/utils/Component/getComponentTests/getComponent.checkboxes.test.js +48 -39
  186. package/dist/utils/Component/getComponentTests/getComponent.date.test.js +33 -23
  187. package/dist/utils/Component/getComponentTests/getComponent.details.test.js +18 -20
  188. package/dist/utils/Component/getComponentTests/getComponent.email.test.js +22 -17
  189. package/dist/utils/Component/getComponentTests/getComponent.file.test.js +25 -20
  190. package/dist/utils/Component/getComponentTests/getComponent.heading.test.js +9 -10
  191. package/dist/utils/Component/getComponentTests/getComponent.html.test.js +15 -17
  192. package/dist/utils/Component/getComponentTests/getComponent.insetText.test.js +8 -9
  193. package/dist/utils/Component/getComponentTests/getComponent.list.test.js +15 -17
  194. package/dist/utils/Component/getComponentTests/getComponent.multifile.test.js +26 -22
  195. package/dist/utils/Component/getComponentTests/getComponent.nested.test.js +175 -155
  196. package/dist/utils/Component/getComponentTests/getComponent.paragraph.test.js +15 -17
  197. package/dist/utils/Component/getComponentTests/getComponent.phoneNumber.test.js +22 -17
  198. package/dist/utils/Component/getComponentTests/getComponent.radios.test.js +72 -57
  199. package/dist/utils/Component/getComponentTests/getComponent.select.test.js +22 -17
  200. package/dist/utils/Component/getComponentTests/getComponent.text.test.js +22 -17
  201. package/dist/utils/Component/getComponentTests/getComponent.textArea.test.js +38 -31
  202. package/dist/utils/Component/getComponentTests/getComponent.time.test.js +29 -20
  203. package/dist/utils/Component/getComponentTests/getComponent.unknown.test.js +2 -2
  204. package/dist/utils/Component/getComponentTests/getComponent.warningText.test.js +8 -9
  205. package/dist/utils/Component/getDefaultValue.js +8 -6
  206. package/dist/utils/Component/getDefaultValue.test.js +12 -12
  207. package/dist/utils/Component/getDefaultValueFromConfig.js +21 -22
  208. package/dist/utils/Component/getDefaultValueFromConfig.test.js +31 -31
  209. package/dist/utils/Component/index.js +1 -1
  210. package/dist/utils/Component/isEditable.js +4 -2
  211. package/dist/utils/Component/isEditable.test.js +15 -14
  212. package/dist/utils/Component/optionIsSelected.js +6 -1
  213. package/dist/utils/Component/optionIsSelected.test.js +35 -9
  214. package/dist/utils/Component/setupContainerComponentsPath.js +29 -27
  215. package/dist/utils/Component/setupContainerComponentsPath.test.js +11 -11
  216. package/dist/utils/Component/showComponent.js +1 -1
  217. package/dist/utils/Component/showComponent.test.js +28 -28
  218. package/dist/utils/Component/wrapInFormGroup.js +2 -2
  219. package/dist/utils/Condition/index.js +1 -1
  220. package/dist/utils/Condition/meetsAllConditions.js +8 -8
  221. package/dist/utils/Condition/meetsAllConditions.test.js +20 -20
  222. package/dist/utils/Condition/meetsCondition.js +25 -16
  223. package/dist/utils/Condition/meetsCondition.test.js +402 -402
  224. package/dist/utils/Condition/meetsOneCondition.js +5 -5
  225. package/dist/utils/Condition/meetsOneCondition.test.js +16 -16
  226. package/dist/utils/Condition/setupConditions.js +18 -13
  227. package/dist/utils/Condition/setupConditions.test.js +7 -7
  228. package/dist/utils/Container/getEditableComponents.js +5 -3
  229. package/dist/utils/Container/getEditableComponents.test.js +45 -43
  230. package/dist/utils/Container/index.js +1 -1
  231. package/dist/utils/Container/setupNesting.js +20 -16
  232. package/dist/utils/Container/setupNesting.test.js +30 -27
  233. package/dist/utils/Container/showContainer.js +7 -3
  234. package/dist/utils/Container/showContainer.test.js +30 -30
  235. package/dist/utils/Data/applyFormula.js +48 -38
  236. package/dist/utils/Data/applyFormula.test.js +20 -20
  237. package/dist/utils/Data/getAutocompleteSource.js +26 -18
  238. package/dist/utils/Data/getAutocompleteSource.test.js +86 -80
  239. package/dist/utils/Data/getDataPath.js +28 -18
  240. package/dist/utils/Data/getDataPath.test.js +12 -12
  241. package/dist/utils/Data/getOptions.js +30 -24
  242. package/dist/utils/Data/getOptions.test.js +27 -27
  243. package/dist/utils/Data/getSourceData.js +19 -6
  244. package/dist/utils/Data/getSourceData.test.js +80 -84
  245. package/dist/utils/Data/index.js +1 -1
  246. package/dist/utils/Data/nestInRefdataOptions.js +16 -9
  247. package/dist/utils/Data/nestInRefdataOptions.test.js +16 -16
  248. package/dist/utils/Data/refDataToOptions.js +13 -10
  249. package/dist/utils/Data/refDataToOptions.test.js +19 -19
  250. package/dist/utils/Data/setDataItem.js +8 -7
  251. package/dist/utils/Data/setDataItem.test.js +37 -37
  252. package/dist/utils/Data/setupFormData.js +21 -13
  253. package/dist/utils/Data/setupFormData.test.js +50 -51
  254. package/dist/utils/Data/setupRefDataUrlForComponent.js +26 -20
  255. package/dist/utils/Data/setupRefDataUrlForComponent.test.js +24 -24
  256. package/dist/utils/FormPage/applyConditionalProperties.js +9 -5
  257. package/dist/utils/FormPage/applyConditionalProperties.test.js +18 -15
  258. package/dist/utils/FormPage/getConditionalText.js +3 -3
  259. package/dist/utils/FormPage/getConditionalText.test.js +29 -29
  260. package/dist/utils/FormPage/getFormPage.js +16 -15
  261. package/dist/utils/FormPage/getFormPage.test.js +46 -47
  262. package/dist/utils/FormPage/getFormPages.js +12 -7
  263. package/dist/utils/FormPage/getFormPages.test.js +23 -20
  264. package/dist/utils/FormPage/getPageActions.js +15 -9
  265. package/dist/utils/FormPage/getPageActions.test.js +32 -32
  266. package/dist/utils/FormPage/getParagraphFromText.js +7 -5
  267. package/dist/utils/FormPage/getParagraphFromText.test.js +6 -6
  268. package/dist/utils/FormPage/index.js +4 -2
  269. package/dist/utils/FormPage/showFormPage.js +7 -3
  270. package/dist/utils/FormPage/showFormPage.test.js +32 -32
  271. package/dist/utils/FormPage/showFormPageCYA.js +1 -1
  272. package/dist/utils/FormPage/showFormPageCYA.test.js +8 -8
  273. package/dist/utils/FormPage/useComponent.js +28 -21
  274. package/dist/utils/FormPage/useComponent.test.js +79 -77
  275. package/dist/utils/Format/formatData.js +1 -1
  276. package/dist/utils/Format/formatData.test.js +18 -18
  277. package/dist/utils/Format/formatDataForComponent.js +6 -5
  278. package/dist/utils/Format/formatDataForComponent.test.js +78 -50
  279. package/dist/utils/Format/formatDataForForm.js +8 -6
  280. package/dist/utils/Format/formatDataForForm.test.js +16 -13
  281. package/dist/utils/Format/formatDataForPage.js +5 -4
  282. package/dist/utils/Format/formatDataForPage.test.js +25 -20
  283. package/dist/utils/Format/index.js +1 -1
  284. package/dist/utils/Hub/getFormHub.js +1 -1
  285. package/dist/utils/Hub/getFormHub.test.js +31 -28
  286. package/dist/utils/Hub/index.js +1 -1
  287. package/dist/utils/Meta/constants.js +2 -2
  288. package/dist/utils/Meta/documents/getDocuments.js +1 -1
  289. package/dist/utils/Meta/documents/getDocuments.test.js +16 -24
  290. package/dist/utils/Meta/documents/index.js +1 -1
  291. package/dist/utils/Meta/documents/setDocumentsForField.js +16 -14
  292. package/dist/utils/Meta/documents/setDocumentsForField.test.js +34 -68
  293. package/dist/utils/Meta/index.js +1 -1
  294. package/dist/utils/Operate/checkValueIsTruthy.js +2 -2
  295. package/dist/utils/Operate/checkValueIsTruthy.test.js +16 -16
  296. package/dist/utils/Operate/getFirstOf.js +5 -5
  297. package/dist/utils/Operate/getFirstOf.test.js +31 -31
  298. package/dist/utils/Operate/getIndexOfMatchingValueIn.js +10 -10
  299. package/dist/utils/Operate/getIndexOfMatchingValueIn.test.js +52 -46
  300. package/dist/utils/Operate/getLength.js +50 -0
  301. package/dist/utils/Operate/getLength.test.js +89 -0
  302. package/dist/utils/Operate/index.js +1 -1
  303. package/dist/utils/Operate/persistValueInFormData.js +3 -3
  304. package/dist/utils/Operate/persistValueInFormData.test.js +20 -22
  305. package/dist/utils/Operate/runPageOperations.js +9 -7
  306. package/dist/utils/Operate/runPageOperations.test.js +36 -35
  307. package/dist/utils/Operate/setValueInFormData.js +2 -2
  308. package/dist/utils/Operate/setValueInFormData.test.js +16 -16
  309. package/dist/utils/Operate/shouldRun.js +6 -6
  310. package/dist/utils/Operate/shouldRun.test.js +27 -21
  311. package/dist/utils/Validate/additional/conditionallyRequired.js +4 -4
  312. package/dist/utils/Validate/additional/conditionallyRequired.test.js +18 -18
  313. package/dist/utils/Validate/additional/index.js +6 -6
  314. package/dist/utils/Validate/additional/index.test.js +12 -12
  315. package/dist/utils/Validate/additional/mustBeAfter.js +2 -2
  316. package/dist/utils/Validate/additional/mustBeAfter.test.js +40 -40
  317. package/dist/utils/Validate/additional/mustBeBefore.js +2 -2
  318. package/dist/utils/Validate/additional/mustBeBefore.test.js +28 -28
  319. package/dist/utils/Validate/additional/mustBeEarlierDateTime.js +11 -7
  320. package/dist/utils/Validate/additional/mustBeEarlierDateTime.test.js +41 -37
  321. package/dist/utils/Validate/additional/mustBeGreaterThan.js +2 -2
  322. package/dist/utils/Validate/additional/mustBeGreaterThan.test.js +18 -18
  323. package/dist/utils/Validate/additional/mustBeInTheFuture.js +2 -2
  324. package/dist/utils/Validate/additional/mustBeInTheFuture.test.js +12 -12
  325. package/dist/utils/Validate/additional/mustBeInThePast.js +3 -3
  326. package/dist/utils/Validate/additional/mustBeInThePast.test.js +12 -12
  327. package/dist/utils/Validate/additional/mustBeLessThan.js +2 -2
  328. package/dist/utils/Validate/additional/mustBeLessThan.test.js +17 -17
  329. package/dist/utils/Validate/additional/mustBeLongerThan.js +1 -1
  330. package/dist/utils/Validate/additional/mustBeLongerThan.test.js +16 -16
  331. package/dist/utils/Validate/additional/mustBeNumbersOnly.js +2 -2
  332. package/dist/utils/Validate/additional/mustBeNumbersOnly.test.js +20 -20
  333. package/dist/utils/Validate/additional/mustBeShorterThan.js +1 -1
  334. package/dist/utils/Validate/additional/mustBeShorterThan.test.js +16 -16
  335. package/dist/utils/Validate/additional/mustBeUniqueInCollection.js +4 -4
  336. package/dist/utils/Validate/additional/mustBeUniqueInCollection.test.js +39 -35
  337. package/dist/utils/Validate/additional/mustEnterAtLeastOne.js +2 -2
  338. package/dist/utils/Validate/additional/mustEnterAtLeastOne.test.js +16 -14
  339. package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.js +1 -1
  340. package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.test.js +12 -12
  341. package/dist/utils/Validate/additional/mustNotContainSql.js +4 -3
  342. package/dist/utils/Validate/additional/mustNotContainSql.test.js +14 -14
  343. package/dist/utils/Validate/additional/mustSelectOnlyOne.js +2 -2
  344. package/dist/utils/Validate/additional/mustSelectOnlyOne.test.js +26 -28
  345. package/dist/utils/Validate/additional/utils.js +22 -9
  346. package/dist/utils/Validate/index.js +1 -1
  347. package/dist/utils/Validate/validateCollection.js +25 -19
  348. package/dist/utils/Validate/validateCollection.test.js +66 -74
  349. package/dist/utils/Validate/validateComponent.js +21 -18
  350. package/dist/utils/Validate/validateComponent.test.js +176 -166
  351. package/dist/utils/Validate/validateContainer.js +20 -15
  352. package/dist/utils/Validate/validateContainer.test.js +52 -58
  353. package/dist/utils/Validate/validateDate.js +21 -15
  354. package/dist/utils/Validate/validateDate.test.js +32 -31
  355. package/dist/utils/Validate/validateEmail.js +8 -6
  356. package/dist/utils/Validate/validateEmail.test.js +25 -25
  357. package/dist/utils/Validate/validateMultifile.js +7 -5
  358. package/dist/utils/Validate/validateMultifile.test.js +18 -17
  359. package/dist/utils/Validate/validatePage.js +22 -19
  360. package/dist/utils/Validate/validatePage.test.js +203 -215
  361. package/dist/utils/Validate/validateRegex.js +5 -3
  362. package/dist/utils/Validate/validateRegex.test.js +14 -14
  363. package/dist/utils/Validate/validateRequired.js +6 -4
  364. package/dist/utils/Validate/validateRequired.test.js +18 -18
  365. package/dist/utils/Validate/validateTextArea.js +6 -4
  366. package/dist/utils/Validate/validateTextArea.test.js +20 -20
  367. package/dist/utils/Validate/validateTime.js +26 -11
  368. package/dist/utils/Validate/validateTime.test.js +62 -16
  369. package/dist/utils/index.js +9 -7
  370. package/package.json +2 -2
  371. package/dist/utils/CheckYourAnswers/getComponentRowForCYA.js +0 -37
  372. package/dist/utils/CheckYourAnswers/getComponentRowForCYA.test.js +0 -41
@@ -1,365 +1,426 @@
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); }
3
4
  var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
4
5
  var _react = _interopRequireDefault(require("react"));
5
6
  var _setupTests = require("../../setupTests");
6
7
  var _FormComponent = _interopRequireDefault(require("./FormComponent"));
7
8
  var _models = require("../../models");
8
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
- // Global imports
10
-
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
11
13
  // Local imports
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
- }]
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();
322
57
  }
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
- });
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();
422
+ }
423
+ }, _callee10);
424
+ })));
364
425
  });
365
426
  });