@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,6 +1,5 @@
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 _react = require("@testing-library/react");
5
4
  var _axios = _interopRequireDefault(require("axios"));
6
5
  var _axiosMockAdapter = _interopRequireDefault(require("axios-mock-adapter"));
@@ -18,28 +17,14 @@ var _userProfileData = _interopRequireDefault(require("../../json/userProfile.da
18
17
  var _userProfile = _interopRequireDefault(require("../../json/userProfile.json"));
19
18
  var _taskList = _interopRequireDefault(require("../../json/taskList.json"));
20
19
  var _firstForm = _interopRequireDefault(require("../../json/firstForm.json"));
21
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
22
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
20
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
21
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
23
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
25
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
26
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
27
- function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
28
- function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
29
- 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; }
30
- function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
31
- 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); } }
32
- 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); }); }; }
33
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
34
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
35
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
36
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
37
- function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
38
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } // Global imports
23
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } // Global imports
39
24
  // Local imports
40
25
  // JSON
41
- var setDate = function setDate(element, date) {
42
- var items = element.children;
26
+ const setDate = (element, date) => {
27
+ const items = element.children;
43
28
  _react.fireEvent.change(items[0].childNodes[0].childNodes[1], {
44
29
  target: {
45
30
  name: 'date-day',
@@ -59,19 +44,15 @@ var setDate = function setDate(element, date) {
59
44
  }
60
45
  });
61
46
  };
62
- var sleep = function sleep(ms) {
63
- return new Promise(function (resolve) {
64
- setTimeout(resolve, ms);
65
- });
66
- };
67
- describe('components', function () {
68
- describe('FormRenderer', function () {
69
- var mockAxios = new _axiosMockAdapter.default(_axios.default);
70
- var container = null;
71
- var refDataUrl = function refDataUrl(suffix) {
72
- return "".concat(_userProfileData.default.urls.refData, "/").concat(suffix);
73
- };
74
- beforeEach(function () {
47
+ const sleep = ms => new Promise(resolve => {
48
+ setTimeout(resolve, ms);
49
+ });
50
+ describe('components', () => {
51
+ describe('FormRenderer', () => {
52
+ const mockAxios = new _axiosMockAdapter.default(_axios.default);
53
+ let container = null;
54
+ const refDataUrl = suffix => "".concat(_userProfileData.default.urls.refData, "/").concat(suffix);
55
+ beforeEach(() => {
75
56
  container = document.createElement('div');
76
57
  document.body.appendChild(container);
77
58
  mockAxios.reset();
@@ -79,1103 +60,737 @@ describe('components', function () {
79
60
  mockAxios.onGet(refDataUrl('grade')).reply(200, _grade.default);
80
61
  mockAxios.onGet(refDataUrl('team')).reply(200, _team.default);
81
62
  });
82
- afterEach(function () {
63
+ afterEach(() => {
83
64
  (0, _reactDom.unmountComponentAtNode)(container);
84
65
  container.remove();
85
66
  container = null;
86
67
  });
87
- var checkForm = function checkForm(formContainer) {
88
- var formWrapper = formContainer;
89
- var form = formWrapper.childNodes[0];
68
+ const checkForm = formContainer => {
69
+ const formWrapper = formContainer;
70
+ const form = formWrapper.childNodes[0];
90
71
  expect(form.tagName).toEqual('DIV');
91
72
  expect(form.classList).toContain(_FormRenderer.DEFAULT_CLASS);
92
73
  return form;
93
74
  };
94
- var getChangeLink = function getChangeLink(summaryList) {
95
- var _summaryList$childNod = _slicedToArray(summaryList.childNodes[0].childNodes[0].childNodes, 3),
96
- actions = _summaryList$childNod[2];
75
+ const getChangeLink = summaryList => {
76
+ const [,, actions] = summaryList.childNodes[0].childNodes[0].childNodes;
97
77
  return actions.childNodes[0];
98
78
  };
99
- var getContinueButton = function getContinueButton(page) {
100
- return page.childNodes[page.childNodes.length - 1].childNodes[0].childNodes[0];
101
- };
102
- var getCancelButton = function getCancelButton(page) {
103
- return page.childNodes[page.childNodes.length - 1].childNodes[1].childNodes[0];
104
- };
105
- it('should start on the hub page correctly and display the title', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
106
- var form, title, hub;
107
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
108
- while (1) switch (_context2.prev = _context2.next) {
109
- case 0:
110
- _context2.next = 2;
111
- return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
112
- return _regeneratorRuntime().wrap(function _callee$(_context) {
113
- while (1) switch (_context.prev = _context.next) {
114
- case 0:
115
- (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _userProfile.default, {
116
- data: _userProfileData.default
117
- })), container);
118
- case 1:
119
- case "end":
120
- return _context.stop();
121
- }
122
- }, _callee);
123
- })));
124
- case 2:
125
- form = checkForm(container);
126
- expect(form.childNodes.length).toEqual(2); // Title + Hub page (= CYA)
127
- title = form.childNodes[0];
128
- expect(title.tagName).toEqual('H1');
129
- expect(title.textContent).toEqual(_userProfile.default.title);
130
- hub = form.childNodes[1];
131
- expect(hub.tagName).toEqual('DIV');
132
- expect(hub.classList).toContain(_CheckYourAnswers.DEFAULT_CLASS);
133
- case 10:
134
- case "end":
135
- return _context2.stop();
136
- }
137
- }, _callee2);
138
- })));
139
- it('should fire the onFormLoad method passed in the hooks', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
140
- var onFormLoadCalled, ON_FORM_LOAD, HOOKS;
141
- return _regeneratorRuntime().wrap(function _callee4$(_context4) {
142
- while (1) switch (_context4.prev = _context4.next) {
143
- case 0:
144
- onFormLoadCalled = false;
145
- ON_FORM_LOAD = function ON_FORM_LOAD() {
146
- onFormLoadCalled = true;
147
- };
148
- HOOKS = {
149
- onFormLoad: ON_FORM_LOAD
150
- };
151
- _context4.next = 5;
152
- return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
153
- return _regeneratorRuntime().wrap(function _callee3$(_context3) {
154
- while (1) switch (_context3.prev = _context3.next) {
155
- case 0:
156
- (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _userProfile.default, {
157
- data: _userProfileData.default,
158
- hooks: HOOKS
159
- })), container);
160
- case 1:
161
- case "end":
162
- return _context3.stop();
163
- }
164
- }, _callee3);
165
- })));
166
- case 5:
167
- expect(onFormLoadCalled).toBeTruthy();
168
- case 6:
169
- case "end":
170
- return _context4.stop();
171
- }
172
- }, _callee4);
173
- })));
174
- it('should navigate to the first editable page', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6() {
175
- var ON_PAGE_CHANGE_CALLS, ON_PAGE_CHANGE, HOOKS, form, hub, _hub$childNodes, civilServantList, link, page, pageHeading;
176
- return _regeneratorRuntime().wrap(function _callee6$(_context6) {
177
- while (1) switch (_context6.prev = _context6.next) {
178
- case 0:
179
- ON_PAGE_CHANGE_CALLS = [];
180
- ON_PAGE_CHANGE = function ON_PAGE_CHANGE(pageId) {
181
- ON_PAGE_CHANGE_CALLS.push(pageId);
182
- };
183
- HOOKS = {
184
- onPageChange: ON_PAGE_CHANGE
185
- };
186
- _context6.next = 5;
187
- return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {
188
- return _regeneratorRuntime().wrap(function _callee5$(_context5) {
189
- while (1) switch (_context5.prev = _context5.next) {
190
- case 0:
191
- (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _userProfile.default, {
192
- data: _userProfileData.default,
193
- hooks: HOOKS
194
- })), container);
195
- case 1:
196
- case "end":
197
- return _context5.stop();
198
- }
199
- }, _callee5);
200
- })));
201
- case 5:
202
- form = checkForm(container);
203
- hub = form.childNodes[1]; // Hub = CYA
204
- _hub$childNodes = _slicedToArray(hub.childNodes, 3), civilServantList = _hub$childNodes[2];
205
- link = getChangeLink(civilServantList);
206
- expect(ON_PAGE_CHANGE_CALLS.length).toEqual(0);
207
- _react.fireEvent.click(link, {});
208
- expect(ON_PAGE_CHANGE_CALLS.length).toEqual(1);
209
- expect(ON_PAGE_CHANGE_CALLS[0]).toEqual(_userProfile.default.pages[1].id);
210
-
211
- // The form layout should have changed to the current page.
212
- expect(form.childNodes.length).toEqual(1); // Just the page.
213
- page = form.childNodes[0];
214
- pageHeading = page.childNodes[0];
215
- expect(pageHeading.tagName).toEqual('H1');
216
- expect(pageHeading.textContent).toEqual(_userProfile.default.pages[1].title);
217
- case 18:
218
- case "end":
219
- return _context6.stop();
220
- }
221
- }, _callee6);
222
- })));
223
- it('should handle a page submission', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8() {
224
- var ON_SUBMIT_CALLS, ON_SUBMIT, HOOKS, form, hub, _hub$childNodes2, civilServantList, link, page, continueButton, title;
225
- return _regeneratorRuntime().wrap(function _callee8$(_context8) {
226
- while (1) switch (_context8.prev = _context8.next) {
227
- case 0:
228
- ON_SUBMIT_CALLS = [];
229
- ON_SUBMIT = function ON_SUBMIT(type, payload, onSuccess, onError, fieldName, fieldValue) {
230
- ON_SUBMIT_CALLS.push({
231
- type: type,
232
- payload: payload,
233
- onSuccess: onSuccess,
234
- onError: onError,
235
- fieldName: fieldName,
236
- fieldValue: fieldValue
237
- });
238
- onSuccess();
239
- };
240
- HOOKS = {
241
- onSubmit: ON_SUBMIT
242
- };
243
- _context8.next = 5;
244
- return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7() {
245
- return _regeneratorRuntime().wrap(function _callee7$(_context7) {
246
- while (1) switch (_context7.prev = _context7.next) {
247
- case 0:
248
- (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _userProfile.default, {
249
- data: _userProfileData.default,
250
- hooks: HOOKS,
251
- type: _models.FormTypes.HUB
252
- })), container);
253
- case 1:
254
- case "end":
255
- return _context7.stop();
256
- }
257
- }, _callee7);
258
- })));
259
- case 5:
260
- form = checkForm(container); // Navigate to the "Are you a civil servant?" page.
261
- hub = form.childNodes[1]; // Hub = CYA
262
- _hub$childNodes2 = _slicedToArray(hub.childNodes, 3), civilServantList = _hub$childNodes2[2];
263
- link = getChangeLink(civilServantList);
264
- _react.fireEvent.click(link, {});
265
-
266
- // Should already be answered "Yes", but select "No, I'm a contractor" option to generate patch
267
- // and then click "Continue".
268
- _react.fireEvent.click(_react.screen.getByText("No, I'm a contractor"));
269
- page = form.childNodes[0];
270
- continueButton = getContinueButton(page);
271
- expect(ON_SUBMIT_CALLS.length).toEqual(0);
272
- _react.fireEvent.click(continueButton, {});
273
- expect(ON_SUBMIT_CALLS.length).toEqual(1);
274
- expect(ON_SUBMIT_CALLS[0].type).toEqual(_models.PageAction.TYPES.SUBMIT);
275
- expect(ON_SUBMIT_CALLS[0].payload.areYouACivilServant).toEqual('no-contractor');
276
- expect(ON_SUBMIT_CALLS[0].fieldName).toEqual('Are you a civil servant?');
277
- expect(ON_SUBMIT_CALLS[0].fieldValue).toEqual("No, I'm a contractor");
278
-
279
- // And we should be back on the hub.
280
- expect(form.childNodes.length).toEqual(2); // Title + Hub page (= CYA)
281
- title = form.childNodes[0];
282
- expect(title.tagName).toEqual('H1');
283
- expect(title.textContent).toEqual(_userProfile.default.title);
284
- case 24:
285
- case "end":
286
- return _context8.stop();
287
- }
288
- }, _callee8);
289
- })));
290
- it('should handle a page submission error', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee10() {
291
- var ON_SUBMIT_CALLS, ON_SUBMIT, HOOKS, form, hub, _hub$childNodes3, civilServantList, link, page, continueButton, pageHeading;
292
- return _regeneratorRuntime().wrap(function _callee10$(_context10) {
293
- while (1) switch (_context10.prev = _context10.next) {
294
- case 0:
295
- ON_SUBMIT_CALLS = [];
296
- ON_SUBMIT = function ON_SUBMIT(type, payload, onSuccess, onError) {
297
- ON_SUBMIT_CALLS.push({
298
- type: type,
299
- payload: payload,
300
- onSuccess: onSuccess,
301
- onError: onError
302
- });
303
- onError([{
304
- id: 'unknown',
305
- error: 'Something went wrong'
306
- }]);
307
- };
308
- HOOKS = {
309
- onSubmit: ON_SUBMIT,
310
- onAction: function onAction(formData, patch) {
311
- return {
312
- formData: formData,
313
- patch: patch
314
- };
315
- }
316
- };
317
- _context10.next = 5;
318
- return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee9() {
319
- return _regeneratorRuntime().wrap(function _callee9$(_context9) {
320
- while (1) switch (_context9.prev = _context9.next) {
321
- case 0:
322
- (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _userProfile.default, {
323
- data: _userProfileData.default,
324
- hooks: HOOKS
325
- })), container);
326
- case 1:
327
- case "end":
328
- return _context9.stop();
329
- }
330
- }, _callee9);
331
- })));
332
- case 5:
333
- form = checkForm(container); // Navigate to the "Are you a civil servant?" page.
334
- hub = form.childNodes[1]; // Hub = CYA
335
- _hub$childNodes3 = _slicedToArray(hub.childNodes, 3), civilServantList = _hub$childNodes3[2];
336
- link = getChangeLink(civilServantList);
337
- _react.fireEvent.click(link, {});
338
-
339
- // Should already be answered "Yes", so simply click "Continue".
340
- page = form.childNodes[0];
341
- continueButton = getContinueButton(page);
342
- expect(ON_SUBMIT_CALLS.length).toEqual(0);
343
- _react.fireEvent.click(continueButton, {});
344
- expect(ON_SUBMIT_CALLS.length).toEqual(1);
345
- expect(ON_SUBMIT_CALLS[0].type).toEqual(_models.PageAction.TYPES.SUBMIT);
346
- expect(ON_SUBMIT_CALLS[0].payload.areYouACivilServant).toEqual('yes');
347
-
348
- // And we should be kept on the same page.
349
- expect(form.childNodes.length).toEqual(1); // Just the page.
350
- pageHeading = form.childNodes[0].childNodes[1];
351
- expect(pageHeading.tagName).toEqual('H1');
352
- expect(pageHeading.textContent).toEqual(_userProfile.default.pages[1].title);
353
- case 21:
354
- case "end":
355
- return _context10.stop();
356
- }
357
- }, _callee10);
358
- })));
359
- it('should handle a page submission once regardless of how many times page action is clicked', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee12() {
360
- var ON_PAGE_CHANGE_CALLS, ON_PAGE_CHANGE, ON_SUBMIT_CALLS, ON_SUBMIT, HOOKS, _container$childNodes, continueButtonGroup, continueFormButton, innerDiv, firstNameInput, EVENT, submitButton;
361
- return _regeneratorRuntime().wrap(function _callee12$(_context12) {
362
- while (1) switch (_context12.prev = _context12.next) {
363
- case 0:
364
- ON_PAGE_CHANGE_CALLS = [];
365
- ON_PAGE_CHANGE = function ON_PAGE_CHANGE(pageId) {
366
- ON_PAGE_CHANGE_CALLS.push(pageId);
367
- };
368
- ON_SUBMIT_CALLS = [];
369
- ON_SUBMIT = /*#__PURE__*/function () {
370
- var _ref12 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee11(type, payload, onSuccess, onError, fieldName, fieldValue) {
371
- return _regeneratorRuntime().wrap(function _callee11$(_context11) {
372
- while (1) switch (_context11.prev = _context11.next) {
373
- case 0:
374
- ON_SUBMIT_CALLS.push({
375
- type: type,
376
- payload: payload,
377
- onSuccess: onSuccess,
378
- onError: onError,
379
- fieldName: fieldName,
380
- fieldValue: fieldValue
381
- });
382
-
383
- // mock a delay when submitting to the backend
384
- _context11.next = 3;
385
- return sleep(2000);
386
- case 3:
387
- onSuccess();
388
- case 4:
389
- case "end":
390
- return _context11.stop();
391
- }
392
- }, _callee11);
393
- }));
394
- return function ON_SUBMIT(_x, _x2, _x3, _x4, _x5, _x6) {
395
- return _ref12.apply(this, arguments);
396
- };
397
- }();
398
- HOOKS = {
399
- onSubmit: ON_SUBMIT,
400
- onPageChange: ON_PAGE_CHANGE
401
- };
402
- (0, _testUtils.act)(function () {
403
- (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _firstForm.default, {
404
- hooks: HOOKS,
405
- type: _models.FormTypes.CYA
406
- })), container);
407
- });
408
- _container$childNodes = _slicedToArray(container.childNodes[0].childNodes[0].childNodes, 6), continueButtonGroup = _container$childNodes[5]; // go to first question page
409
- continueFormButton = continueButtonGroup.childNodes[0];
410
- _react.fireEvent.click(continueFormButton);
411
- innerDiv = container.childNodes[0].childNodes[0]; // enter a value in the input field
412
- firstNameInput = innerDiv.childNodes[1].childNodes[2];
413
- EVENT = {
414
- target: {
415
- name: firstNameInput.id,
416
- value: 'abc'
417
- }
418
- };
419
- _react.fireEvent.change(firstNameInput, EVENT);
420
- submitButton = innerDiv.childNodes[2].childNodes[0]; // click on save and continue
421
- _react.fireEvent.click(submitButton);
422
-
423
- // click on save and continue again
424
- _react.fireEvent.click(submitButton);
425
-
426
- // click on save and continue a third time
427
- _react.fireEvent.click(submitButton);
428
-
429
- // only expect one submit call to be made
430
- expect(ON_SUBMIT_CALLS.length).toEqual(1);
431
- expect(ON_PAGE_CHANGE_CALLS.length).toEqual(1);
432
- expect(ON_SUBMIT_CALLS[0].type).toEqual(_models.PageAction.TYPES.SAVE_AND_CONTINUE);
433
- case 20:
434
- case "end":
435
- return _context12.stop();
436
- }
437
- }, _callee12);
438
- })));
439
- it('should handle a page submission repeatedly if ignoreSubmittingFlag is true', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee14() {
440
- var ON_PAGE_CHANGE_CALLS, ON_PAGE_CHANGE, ON_SUBMIT_CALLS, ON_SUBMIT, HOOKS, formDefinition, form, hub, _hub$childNodes4, civilServantList, link, page, continueButton;
441
- return _regeneratorRuntime().wrap(function _callee14$(_context14) {
442
- while (1) switch (_context14.prev = _context14.next) {
443
- case 0:
444
- ON_PAGE_CHANGE_CALLS = [];
445
- ON_PAGE_CHANGE = function ON_PAGE_CHANGE(pageId) {
446
- ON_PAGE_CHANGE_CALLS.push(pageId);
447
- };
448
- ON_SUBMIT_CALLS = [];
449
- ON_SUBMIT = /*#__PURE__*/function () {
450
- var _ref14 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee13(type, payload, onSuccess, onError, fieldName, fieldValue) {
451
- return _regeneratorRuntime().wrap(function _callee13$(_context13) {
452
- while (1) switch (_context13.prev = _context13.next) {
453
- case 0:
454
- ON_SUBMIT_CALLS.push({
455
- type: type,
456
- payload: payload,
457
- onSuccess: onSuccess,
458
- onError: onError,
459
- fieldName: fieldName,
460
- fieldValue: fieldValue
461
- });
462
-
463
- // mock a delay when submitting to the backend
464
- _context13.next = 3;
465
- return sleep(2000);
466
- case 3:
467
- onSuccess();
468
- case 4:
469
- case "end":
470
- return _context13.stop();
471
- }
472
- }, _callee13);
473
- }));
474
- return function ON_SUBMIT(_x7, _x8, _x9, _x10, _x11, _x12) {
475
- return _ref14.apply(this, arguments);
476
- };
477
- }();
478
- HOOKS = {
479
- onSubmit: ON_SUBMIT,
480
- onPageChange: ON_PAGE_CHANGE
481
- };
482
- formDefinition = _objectSpread({}, _userProfile.default);
483
- formDefinition.pages[1].actions = [{
484
- type: 'saveAndContinue',
485
- page: 'test',
486
- ignoreSubmittingFlag: true
487
- }, {
488
- type: 'cancel'
489
- }];
490
- (0, _testUtils.act)(function () {
491
- (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, formDefinition, {
492
- data: _userProfileData.default,
493
- hooks: HOOKS
494
- })), container);
495
- });
496
- form = checkForm(container); // Navigate to the "Are you a civil servant?" page.
497
- hub = form.childNodes[1]; // Hub = CYA
498
- _hub$childNodes4 = _slicedToArray(hub.childNodes, 3), civilServantList = _hub$childNodes4[2];
499
- link = getChangeLink(civilServantList);
500
- _react.fireEvent.click(link, {});
501
-
502
- // Should already be answered "Yes", so simply click "Continue".
503
- page = form.childNodes[0];
504
- continueButton = getContinueButton(page);
505
- expect(ON_SUBMIT_CALLS.length).toEqual(0);
506
- _react.fireEvent.click(continueButton, {});
507
- expect(ON_SUBMIT_CALLS.length).toEqual(1);
508
- expect(ON_SUBMIT_CALLS[0].type).toEqual(_models.PageAction.TYPES.SAVE_AND_CONTINUE);
509
-
510
- // click on save and continue
511
- _react.fireEvent.click(continueButton);
512
-
513
- // click on save and continue again
514
- _react.fireEvent.click(continueButton);
515
-
516
- // click on save and continue a third time
517
- _react.fireEvent.click(continueButton);
518
-
519
- // expect all submit calls to be made
520
- expect(ON_SUBMIT_CALLS.length).toEqual(4);
521
- case 23:
522
- case "end":
523
- return _context14.stop();
524
- }
525
- }, _callee14);
526
- })));
527
- it('should handle page navigation', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee16() {
528
- var ON_PAGE_CHANGE_CALLS, ON_PAGE_CHANGE, HOOKS, form, hub, _hub$childNodes5, lineManagerList, link, page, pageHeading, continueButton, newPageHeading;
529
- return _regeneratorRuntime().wrap(function _callee16$(_context16) {
530
- while (1) switch (_context16.prev = _context16.next) {
531
- case 0:
532
- ON_PAGE_CHANGE_CALLS = [];
533
- ON_PAGE_CHANGE = function ON_PAGE_CHANGE(pageId) {
534
- ON_PAGE_CHANGE_CALLS.push(pageId);
535
- };
536
- HOOKS = {
537
- onPageChange: ON_PAGE_CHANGE
538
- };
539
- _context16.next = 5;
540
- return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee15() {
541
- return _regeneratorRuntime().wrap(function _callee15$(_context15) {
542
- while (1) switch (_context15.prev = _context15.next) {
543
- case 0:
544
- (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _userProfile.default, {
545
- data: _userProfileData.default,
546
- hooks: HOOKS
547
- })), container);
548
- case 1:
549
- case "end":
550
- return _context15.stop();
551
- }
552
- }, _callee15);
553
- })));
554
- case 5:
555
- form = checkForm(container); // Navigate to the "Add or change a line manager" page.
556
- hub = form.childNodes[1]; // Hub = CYA
557
- _hub$childNodes5 = _slicedToArray(hub.childNodes, 6), lineManagerList = _hub$childNodes5[5];
558
- link = getChangeLink(lineManagerList);
559
- expect(ON_PAGE_CHANGE_CALLS.length).toEqual(0);
560
- _react.fireEvent.click(link, {});
561
- expect(ON_PAGE_CHANGE_CALLS[0]).toEqual(_userProfile.default.pages[4].id);
562
-
563
- // Should be on the page explaining what changing the line manager means.
564
- page = form.childNodes[0];
565
- pageHeading = page.childNodes[0];
566
- expect(pageHeading.tagName).toEqual('H1');
567
- expect(pageHeading.textContent).toEqual(_userProfile.default.pages[4].title);
568
-
569
- // Now click on the "Continue" button on here.
570
- continueButton = getContinueButton(page);
571
- expect(ON_PAGE_CHANGE_CALLS.length).toEqual(1);
572
- _react.fireEvent.click(continueButton, {});
573
- expect(ON_PAGE_CHANGE_CALLS.length).toEqual(2);
574
- expect(ON_PAGE_CHANGE_CALLS[1]).toEqual(_userProfile.default.pages[5].id);
575
- newPageHeading = form.childNodes[0].childNodes[0];
576
- expect(newPageHeading.tagName).toEqual('H1');
577
- expect(newPageHeading.textContent).toEqual(_userProfile.default.pages[5].title);
578
- case 24:
579
- case "end":
580
- return _context16.stop();
581
- }
582
- }, _callee16);
583
- })));
584
- it('should show no title when hide_title is set to true', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee18() {
585
- var form, hub;
586
- return _regeneratorRuntime().wrap(function _callee18$(_context18) {
587
- while (1) switch (_context18.prev = _context18.next) {
588
- case 0:
589
- _context18.next = 2;
590
- return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee17() {
591
- return _regeneratorRuntime().wrap(function _callee17$(_context17) {
592
- while (1) switch (_context17.prev = _context17.next) {
593
- case 0:
594
- (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _userProfile.default, {
595
- data: _userProfileData.default,
596
- hide_title: true
597
- })), container);
598
- case 1:
599
- case "end":
600
- return _context17.stop();
601
- }
602
- }, _callee17);
603
- })));
604
- case 2:
605
- form = checkForm(container);
606
- expect(form.childNodes.length).toEqual(1); // Hub page (= CYA)
607
- hub = form.childNodes[0];
608
- expect(hub.tagName).toEqual('DIV');
609
- expect(hub.classList).toContain(_CheckYourAnswers.DEFAULT_CLASS);
610
- case 7:
611
- case "end":
612
- return _context18.stop();
613
- }
614
- }, _callee18);
615
- })));
616
- it('should render a task list', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee20() {
617
- var taskList;
618
- return _regeneratorRuntime().wrap(function _callee20$(_context20) {
619
- while (1) switch (_context20.prev = _context20.next) {
620
- case 0:
621
- _context20.next = 2;
622
- return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee19() {
623
- return _regeneratorRuntime().wrap(function _callee19$(_context19) {
624
- while (1) switch (_context19.prev = _context19.next) {
625
- case 0:
626
- (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _taskList.default), container);
627
- case 1:
628
- case "end":
629
- return _context19.stop();
630
- }
631
- }, _callee19);
632
- })));
633
- case 2:
634
- taskList = container.childNodes[0].childNodes[1];
635
- expect(taskList.classList).toContain(_TaskList.DEFAULT_CLASS);
636
- case 4:
637
- case "end":
638
- return _context20.stop();
639
- }
640
- }, _callee20);
641
- })));
642
- it('should render a cya page', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee22() {
643
- var cya;
644
- return _regeneratorRuntime().wrap(function _callee22$(_context22) {
645
- while (1) switch (_context22.prev = _context22.next) {
646
- case 0:
647
- _context22.next = 2;
648
- return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee21() {
649
- return _regeneratorRuntime().wrap(function _callee21$(_context21) {
650
- while (1) switch (_context21.prev = _context21.next) {
651
- case 0:
652
- (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _firstForm.default), container);
653
- case 1:
654
- case "end":
655
- return _context21.stop();
656
- }
657
- }, _callee21);
658
- })));
659
- case 2:
660
- cya = container.childNodes[0];
661
- expect(cya.classList).toContain('hods-form');
662
- case 4:
663
- case "end":
664
- return _context22.stop();
665
- }
666
- }, _callee22);
667
- })));
668
- it('should load task list with notes', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee24() {
669
- var ON_SUBMIT_CALLS, ON_SUBMIT, HOOKS, TASK_LIST_WITH_NOTES, taskList;
670
- return _regeneratorRuntime().wrap(function _callee24$(_context24) {
671
- while (1) switch (_context24.prev = _context24.next) {
672
- case 0:
673
- ON_SUBMIT_CALLS = [];
674
- ON_SUBMIT = function ON_SUBMIT(type, payload, onSuccess) {
675
- ON_SUBMIT_CALLS.push(payload);
676
- onSuccess();
677
- };
678
- HOOKS = {
679
- onSubmit: ON_SUBMIT
680
- };
681
- TASK_LIST_WITH_NOTES = JSON.parse(JSON.stringify(_taskList.default));
682
- TASK_LIST_WITH_NOTES.hub.notes = {
683
- title: "test title",
684
- text: "test text",
685
- show_when: [{
686
- "op": "=",
687
- "field": "areYouACivilServant",
688
- "value": "yes"
689
- }]
690
- };
691
- _context24.next = 7;
692
- return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee23() {
693
- return _regeneratorRuntime().wrap(function _callee23$(_context23) {
694
- while (1) switch (_context23.prev = _context23.next) {
695
- case 0:
696
- (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, TASK_LIST_WITH_NOTES, {
697
- data: _userProfileData.default,
698
- hooks: HOOKS
699
- })), container);
700
- case 1:
701
- case "end":
702
- return _context23.stop();
703
- }
704
- }, _callee23);
705
- })));
706
- case 7:
707
- taskList = container.childNodes[0].childNodes[1];
708
- expect(taskList.childNodes[5].textContent).toEqual("test text");
709
- expect(taskList.childNodes[5].classList).toContain('govuk-textarea');
710
- case 10:
711
- case "end":
712
- return _context24.stop();
713
- }
714
- }, _callee24);
715
- })));
716
- it('should not load task list with notes', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee26() {
717
- var ON_SUBMIT_CALLS, ON_SUBMIT, HOOKS, TASK_LIST_WITH_NOTES, taskList;
718
- return _regeneratorRuntime().wrap(function _callee26$(_context26) {
719
- while (1) switch (_context26.prev = _context26.next) {
720
- case 0:
721
- ON_SUBMIT_CALLS = [];
722
- ON_SUBMIT = function ON_SUBMIT(type, payload, onSuccess) {
723
- ON_SUBMIT_CALLS.push(payload);
724
- onSuccess();
725
- };
726
- HOOKS = {
727
- onSubmit: ON_SUBMIT
728
- };
729
- TASK_LIST_WITH_NOTES = JSON.parse(JSON.stringify(_taskList.default));
730
- TASK_LIST_WITH_NOTES.hub.notes = {
731
- title: "test title",
732
- text: "test text",
733
- show_when: [{
734
- "op": "!=",
735
- "field": "changeSummary",
736
- "value": undefined
737
- }]
738
- };
739
- _context26.next = 7;
740
- return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee25() {
741
- return _regeneratorRuntime().wrap(function _callee25$(_context25) {
742
- while (1) switch (_context25.prev = _context25.next) {
743
- case 0:
744
- (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, TASK_LIST_WITH_NOTES, {
745
- data: _userProfileData.default,
746
- hooks: HOOKS
747
- })), container);
748
- case 1:
749
- case "end":
750
- return _context25.stop();
751
- }
752
- }, _callee25);
753
- })));
754
- case 7:
755
- taskList = container.childNodes[0].childNodes[1];
756
- taskList.childNodes.forEach(function (child) {
757
- // eslint-disable-next-line no-console
758
- console.log("taskList, child = ".concat(JSON.stringify(child.textContent)));
759
- });
760
- expect(taskList.childNodes[5].textContent).not.toEqual("test text");
761
- expect(taskList.childNodes[5].classList).not.toContain('govuk-textarea');
762
- case 11:
763
- case "end":
764
- return _context26.stop();
765
- }
766
- }, _callee26);
767
- })));
768
- it('should handle navigating between task list pages', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee28() {
769
- var ON_SUBMIT_CALLS, ON_SUBMIT, HOOKS, taskList, firstTaskStatus, secondTaskStatus, firstTask, newPage, fieldset, continueButton, seaButton, cyaPageChange, modeChangeLink, changePage, airButton, cyaPage, finalSubmit;
770
- return _regeneratorRuntime().wrap(function _callee28$(_context28) {
771
- while (1) switch (_context28.prev = _context28.next) {
772
- case 0:
773
- ON_SUBMIT_CALLS = [];
774
- ON_SUBMIT = function ON_SUBMIT(type, payload, onSuccess) {
775
- ON_SUBMIT_CALLS.push(payload);
776
- onSuccess();
777
- };
778
- HOOKS = {
779
- onSubmit: ON_SUBMIT
780
- };
781
- _context28.next = 5;
782
- return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee27() {
783
- return _regeneratorRuntime().wrap(function _callee27$(_context27) {
784
- while (1) switch (_context27.prev = _context27.next) {
785
- case 0:
786
- (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _taskList.default, {
787
- hooks: HOOKS
788
- })), container);
789
- case 1:
790
- case "end":
791
- return _context27.stop();
792
- }
793
- }, _callee27);
794
- })));
795
- case 5:
796
- taskList = container.childNodes[0].childNodes[1]; // Check statuses are correct
797
- firstTaskStatus = taskList.childNodes[3].childNodes[0].childNodes[1];
798
- expect(firstTaskStatus.textContent).toEqual(_models.TaskStates.DETAILS[_models.TaskStates.TYPES.NOT_STARTED].label);
799
- secondTaskStatus = taskList.childNodes[3].childNodes[1].childNodes[1];
800
- expect(secondTaskStatus.textContent).toEqual(_models.TaskStates.DETAILS[_models.TaskStates.TYPES.CANNOT_START_YET].label);
801
-
802
- // Launch first task
803
- firstTask = taskList.childNodes[3].childNodes[0].childNodes[0].childNodes[0];
804
- expect(firstTask.textContent).toEqual('Date, location and mode details');
805
- _react.fireEvent.click(firstTask, {});
806
-
807
- // Fill first page and navigate
808
- newPage = container.childNodes[0].childNodes[0];
809
- expect(newPage.childNodes[0].textContent).toEqual('Event Date');
810
- fieldset = newPage.childNodes[1].childNodes[0]; // child nodes of fieldset are legend and date
811
- setDate(fieldset.children[1], ['7', '7', '2022']);
812
- continueButton = newPage.childNodes[2].childNodes[0];
813
- _react.fireEvent.click(continueButton, {});
814
-
815
- // Fill second page and navigate
816
- newPage = container.childNodes[0].childNodes[0];
817
- expect(newPage.childNodes[0].textContent).toEqual('Event Mode');
818
- seaButton = newPage.childNodes[1].childNodes[0].childNodes[2].childNodes[0];
819
- expect(seaButton.textContent).toEqual('Sea');
820
- _react.fireEvent.click(seaButton.childNodes[0], {});
821
- continueButton = newPage.childNodes[2].childNodes[0];
822
- _react.fireEvent.click(continueButton, {});
823
-
824
- // Click change to mode on CYA page
825
- cyaPageChange = container.childNodes[0].childNodes[0];
826
- expect(cyaPageChange.childNodes[0].textContent).toEqual('Check your answers');
827
- modeChangeLink = cyaPageChange.childNodes[4].childNodes[0].childNodes[0].childNodes[2].childNodes[0];
828
- expect(modeChangeLink.textContent).toEqual('Change Event Mode');
829
- _react.fireEvent.click(modeChangeLink, {});
830
- changePage = container.childNodes[0].childNodes[0];
831
- expect(changePage.childNodes[0].textContent).toEqual('Event Mode');
832
- // Click on radio for 'Air'
833
- airButton = changePage.childNodes[1].childNodes[0].childNodes[2].childNodes[1];
834
- expect(airButton.textContent).toEqual('Air');
835
- _react.fireEvent.click(airButton.childNodes[0]);
836
- // Continue again to CYA page
837
- expect(changePage.childNodes[2].childNodes[0].textContent).toEqual('Save and continue');
838
- continueButton = changePage.childNodes[2].childNodes[0];
839
- _react.fireEvent.click(continueButton, {});
840
-
841
- // Continue on from CYA page
842
- cyaPage = container.childNodes[0].childNodes[0];
843
- expect(cyaPage.childNodes[0].textContent).toEqual('Check your answers');
844
- expect(cyaPage.childNodes[5].childNodes[0].textContent).toEqual('Save and continue');
845
- expect(cyaPage.childNodes[5].childNodes[1].textContent).toEqual('Save and return later');
846
- _react.fireEvent.click(cyaPage.childNodes[5].childNodes[0], {});
847
-
848
- // Should be back at task list
849
- expect(container.childNodes[0].childNodes[0].textContent).toEqual('Task List Form');
850
-
851
- // Check statuses are correct
852
- firstTaskStatus = container.childNodes[0].childNodes[1].childNodes[3].childNodes[0].childNodes[1];
853
- expect(firstTaskStatus.textContent).toEqual(_models.TaskStates.DETAILS[_models.TaskStates.TYPES.COMPLETE].label);
854
- secondTaskStatus = container.childNodes[0].childNodes[1].childNodes[3].childNodes[1].childNodes[1];
855
- expect(secondTaskStatus.textContent).toEqual(_models.TaskStates.DETAILS[_models.TaskStates.TYPES.NOT_STARTED].label);
856
-
857
- // Check final data submitted to backend is as expected
858
- finalSubmit = ON_SUBMIT_CALLS[ON_SUBMIT_CALLS.length - 1];
859
- expect(finalSubmit.date).toEqual('7-7-2022');
860
- expect(finalSubmit.mode).toEqual('air');
861
- expect(finalSubmit.formStatus.tasks['Date, location and mode details'].complete).toEqual(true);
862
- case 53:
863
- case "end":
864
- return _context28.stop();
865
- }
866
- }, _callee28);
867
- })));
868
- it('should go straight to CYA page if a complete task is selected', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee30() {
869
- var ON_SUBMIT, HOOKS, taskList, newPage, fieldset;
870
- return _regeneratorRuntime().wrap(function _callee30$(_context30) {
871
- while (1) switch (_context30.prev = _context30.next) {
872
- case 0:
873
- ON_SUBMIT = function ON_SUBMIT(type, payload, onSuccess) {
874
- onSuccess();
875
- };
876
- HOOKS = {
877
- onSubmit: ON_SUBMIT
878
- };
879
- _context30.next = 4;
880
- return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee29() {
881
- return _regeneratorRuntime().wrap(function _callee29$(_context29) {
882
- while (1) switch (_context29.prev = _context29.next) {
883
- case 0:
884
- (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _taskList.default, {
885
- hooks: HOOKS
886
- })), container);
887
- case 1:
888
- case "end":
889
- return _context29.stop();
890
- }
891
- }, _callee29);
892
- })));
893
- case 4:
894
- taskList = container.childNodes[0].childNodes[1]; // Launch first task
895
- _react.fireEvent.click(taskList.childNodes[3].childNodes[0].childNodes[0].childNodes[0], {});
896
-
897
- // Fill first page and navigate
898
- newPage = container.childNodes[0].childNodes[0];
899
- fieldset = newPage.childNodes[1].childNodes[0];
900
- setDate(fieldset.children[1], ['7', '7', '2022']);
901
- // child nodes of fieldset are legend and date
902
-
903
- _react.fireEvent.click(newPage.childNodes[2].childNodes[0], {});
904
-
905
- // Fill second page and navigate
906
- newPage = container.childNodes[0].childNodes[0];
907
- _react.fireEvent.click(newPage.childNodes[1].childNodes[0].childNodes[2].childNodes[0].childNodes[0], {});
908
- _react.fireEvent.click(newPage.childNodes[2].childNodes[0], {});
909
-
910
- // Continue on from CYA page
911
- _react.fireEvent.click(container.childNodes[0].childNodes[0].childNodes[5].childNodes[0], {});
912
-
913
- // Launch same task again
914
- _react.fireEvent.click(container.childNodes[0].childNodes[1].childNodes[3].childNodes[0].childNodes[0].childNodes[0], {});
915
-
916
- // Should be at CYA page
917
- expect(container.childNodes[0].childNodes[0].childNodes[0].textContent).toEqual('Check your answers');
918
- case 16:
919
- case "end":
920
- return _context30.stop();
921
- }
922
- }, _callee30);
923
- })));
924
- it('should go to incomplete page when selecting in-progress task', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee32() {
925
- var ON_SUBMIT, HOOKS, DATA, taskList;
926
- return _regeneratorRuntime().wrap(function _callee32$(_context32) {
927
- while (1) switch (_context32.prev = _context32.next) {
928
- case 0:
929
- ON_SUBMIT = function ON_SUBMIT(type, payload, onSuccess) {
930
- onSuccess();
931
- };
932
- HOOKS = {
933
- onSubmit: ON_SUBMIT
934
- };
935
- DATA = {
936
- "date": "7-7-2022",
937
- "formStatus": {
938
- "tasks": {
939
- "Date, location and mode details": {
940
- "complete": false,
941
- "currentPage": "eventMode"
942
- }
943
- },
944
- "taskPage": "eventMode"
945
- }
946
- };
947
- _context32.next = 5;
948
- return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee31() {
949
- return _regeneratorRuntime().wrap(function _callee31$(_context31) {
950
- while (1) switch (_context31.prev = _context31.next) {
951
- case 0:
952
- (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _taskList.default, {
953
- hooks: HOOKS,
954
- data: DATA
955
- })), container);
956
- case 1:
957
- case "end":
958
- return _context31.stop();
959
- }
960
- }, _callee31);
961
- })));
962
- case 5:
963
- taskList = container.childNodes[0].childNodes[1]; // Launch first task
964
- _react.fireEvent.click(taskList.childNodes[3].childNodes[0].childNodes[0].childNodes[0], {});
965
-
966
- // Should be at Event Mode page
967
- expect(container.childNodes[0].childNodes[0].childNodes[0].textContent).toEqual('Event Mode');
968
- case 8:
969
- case "end":
970
- return _context32.stop();
971
- }
972
- }, _callee32);
973
- })));
974
- it('should go to the first page of a complete task if noTaskCYAs specified', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee34() {
975
- var ON_SUBMIT, HOOKS, TASK_LIST_WITH_NO_TASK_CYAS, taskList, newPage, fieldset;
976
- return _regeneratorRuntime().wrap(function _callee34$(_context34) {
977
- while (1) switch (_context34.prev = _context34.next) {
978
- case 0:
979
- ON_SUBMIT = function ON_SUBMIT(type, payload, onSuccess) {
980
- onSuccess();
981
- };
982
- HOOKS = {
983
- onSubmit: ON_SUBMIT
984
- };
985
- TASK_LIST_WITH_NO_TASK_CYAS = JSON.parse(JSON.stringify(_taskList.default));
986
- TASK_LIST_WITH_NO_TASK_CYAS.hub.noTaskCYAs = true;
987
- TASK_LIST_WITH_NO_TASK_CYAS.pages[1].actions[0] = {
988
- type: 'save',
989
- complete: true
990
- };
991
- _context34.next = 7;
992
- return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee33() {
993
- return _regeneratorRuntime().wrap(function _callee33$(_context33) {
994
- while (1) switch (_context33.prev = _context33.next) {
995
- case 0:
996
- (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, TASK_LIST_WITH_NO_TASK_CYAS, {
997
- hooks: HOOKS
998
- })), container);
999
- case 1:
1000
- case "end":
1001
- return _context33.stop();
1002
- }
1003
- }, _callee33);
1004
- })));
1005
- case 7:
1006
- taskList = container.childNodes[0].childNodes[1]; // Launch first task
1007
- _react.fireEvent.click(taskList.childNodes[3].childNodes[0].childNodes[0].childNodes[0], {});
1008
-
1009
- // Fill first page and navigate
1010
- newPage = container.childNodes[0].childNodes[0];
1011
- fieldset = newPage.childNodes[1].childNodes[0];
1012
- setDate(fieldset.children[1], ['7', '7', '2022']);
1013
- _react.fireEvent.click(newPage.childNodes[2].childNodes[0], {});
1014
-
1015
- // Fill second page
1016
- newPage = container.childNodes[0].childNodes[0];
1017
- // expect(newPage.childNodes[1].childNodes[0].childNodes[2].childNodes[0].childNodes[0]).toEqual('');
1018
- _react.fireEvent.click(newPage.childNodes[1].childNodes[0].childNodes[2].childNodes[0].childNodes[0], {});
1019
- _react.fireEvent.click(newPage.childNodes[2].childNodes[0], {});
1020
-
1021
- // Launch same task again
1022
- _react.fireEvent.click(container.childNodes[0].childNodes[1].childNodes[3].childNodes[0].childNodes[0].childNodes[0], {});
1023
-
1024
- // Should be on the first page
1025
- expect(container.childNodes[0].childNodes[0].childNodes[0].textContent).toEqual('Event Date');
1026
- case 18:
1027
- case "end":
1028
- return _context34.stop();
79
+ const getContinueButton = page => page.childNodes[page.childNodes.length - 1].childNodes[0].childNodes[0];
80
+ const getCancelButton = page => page.childNodes[page.childNodes.length - 1].childNodes[1].childNodes[0];
81
+ it('should start on the hub page correctly and display the title', async () => {
82
+ await (0, _testUtils.act)(async () => {
83
+ (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _userProfile.default, {
84
+ data: _userProfileData.default
85
+ })), container);
86
+ });
87
+ const form = checkForm(container);
88
+ expect(form.childNodes.length).toEqual(2); // Title + Hub page (= CYA)
89
+ const title = form.childNodes[0];
90
+ expect(title.tagName).toEqual('H1');
91
+ expect(title.textContent).toEqual(_userProfile.default.title);
92
+ const hub = form.childNodes[1];
93
+ expect(hub.tagName).toEqual('DIV');
94
+ expect(hub.classList).toContain(_CheckYourAnswers.DEFAULT_CLASS);
95
+ });
96
+ it('should fire the onFormLoad method passed in the hooks', async () => {
97
+ let onFormLoadCalled = false;
98
+ const ON_FORM_LOAD = () => {
99
+ onFormLoadCalled = true;
100
+ };
101
+ const HOOKS = {
102
+ onFormLoad: ON_FORM_LOAD
103
+ };
104
+ await (0, _testUtils.act)(async () => {
105
+ (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _userProfile.default, {
106
+ data: _userProfileData.default,
107
+ hooks: HOOKS
108
+ })), container);
109
+ });
110
+ expect(onFormLoadCalled).toBeTruthy();
111
+ });
112
+ it('should navigate to the first editable page', async () => {
113
+ const ON_PAGE_CHANGE_CALLS = [];
114
+ const ON_PAGE_CHANGE = pageId => {
115
+ ON_PAGE_CHANGE_CALLS.push(pageId);
116
+ };
117
+ const HOOKS = {
118
+ onPageChange: ON_PAGE_CHANGE
119
+ };
120
+ await (0, _testUtils.act)(async () => {
121
+ (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _userProfile.default, {
122
+ data: _userProfileData.default,
123
+ hooks: HOOKS
124
+ })), container);
125
+ });
126
+ const form = checkForm(container);
127
+ const hub = form.childNodes[1]; // Hub = CYA
128
+ const [,, civilServantList] = hub.childNodes;
129
+ const link = getChangeLink(civilServantList);
130
+ expect(ON_PAGE_CHANGE_CALLS.length).toEqual(0);
131
+ _react.fireEvent.click(link, {});
132
+ expect(ON_PAGE_CHANGE_CALLS.length).toEqual(1);
133
+ expect(ON_PAGE_CHANGE_CALLS[0]).toEqual(_userProfile.default.pages[1].id);
134
+
135
+ // The form layout should have changed to the current page.
136
+ expect(form.childNodes.length).toEqual(1); // Just the page.
137
+ const page = form.childNodes[0];
138
+ const pageHeading = page.childNodes[0];
139
+ expect(pageHeading.tagName).toEqual('H1');
140
+ expect(pageHeading.textContent).toEqual(_userProfile.default.pages[1].title);
141
+ });
142
+ it('should handle a page submission', async () => {
143
+ const ON_SUBMIT_CALLS = [];
144
+ const ON_SUBMIT = (type, payload, onSuccess, onError, fieldName, fieldValue) => {
145
+ ON_SUBMIT_CALLS.push({
146
+ type,
147
+ payload,
148
+ onSuccess,
149
+ onError,
150
+ fieldName,
151
+ fieldValue
152
+ });
153
+ onSuccess();
154
+ };
155
+ const HOOKS = {
156
+ onSubmit: ON_SUBMIT
157
+ };
158
+ await (0, _testUtils.act)(async () => {
159
+ (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _userProfile.default, {
160
+ data: _userProfileData.default,
161
+ hooks: HOOKS,
162
+ type: _models.FormTypes.HUB
163
+ })), container);
164
+ });
165
+ const form = checkForm(container);
166
+
167
+ // Navigate to the "Are you a civil servant?" page.
168
+ const hub = form.childNodes[1]; // Hub = CYA
169
+ const [,, civilServantList] = hub.childNodes;
170
+ const link = getChangeLink(civilServantList);
171
+ _react.fireEvent.click(link, {});
172
+
173
+ // Should already be answered "Yes", but select "No, I'm a contractor" option to generate patch
174
+ // and then click "Continue".
175
+ _react.fireEvent.click(_react.screen.getByText("No, I'm a contractor"));
176
+ const page = form.childNodes[0];
177
+ const continueButton = getContinueButton(page);
178
+ expect(ON_SUBMIT_CALLS.length).toEqual(0);
179
+ _react.fireEvent.click(continueButton, {});
180
+ expect(ON_SUBMIT_CALLS.length).toEqual(1);
181
+ expect(ON_SUBMIT_CALLS[0].type).toEqual(_models.PageAction.TYPES.SUBMIT);
182
+ expect(ON_SUBMIT_CALLS[0].payload.areYouACivilServant).toEqual('no-contractor');
183
+ expect(ON_SUBMIT_CALLS[0].fieldName).toEqual('Are you a civil servant?');
184
+ expect(ON_SUBMIT_CALLS[0].fieldValue).toEqual("No, I'm a contractor");
185
+
186
+ // And we should be back on the hub.
187
+ expect(form.childNodes.length).toEqual(2); // Title + Hub page (= CYA)
188
+ const title = form.childNodes[0];
189
+ expect(title.tagName).toEqual('H1');
190
+ expect(title.textContent).toEqual(_userProfile.default.title);
191
+ });
192
+ it('should handle a page submission error', async () => {
193
+ const ON_SUBMIT_CALLS = [];
194
+ const ON_SUBMIT = (type, payload, onSuccess, onError) => {
195
+ ON_SUBMIT_CALLS.push({
196
+ type,
197
+ payload,
198
+ onSuccess,
199
+ onError
200
+ });
201
+ onError([{
202
+ id: 'unknown',
203
+ error: 'Something went wrong'
204
+ }]);
205
+ };
206
+ const HOOKS = {
207
+ onSubmit: ON_SUBMIT,
208
+ onAction: (formData, patch) => ({
209
+ formData,
210
+ patch
211
+ })
212
+ };
213
+ await (0, _testUtils.act)(async () => {
214
+ (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _userProfile.default, {
215
+ data: _userProfileData.default,
216
+ hooks: HOOKS
217
+ })), container);
218
+ });
219
+ const form = checkForm(container);
220
+
221
+ // Navigate to the "Are you a civil servant?" page.
222
+ const hub = form.childNodes[1]; // Hub = CYA
223
+ const [,, civilServantList] = hub.childNodes;
224
+ const link = getChangeLink(civilServantList);
225
+ _react.fireEvent.click(link, {});
226
+
227
+ // Should already be answered "Yes", so simply click "Continue".
228
+ const page = form.childNodes[0];
229
+ const continueButton = getContinueButton(page);
230
+ expect(ON_SUBMIT_CALLS.length).toEqual(0);
231
+ _react.fireEvent.click(continueButton, {});
232
+ expect(ON_SUBMIT_CALLS.length).toEqual(1);
233
+ expect(ON_SUBMIT_CALLS[0].type).toEqual(_models.PageAction.TYPES.SUBMIT);
234
+ expect(ON_SUBMIT_CALLS[0].payload.areYouACivilServant).toEqual('yes');
235
+
236
+ // And we should be kept on the same page.
237
+ expect(form.childNodes.length).toEqual(1); // Just the page.
238
+ const pageHeading = form.childNodes[0].childNodes[1];
239
+ expect(pageHeading.tagName).toEqual('H1');
240
+ expect(pageHeading.textContent).toEqual(_userProfile.default.pages[1].title);
241
+ });
242
+ it('should handle a page submission once regardless of how many times page action is clicked', async () => {
243
+ const ON_PAGE_CHANGE_CALLS = [];
244
+ const ON_PAGE_CHANGE = pageId => {
245
+ ON_PAGE_CHANGE_CALLS.push(pageId);
246
+ };
247
+ const ON_SUBMIT_CALLS = [];
248
+ const ON_SUBMIT = async (type, payload, onSuccess, onError, fieldName, fieldValue) => {
249
+ ON_SUBMIT_CALLS.push({
250
+ type,
251
+ payload,
252
+ onSuccess,
253
+ onError,
254
+ fieldName,
255
+ fieldValue
256
+ });
257
+
258
+ // mock a delay when submitting to the backend
259
+ await sleep(2000);
260
+ onSuccess();
261
+ };
262
+ const HOOKS = {
263
+ onSubmit: ON_SUBMIT,
264
+ onPageChange: ON_PAGE_CHANGE
265
+ };
266
+ (0, _testUtils.act)(() => {
267
+ (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _firstForm.default, {
268
+ hooks: HOOKS,
269
+ type: _models.FormTypes.CYA
270
+ })), container);
271
+ });
272
+ const [,,,,, continueButtonGroup] = container.childNodes[0].childNodes[0].childNodes;
273
+
274
+ // go to first question page
275
+ const continueFormButton = continueButtonGroup.childNodes[0];
276
+ _react.fireEvent.click(continueFormButton);
277
+ const innerDiv = container.childNodes[0].childNodes[0];
278
+
279
+ // enter a value in the input field
280
+ const firstNameInput = innerDiv.childNodes[1].childNodes[2];
281
+ const EVENT = {
282
+ target: {
283
+ name: firstNameInput.id,
284
+ value: 'abc'
1029
285
  }
1030
- }, _callee34);
1031
- })));
1032
- it('should handle cancellation from a page', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee36() {
1033
- var ON_CANCEL_CALLS, ON_CANCEL, HOOKS, form, hub, _hub$childNodes6, civilServantList, link, page, cancel;
1034
- return _regeneratorRuntime().wrap(function _callee36$(_context36) {
1035
- while (1) switch (_context36.prev = _context36.next) {
1036
- case 0:
1037
- ON_CANCEL_CALLS = [];
1038
- ON_CANCEL = function ON_CANCEL() {
1039
- ON_CANCEL_CALLS.push(undefined);
1040
- };
1041
- HOOKS = {
1042
- onCancel: ON_CANCEL
1043
- };
1044
- _context36.next = 5;
1045
- return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee35() {
1046
- return _regeneratorRuntime().wrap(function _callee35$(_context35) {
1047
- while (1) switch (_context35.prev = _context35.next) {
1048
- case 0:
1049
- (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _userProfile.default, {
1050
- data: _userProfileData.default,
1051
- hooks: HOOKS
1052
- })), container);
1053
- case 1:
1054
- case "end":
1055
- return _context35.stop();
1056
- }
1057
- }, _callee35);
1058
- })));
1059
- case 5:
1060
- form = checkForm(container); // Navigate to the "Are you a civil servant?" page.
1061
- hub = form.childNodes[1]; // Hub = CYA
1062
- _hub$childNodes6 = _slicedToArray(hub.childNodes, 3), civilServantList = _hub$childNodes6[2];
1063
- link = getChangeLink(civilServantList);
1064
- _react.fireEvent.click(link, {});
286
+ };
287
+ _react.fireEvent.change(firstNameInput, EVENT);
288
+ const submitButton = innerDiv.childNodes[2].childNodes[0];
1065
289
 
1066
- // Should already be answered "Yes", so simply click "Continue".
1067
- page = form.childNodes[0];
1068
- cancel = getCancelButton(page);
1069
- expect(ON_CANCEL_CALLS.length).toEqual(0);
1070
- _react.fireEvent.click(cancel, {});
1071
- expect(ON_CANCEL_CALLS.length).toEqual(1);
1072
- case 15:
1073
- case "end":
1074
- return _context36.stop();
1075
- }
1076
- }, _callee36);
1077
- })));
1078
- it('should navigate to a specific page at the beginning of a task if it is set as the firstPage of a task', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee38() {
1079
- var ON_SUBMIT_CALLS, ON_SUBMIT, HOOKS, TASK_LIST_NON_SEQUENTIAL, taskList, firstTask, newPage;
1080
- return _regeneratorRuntime().wrap(function _callee38$(_context38) {
1081
- while (1) switch (_context38.prev = _context38.next) {
1082
- case 0:
1083
- ON_SUBMIT_CALLS = [];
1084
- ON_SUBMIT = function ON_SUBMIT(type, payload, onSuccess) {
1085
- ON_SUBMIT_CALLS.push(payload);
1086
- onSuccess();
1087
- };
1088
- HOOKS = {
1089
- onSubmit: ON_SUBMIT
1090
- };
1091
- TASK_LIST_NON_SEQUENTIAL = JSON.parse(JSON.stringify(_taskList.default));
1092
- TASK_LIST_NON_SEQUENTIAL.hub.nonSequential = true;
1093
- _context38.next = 7;
1094
- return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee37() {
1095
- return _regeneratorRuntime().wrap(function _callee37$(_context37) {
1096
- while (1) switch (_context37.prev = _context37.next) {
1097
- case 0:
1098
- (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, TASK_LIST_NON_SEQUENTIAL, {
1099
- hooks: HOOKS
1100
- })), container);
1101
- case 1:
1102
- case "end":
1103
- return _context37.stop();
1104
- }
1105
- }, _callee37);
1106
- })));
1107
- case 7:
1108
- taskList = container.childNodes[0].childNodes[1]; // Launch first task of second section
1109
- firstTask = taskList.childNodes[5].childNodes[0].childNodes[0].childNodes[0];
1110
- expect(firstTask.textContent).toEqual('People details');
1111
- _react.fireEvent.click(firstTask, {});
290
+ // click on save and continue
291
+ _react.fireEvent.click(submitButton);
1112
292
 
1113
- // Should be at Surname page
1114
- newPage = container.childNodes[0].childNodes[0];
1115
- expect(newPage.childNodes[0].textContent).toEqual('Surname');
1116
- case 13:
1117
- case "end":
1118
- return _context38.stop();
1119
- }
1120
- }, _callee38);
1121
- })));
1122
- it('should handle page navigation correctly when hideBlankRows is true', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee40() {
1123
- var ON_PAGE_CHANGE_CALLS, ON_PAGE_CHANGE, HOOKS, form, hub, _hub$childNodes7, lineManagerList, link, page, pageHeading, continueButton, newPageHeading;
1124
- return _regeneratorRuntime().wrap(function _callee40$(_context40) {
1125
- while (1) switch (_context40.prev = _context40.next) {
1126
- case 0:
1127
- ON_PAGE_CHANGE_CALLS = [];
1128
- ON_PAGE_CHANGE = function ON_PAGE_CHANGE(pageId) {
1129
- ON_PAGE_CHANGE_CALLS.push(pageId);
1130
- };
1131
- HOOKS = {
1132
- onPageChange: ON_PAGE_CHANGE
1133
- };
1134
- _context40.next = 5;
1135
- return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee39() {
1136
- return _regeneratorRuntime().wrap(function _callee39$(_context39) {
1137
- while (1) switch (_context39.prev = _context39.next) {
1138
- case 0:
1139
- (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _userProfile.default, {
1140
- data: _userProfileData.default,
1141
- hooks: HOOKS,
1142
- hideBlankRows: true
1143
- })), container);
1144
- case 1:
1145
- case "end":
1146
- return _context39.stop();
1147
- }
1148
- }, _callee39);
1149
- })));
1150
- case 5:
1151
- form = checkForm(container); // Navigate to the "Add or change a line manager" page.
1152
- hub = form.childNodes[1]; // Hub = CYA
1153
- _hub$childNodes7 = _slicedToArray(hub.childNodes, 4), lineManagerList = _hub$childNodes7[3];
1154
- link = getChangeLink(lineManagerList);
1155
- expect(ON_PAGE_CHANGE_CALLS.length).toEqual(0);
1156
- _react.fireEvent.click(link, {});
1157
- expect(ON_PAGE_CHANGE_CALLS[0]).toEqual(_userProfile.default.pages[4].id);
293
+ // click on save and continue again
294
+ _react.fireEvent.click(submitButton);
1158
295
 
1159
- // Should be on the page explaining what changing the line manager means.
1160
- page = form.childNodes[0];
1161
- pageHeading = page.childNodes[0];
1162
- expect(pageHeading.tagName).toEqual('H1');
1163
- expect(pageHeading.textContent).toEqual(_userProfile.default.pages[4].title);
296
+ // click on save and continue a third time
297
+ _react.fireEvent.click(submitButton);
1164
298
 
1165
- // Now click on the "Continue" button on here.
1166
- continueButton = getContinueButton(page);
1167
- expect(ON_PAGE_CHANGE_CALLS.length).toEqual(1);
1168
- _react.fireEvent.click(continueButton, {});
1169
- expect(ON_PAGE_CHANGE_CALLS.length).toEqual(2);
1170
- expect(ON_PAGE_CHANGE_CALLS[1]).toEqual(_userProfile.default.pages[5].id);
1171
- newPageHeading = form.childNodes[0].childNodes[0];
1172
- expect(newPageHeading.tagName).toEqual('H1');
1173
- expect(newPageHeading.textContent).toEqual(_userProfile.default.pages[5].title);
1174
- case 24:
1175
- case "end":
1176
- return _context40.stop();
299
+ // only expect one submit call to be made
300
+ expect(ON_SUBMIT_CALLS.length).toEqual(1);
301
+ expect(ON_PAGE_CHANGE_CALLS.length).toEqual(1);
302
+ expect(ON_SUBMIT_CALLS[0].type).toEqual(_models.PageAction.TYPES.SAVE_AND_CONTINUE);
303
+ });
304
+ it('should handle a page submission repeatedly if ignoreSubmittingFlag is true', async () => {
305
+ const ON_PAGE_CHANGE_CALLS = [];
306
+ const ON_PAGE_CHANGE = pageId => {
307
+ ON_PAGE_CHANGE_CALLS.push(pageId);
308
+ };
309
+ const ON_SUBMIT_CALLS = [];
310
+ const ON_SUBMIT = async (type, payload, onSuccess, onError, fieldName, fieldValue) => {
311
+ ON_SUBMIT_CALLS.push({
312
+ type,
313
+ payload,
314
+ onSuccess,
315
+ onError,
316
+ fieldName,
317
+ fieldValue
318
+ });
319
+
320
+ // mock a delay when submitting to the backend
321
+ await sleep(2000);
322
+ onSuccess();
323
+ };
324
+ const HOOKS = {
325
+ onSubmit: ON_SUBMIT,
326
+ onPageChange: ON_PAGE_CHANGE
327
+ };
328
+ const formDefinition = {
329
+ ..._userProfile.default
330
+ };
331
+ formDefinition.pages[1].actions = [{
332
+ type: 'saveAndContinue',
333
+ page: 'test',
334
+ ignoreSubmittingFlag: true
335
+ }, {
336
+ type: 'cancel'
337
+ }];
338
+ (0, _testUtils.act)(() => {
339
+ (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, formDefinition, {
340
+ data: _userProfileData.default,
341
+ hooks: HOOKS
342
+ })), container);
343
+ });
344
+ const form = checkForm(container);
345
+
346
+ // Navigate to the "Are you a civil servant?" page.
347
+ const hub = form.childNodes[1]; // Hub = CYA
348
+ const [,, civilServantList] = hub.childNodes;
349
+ const link = getChangeLink(civilServantList);
350
+ _react.fireEvent.click(link, {});
351
+
352
+ // Should already be answered "Yes", so simply click "Continue".
353
+ const page = form.childNodes[0];
354
+ const continueButton = getContinueButton(page);
355
+ expect(ON_SUBMIT_CALLS.length).toEqual(0);
356
+ _react.fireEvent.click(continueButton, {});
357
+ expect(ON_SUBMIT_CALLS.length).toEqual(1);
358
+ expect(ON_SUBMIT_CALLS[0].type).toEqual(_models.PageAction.TYPES.SAVE_AND_CONTINUE);
359
+
360
+ // click on save and continue
361
+ _react.fireEvent.click(continueButton);
362
+
363
+ // click on save and continue again
364
+ _react.fireEvent.click(continueButton);
365
+
366
+ // click on save and continue a third time
367
+ _react.fireEvent.click(continueButton);
368
+
369
+ // expect all submit calls to be made
370
+ expect(ON_SUBMIT_CALLS.length).toEqual(4);
371
+ });
372
+ it('should handle page navigation', async () => {
373
+ const ON_PAGE_CHANGE_CALLS = [];
374
+ const ON_PAGE_CHANGE = pageId => {
375
+ ON_PAGE_CHANGE_CALLS.push(pageId);
376
+ };
377
+ const HOOKS = {
378
+ onPageChange: ON_PAGE_CHANGE
379
+ };
380
+ await (0, _testUtils.act)(async () => {
381
+ (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _userProfile.default, {
382
+ data: _userProfileData.default,
383
+ hooks: HOOKS
384
+ })), container);
385
+ });
386
+ const form = checkForm(container);
387
+
388
+ // Navigate to the "Add or change a line manager" page.
389
+ const hub = form.childNodes[1]; // Hub = CYA
390
+ const [,,,,, lineManagerList] = hub.childNodes;
391
+ const link = getChangeLink(lineManagerList);
392
+ expect(ON_PAGE_CHANGE_CALLS.length).toEqual(0);
393
+ _react.fireEvent.click(link, {});
394
+ expect(ON_PAGE_CHANGE_CALLS[0]).toEqual(_userProfile.default.pages[4].id);
395
+
396
+ // Should be on the page explaining what changing the line manager means.
397
+ const page = form.childNodes[0];
398
+ const pageHeading = page.childNodes[0];
399
+ expect(pageHeading.tagName).toEqual('H1');
400
+ expect(pageHeading.textContent).toEqual(_userProfile.default.pages[4].title);
401
+
402
+ // Now click on the "Continue" button on here.
403
+ const continueButton = getContinueButton(page);
404
+ expect(ON_PAGE_CHANGE_CALLS.length).toEqual(1);
405
+ _react.fireEvent.click(continueButton, {});
406
+ expect(ON_PAGE_CHANGE_CALLS.length).toEqual(2);
407
+ expect(ON_PAGE_CHANGE_CALLS[1]).toEqual(_userProfile.default.pages[5].id);
408
+ const newPageHeading = form.childNodes[0].childNodes[0];
409
+ expect(newPageHeading.tagName).toEqual('H1');
410
+ expect(newPageHeading.textContent).toEqual(_userProfile.default.pages[5].title);
411
+ });
412
+ it('should show no title when hide_title is set to true', async () => {
413
+ await (0, _testUtils.act)(async () => {
414
+ (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _userProfile.default, {
415
+ data: _userProfileData.default,
416
+ hide_title: true
417
+ })), container);
418
+ });
419
+ const form = checkForm(container);
420
+ expect(form.childNodes.length).toEqual(1); // Hub page (= CYA)
421
+ const hub = form.childNodes[0];
422
+ expect(hub.tagName).toEqual('DIV');
423
+ expect(hub.classList).toContain(_CheckYourAnswers.DEFAULT_CLASS);
424
+ });
425
+ it('should render a task list', async () => {
426
+ await (0, _testUtils.act)(async () => {
427
+ (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _taskList.default), container);
428
+ });
429
+ const taskList = container.childNodes[0].childNodes[1];
430
+ expect(taskList.classList).toContain(_TaskList.DEFAULT_CLASS);
431
+ });
432
+ it('should render a cya page', async () => {
433
+ await (0, _testUtils.act)(async () => {
434
+ (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _firstForm.default), container);
435
+ });
436
+ const cya = container.childNodes[0];
437
+ expect(cya.classList).toContain('hods-form');
438
+ });
439
+ it('should load task list with notes', async () => {
440
+ const ON_SUBMIT_CALLS = [];
441
+ const ON_SUBMIT = (type, payload, onSuccess) => {
442
+ ON_SUBMIT_CALLS.push(payload);
443
+ onSuccess();
444
+ };
445
+ const HOOKS = {
446
+ onSubmit: ON_SUBMIT
447
+ };
448
+ const TASK_LIST_WITH_NOTES = JSON.parse(JSON.stringify(_taskList.default));
449
+ TASK_LIST_WITH_NOTES.hub.notes = {
450
+ title: "test title",
451
+ text: "test text",
452
+ show_when: [{
453
+ "op": "=",
454
+ "field": "areYouACivilServant",
455
+ "value": "yes"
456
+ }]
457
+ };
458
+ await (0, _testUtils.act)(async () => {
459
+ (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, TASK_LIST_WITH_NOTES, {
460
+ data: _userProfileData.default,
461
+ hooks: HOOKS
462
+ })), container);
463
+ });
464
+ const taskList = container.childNodes[0].childNodes[1];
465
+ expect(taskList.childNodes[5].textContent).toEqual("test text");
466
+ expect(taskList.childNodes[5].classList).toContain('govuk-textarea');
467
+ });
468
+ it('should not load task list with notes', async () => {
469
+ const ON_SUBMIT_CALLS = [];
470
+ const ON_SUBMIT = (type, payload, onSuccess) => {
471
+ ON_SUBMIT_CALLS.push(payload);
472
+ onSuccess();
473
+ };
474
+ const HOOKS = {
475
+ onSubmit: ON_SUBMIT
476
+ };
477
+ const TASK_LIST_WITH_NOTES = JSON.parse(JSON.stringify(_taskList.default));
478
+ TASK_LIST_WITH_NOTES.hub.notes = {
479
+ title: "test title",
480
+ text: "test text",
481
+ show_when: [{
482
+ "op": "!=",
483
+ "field": "changeSummary",
484
+ "value": undefined
485
+ }]
486
+ };
487
+ await (0, _testUtils.act)(async () => {
488
+ (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, TASK_LIST_WITH_NOTES, {
489
+ data: _userProfileData.default,
490
+ hooks: HOOKS
491
+ })), container);
492
+ });
493
+ const taskList = container.childNodes[0].childNodes[1];
494
+ taskList.childNodes.forEach(child => {
495
+ // eslint-disable-next-line no-console
496
+ console.log("taskList, child = ".concat(JSON.stringify(child.textContent)));
497
+ });
498
+ expect(taskList.childNodes[5].textContent).not.toEqual("test text");
499
+ expect(taskList.childNodes[5].classList).not.toContain('govuk-textarea');
500
+ });
501
+ it('should handle navigating between task list pages', async () => {
502
+ const ON_SUBMIT_CALLS = [];
503
+ const ON_SUBMIT = (type, payload, onSuccess) => {
504
+ ON_SUBMIT_CALLS.push(payload);
505
+ onSuccess();
506
+ };
507
+ const HOOKS = {
508
+ onSubmit: ON_SUBMIT
509
+ };
510
+ await (0, _testUtils.act)(async () => {
511
+ (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _taskList.default, {
512
+ hooks: HOOKS
513
+ })), container);
514
+ });
515
+ const taskList = container.childNodes[0].childNodes[1];
516
+
517
+ // Check statuses are correct
518
+ let firstTaskStatus = taskList.childNodes[3].childNodes[0].childNodes[1];
519
+ expect(firstTaskStatus.textContent).toEqual(_models.TaskStates.DETAILS[_models.TaskStates.TYPES.NOT_STARTED].label);
520
+ let secondTaskStatus = taskList.childNodes[3].childNodes[1].childNodes[1];
521
+ expect(secondTaskStatus.textContent).toEqual(_models.TaskStates.DETAILS[_models.TaskStates.TYPES.CANNOT_START_YET].label);
522
+
523
+ // Launch first task
524
+ const firstTask = taskList.childNodes[3].childNodes[0].childNodes[0].childNodes[0];
525
+ expect(firstTask.textContent).toEqual('Date, location and mode details');
526
+ _react.fireEvent.click(firstTask, {});
527
+
528
+ // Fill first page and navigate
529
+ let newPage = container.childNodes[0].childNodes[0];
530
+ expect(newPage.childNodes[0].textContent).toEqual('Event Date');
531
+ const fieldset = newPage.childNodes[1].childNodes[0];
532
+ // child nodes of fieldset are legend and date
533
+ setDate(fieldset.children[1], ['7', '7', '2022']);
534
+ let continueButton = newPage.childNodes[2].childNodes[0];
535
+ _react.fireEvent.click(continueButton, {});
536
+
537
+ // Fill second page and navigate
538
+ newPage = container.childNodes[0].childNodes[0];
539
+ expect(newPage.childNodes[0].textContent).toEqual('Event Mode');
540
+ const seaButton = newPage.childNodes[1].childNodes[0].childNodes[2].childNodes[0];
541
+ expect(seaButton.textContent).toEqual('Sea');
542
+ _react.fireEvent.click(seaButton.childNodes[0], {});
543
+ continueButton = newPage.childNodes[2].childNodes[0];
544
+ _react.fireEvent.click(continueButton, {});
545
+
546
+ // Click change to mode on CYA page
547
+ const cyaPageChange = container.childNodes[0].childNodes[0];
548
+ expect(cyaPageChange.childNodes[0].textContent).toEqual('Check your answers');
549
+ const modeChangeLink = cyaPageChange.childNodes[4].childNodes[0].childNodes[0].childNodes[2].childNodes[0];
550
+ expect(modeChangeLink.textContent).toEqual('Change Event Mode');
551
+ _react.fireEvent.click(modeChangeLink, {});
552
+ const changePage = container.childNodes[0].childNodes[0];
553
+ expect(changePage.childNodes[0].textContent).toEqual('Event Mode');
554
+ // Click on radio for 'Air'
555
+ const airButton = changePage.childNodes[1].childNodes[0].childNodes[2].childNodes[1];
556
+ expect(airButton.textContent).toEqual('Air');
557
+ _react.fireEvent.click(airButton.childNodes[0]);
558
+ // Continue again to CYA page
559
+ expect(changePage.childNodes[2].childNodes[0].textContent).toEqual('Save and continue');
560
+ continueButton = changePage.childNodes[2].childNodes[0];
561
+ _react.fireEvent.click(continueButton, {});
562
+
563
+ // Continue on from CYA page
564
+ const cyaPage = container.childNodes[0].childNodes[0];
565
+ expect(cyaPage.childNodes[0].textContent).toEqual('Check your answers');
566
+ expect(cyaPage.childNodes[5].childNodes[0].textContent).toEqual('Save and continue');
567
+ expect(cyaPage.childNodes[5].childNodes[1].textContent).toEqual('Save and return later');
568
+ _react.fireEvent.click(cyaPage.childNodes[5].childNodes[0], {});
569
+
570
+ // Should be back at task list
571
+ expect(container.childNodes[0].childNodes[0].textContent).toEqual('Task List Form');
572
+
573
+ // Check statuses are correct
574
+ firstTaskStatus = container.childNodes[0].childNodes[1].childNodes[3].childNodes[0].childNodes[1];
575
+ expect(firstTaskStatus.textContent).toEqual(_models.TaskStates.DETAILS[_models.TaskStates.TYPES.COMPLETE].label);
576
+ secondTaskStatus = container.childNodes[0].childNodes[1].childNodes[3].childNodes[1].childNodes[1];
577
+ expect(secondTaskStatus.textContent).toEqual(_models.TaskStates.DETAILS[_models.TaskStates.TYPES.NOT_STARTED].label);
578
+
579
+ // Check final data submitted to backend is as expected
580
+ const finalSubmit = ON_SUBMIT_CALLS[ON_SUBMIT_CALLS.length - 1];
581
+ expect(finalSubmit.date).toEqual('7-7-2022');
582
+ expect(finalSubmit.mode).toEqual('air');
583
+ expect(finalSubmit.formStatus.tasks['Date, location and mode details'].complete).toEqual(true);
584
+ });
585
+ it('should go straight to CYA page if a complete task is selected', async () => {
586
+ const ON_SUBMIT = (type, payload, onSuccess) => {
587
+ onSuccess();
588
+ };
589
+ const HOOKS = {
590
+ onSubmit: ON_SUBMIT
591
+ };
592
+ await (0, _testUtils.act)(async () => {
593
+ (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _taskList.default, {
594
+ hooks: HOOKS
595
+ })), container);
596
+ });
597
+ const taskList = container.childNodes[0].childNodes[1];
598
+
599
+ // Launch first task
600
+ _react.fireEvent.click(taskList.childNodes[3].childNodes[0].childNodes[0].childNodes[0], {});
601
+
602
+ // Fill first page and navigate
603
+ let newPage = container.childNodes[0].childNodes[0];
604
+ const fieldset = newPage.childNodes[1].childNodes[0];
605
+ setDate(fieldset.children[1], ['7', '7', '2022']);
606
+ // child nodes of fieldset are legend and date
607
+
608
+ _react.fireEvent.click(newPage.childNodes[2].childNodes[0], {});
609
+
610
+ // Fill second page and navigate
611
+ newPage = container.childNodes[0].childNodes[0];
612
+ _react.fireEvent.click(newPage.childNodes[1].childNodes[0].childNodes[2].childNodes[0].childNodes[0], {});
613
+ _react.fireEvent.click(newPage.childNodes[2].childNodes[0], {});
614
+
615
+ // Continue on from CYA page
616
+ _react.fireEvent.click(container.childNodes[0].childNodes[0].childNodes[5].childNodes[0], {});
617
+
618
+ // Launch same task again
619
+ _react.fireEvent.click(container.childNodes[0].childNodes[1].childNodes[3].childNodes[0].childNodes[0].childNodes[0], {});
620
+
621
+ // Should be at CYA page
622
+ expect(container.childNodes[0].childNodes[0].childNodes[0].textContent).toEqual('Check your answers');
623
+ });
624
+ it('should go to incomplete page when selecting in-progress task', async () => {
625
+ const ON_SUBMIT = (type, payload, onSuccess) => {
626
+ onSuccess();
627
+ };
628
+ const HOOKS = {
629
+ onSubmit: ON_SUBMIT
630
+ };
631
+ const DATA = {
632
+ "date": "7-7-2022",
633
+ "formStatus": {
634
+ "tasks": {
635
+ "Date, location and mode details": {
636
+ "complete": false,
637
+ "currentPage": "eventMode"
638
+ }
639
+ },
640
+ "taskPage": "eventMode"
1177
641
  }
1178
- }, _callee40);
1179
- })));
642
+ };
643
+ await (0, _testUtils.act)(async () => {
644
+ (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _taskList.default, {
645
+ hooks: HOOKS,
646
+ data: DATA
647
+ })), container);
648
+ });
649
+ const taskList = container.childNodes[0].childNodes[1];
650
+
651
+ // Launch first task
652
+ _react.fireEvent.click(taskList.childNodes[3].childNodes[0].childNodes[0].childNodes[0], {});
653
+
654
+ // Should be at Event Mode page
655
+ expect(container.childNodes[0].childNodes[0].childNodes[0].textContent).toEqual('Event Mode');
656
+ });
657
+ it('should go to the first page of a complete task if noTaskCYAs specified', async () => {
658
+ const ON_SUBMIT = (type, payload, onSuccess) => {
659
+ onSuccess();
660
+ };
661
+ const HOOKS = {
662
+ onSubmit: ON_SUBMIT
663
+ };
664
+ const TASK_LIST_WITH_NO_TASK_CYAS = JSON.parse(JSON.stringify(_taskList.default));
665
+ TASK_LIST_WITH_NO_TASK_CYAS.hub.noTaskCYAs = true;
666
+ TASK_LIST_WITH_NO_TASK_CYAS.pages[1].actions[0] = {
667
+ type: 'save',
668
+ complete: true
669
+ };
670
+ await (0, _testUtils.act)(async () => {
671
+ (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, TASK_LIST_WITH_NO_TASK_CYAS, {
672
+ hooks: HOOKS
673
+ })), container);
674
+ });
675
+ const taskList = container.childNodes[0].childNodes[1];
676
+
677
+ // Launch first task
678
+ _react.fireEvent.click(taskList.childNodes[3].childNodes[0].childNodes[0].childNodes[0], {});
679
+
680
+ // Fill first page and navigate
681
+ let newPage = container.childNodes[0].childNodes[0];
682
+ const fieldset = newPage.childNodes[1].childNodes[0];
683
+ setDate(fieldset.children[1], ['7', '7', '2022']);
684
+ _react.fireEvent.click(newPage.childNodes[2].childNodes[0], {});
685
+
686
+ // Fill second page
687
+ newPage = container.childNodes[0].childNodes[0];
688
+ // expect(newPage.childNodes[1].childNodes[0].childNodes[2].childNodes[0].childNodes[0]).toEqual('');
689
+ _react.fireEvent.click(newPage.childNodes[1].childNodes[0].childNodes[2].childNodes[0].childNodes[0], {});
690
+ _react.fireEvent.click(newPage.childNodes[2].childNodes[0], {});
691
+
692
+ // Launch same task again
693
+ _react.fireEvent.click(container.childNodes[0].childNodes[1].childNodes[3].childNodes[0].childNodes[0].childNodes[0], {});
694
+
695
+ // Should be on the first page
696
+ expect(container.childNodes[0].childNodes[0].childNodes[0].textContent).toEqual('Event Date');
697
+ });
698
+ it('should handle cancellation from a page', async () => {
699
+ const ON_CANCEL_CALLS = [];
700
+ const ON_CANCEL = () => {
701
+ ON_CANCEL_CALLS.push(undefined);
702
+ };
703
+ const HOOKS = {
704
+ onCancel: ON_CANCEL
705
+ };
706
+ await (0, _testUtils.act)(async () => {
707
+ (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _userProfile.default, {
708
+ data: _userProfileData.default,
709
+ hooks: HOOKS
710
+ })), container);
711
+ });
712
+ const form = checkForm(container);
713
+
714
+ // Navigate to the "Are you a civil servant?" page.
715
+ const hub = form.childNodes[1]; // Hub = CYA
716
+ const [,, civilServantList] = hub.childNodes;
717
+ const link = getChangeLink(civilServantList);
718
+ _react.fireEvent.click(link, {});
719
+
720
+ // Should already be answered "Yes", so simply click "Continue".
721
+ const page = form.childNodes[0];
722
+ const cancel = getCancelButton(page);
723
+ expect(ON_CANCEL_CALLS.length).toEqual(0);
724
+ _react.fireEvent.click(cancel, {});
725
+ expect(ON_CANCEL_CALLS.length).toEqual(1);
726
+ });
727
+ it('should navigate to a specific page at the beginning of a task if it is set as the firstPage of a task', async () => {
728
+ const ON_SUBMIT_CALLS = [];
729
+ const ON_SUBMIT = (type, payload, onSuccess) => {
730
+ ON_SUBMIT_CALLS.push(payload);
731
+ onSuccess();
732
+ };
733
+ const HOOKS = {
734
+ onSubmit: ON_SUBMIT
735
+ };
736
+ const TASK_LIST_NON_SEQUENTIAL = JSON.parse(JSON.stringify(_taskList.default));
737
+ TASK_LIST_NON_SEQUENTIAL.hub.nonSequential = true;
738
+ await (0, _testUtils.act)(async () => {
739
+ (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, TASK_LIST_NON_SEQUENTIAL, {
740
+ hooks: HOOKS
741
+ })), container);
742
+ });
743
+ const taskList = container.childNodes[0].childNodes[1];
744
+
745
+ // Launch first task of second section
746
+ const firstTask = taskList.childNodes[5].childNodes[0].childNodes[0].childNodes[0];
747
+ expect(firstTask.textContent).toEqual('People details');
748
+ _react.fireEvent.click(firstTask, {});
749
+
750
+ // Should be at Surname page
751
+ const newPage = container.childNodes[0].childNodes[0];
752
+ expect(newPage.childNodes[0].textContent).toEqual('Surname');
753
+ });
754
+ it('should handle page navigation correctly when hideBlankRows is true', async () => {
755
+ const ON_PAGE_CHANGE_CALLS = [];
756
+ const ON_PAGE_CHANGE = pageId => {
757
+ ON_PAGE_CHANGE_CALLS.push(pageId);
758
+ };
759
+ const HOOKS = {
760
+ onPageChange: ON_PAGE_CHANGE
761
+ };
762
+ await (0, _testUtils.act)(async () => {
763
+ (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _userProfile.default, {
764
+ data: _userProfileData.default,
765
+ hooks: HOOKS,
766
+ hideBlankRows: true
767
+ })), container);
768
+ });
769
+ const form = checkForm(container);
770
+
771
+ // Navigate to the "Add or change a line manager" page.
772
+ const hub = form.childNodes[1]; // Hub = CYA
773
+ const [,,, lineManagerList] = hub.childNodes;
774
+ const link = getChangeLink(lineManagerList);
775
+ expect(ON_PAGE_CHANGE_CALLS.length).toEqual(0);
776
+ _react.fireEvent.click(link, {});
777
+ expect(ON_PAGE_CHANGE_CALLS[0]).toEqual(_userProfile.default.pages[4].id);
778
+
779
+ // Should be on the page explaining what changing the line manager means.
780
+ const page = form.childNodes[0];
781
+ const pageHeading = page.childNodes[0];
782
+ expect(pageHeading.tagName).toEqual('H1');
783
+ expect(pageHeading.textContent).toEqual(_userProfile.default.pages[4].title);
784
+
785
+ // Now click on the "Continue" button on here.
786
+ const continueButton = getContinueButton(page);
787
+ expect(ON_PAGE_CHANGE_CALLS.length).toEqual(1);
788
+ _react.fireEvent.click(continueButton, {});
789
+ expect(ON_PAGE_CHANGE_CALLS.length).toEqual(2);
790
+ expect(ON_PAGE_CHANGE_CALLS[1]).toEqual(_userProfile.default.pages[5].id);
791
+ const newPageHeading = form.childNodes[0].childNodes[0];
792
+ expect(newPageHeading.tagName).toEqual('H1');
793
+ expect(newPageHeading.textContent).toEqual(_userProfile.default.pages[5].title);
794
+ });
1180
795
  });
1181
796
  });