@wise/dynamic-flow-client 3.5.0-experimental-6654c72 → 3.5.0-experimental-63c768d

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 (296) hide show
  1. package/build/common/makeHttpClient/makeHttpClient.spec.js +141 -0
  2. package/build/i18n/de.json +46 -46
  3. package/build/i18n/en.json +46 -46
  4. package/build/i18n/es.json +46 -46
  5. package/build/i18n/fr.json +46 -46
  6. package/build/i18n/hu.json +46 -46
  7. package/build/i18n/id.json +46 -46
  8. package/build/i18n/it.json +46 -46
  9. package/build/i18n/ja.json +46 -46
  10. package/build/i18n/pl.json +46 -46
  11. package/build/i18n/pt.json +46 -46
  12. package/build/i18n/ro.json +46 -46
  13. package/build/i18n/ru.json +46 -46
  14. package/build/i18n/th.json +46 -46
  15. package/build/i18n/tr.json +46 -46
  16. package/build/i18n/zh_CN.json +46 -46
  17. package/build/i18n/zh_HK.json +46 -46
  18. package/build/index.js +10 -0
  19. package/build/legacy/common/contexts/eventsContext/EventsContext.spec.js +58 -0
  20. package/build/legacy/common/contexts/featureContext/FeatureContext.spec.js +41 -0
  21. package/build/legacy/common/contexts/logContext/LogContext.spec.js +54 -0
  22. package/build/legacy/common/hooks/useDebouncedFunction/useDebouncedFunction.spec.js +59 -0
  23. package/build/legacy/common/hooks/useExternal/useExternal.spec.js +236 -0
  24. package/build/legacy/common/hooks/useStepPolling/useStepPolling.spec.js +288 -0
  25. package/build/legacy/common/utils/debounce.spec.js +72 -0
  26. package/build/legacy/common/utils/file-utils.spec.js +69 -0
  27. package/build/legacy/common/utils/id-utils.spec.js +12 -0
  28. package/build/legacy/common/utils/is-equal.spec.js +88 -0
  29. package/build/legacy/common/utils/mobile-utils.spec.js +71 -0
  30. package/build/legacy/common/validators/models/model-utils.spec.js +45 -0
  31. package/build/legacy/common/validators/models/model-validators.spec.js +647 -0
  32. package/build/legacy/common/validators/schemas/schema-validators.spec.js +157 -0
  33. package/build/legacy/common/validators/types/type-validators.spec.js +147 -0
  34. package/build/legacy/common/validators/validationFailures/validation-failures.spec.js +198 -0
  35. package/build/legacy/common/validators/validationFailures/validation-failures.utils.spec.js +145 -0
  36. package/build/legacy/common/validators/values/value-validators.spec.js +22 -0
  37. package/build/legacy/dynamicFlow/stories/dev-tools/DynamicFlow.story.js +78 -0
  38. package/build/legacy/dynamicFlow/stories/dev-tools/ErrorResponses.story.js +124 -0
  39. package/build/legacy/dynamicFlow/stories/dev-tools/Examples.story.js +25 -0
  40. package/build/legacy/dynamicFlow/stories/dev-tools/Features.story.js +33 -0
  41. package/build/legacy/dynamicFlow/stories/dev-tools/JsonSchemaForm.story.js +31 -0
  42. package/build/legacy/dynamicFlow/stories/dev-tools/RefreshOnChange.story.js +194 -0
  43. package/build/legacy/dynamicFlow/stories/dev-tools/SearchFeature.story.js +114 -0
  44. package/build/legacy/dynamicFlow/stories/dev-tools/ServerTest.story.js +44 -0
  45. package/build/legacy/dynamicFlow/stories/dev-tools/Upload.story.js +212 -0
  46. package/build/legacy/dynamicFlow/stories/dev-tools/ValidationAsync.story.js +156 -0
  47. package/build/legacy/dynamicFlow/stories/examples/ObjectConst.story.js +150 -0
  48. package/build/legacy/dynamicFlow/stories/fixtureHttpClient.js +117 -0
  49. package/build/legacy/dynamicFlow/stories/visual-tests/VisualTests.story.js +43 -0
  50. package/build/legacy/dynamicFlow/tests/Actions.spec.js +185 -0
  51. package/build/legacy/dynamicFlow/tests/AllOfSchema.spec.js +196 -0
  52. package/build/legacy/dynamicFlow/tests/AutocompleteHints.spec.js +59 -0
  53. package/build/legacy/dynamicFlow/tests/DynamicFlow.BackButton.spec.js +179 -0
  54. package/build/legacy/dynamicFlow/tests/DynamicFlow.search.spec.js +475 -0
  55. package/build/legacy/dynamicFlow/tests/DynamicFlow.spec.js +559 -0
  56. package/build/legacy/dynamicFlow/tests/DynamicImage.spec.js +287 -0
  57. package/build/legacy/dynamicFlow/tests/DynamicInstructions.spec.js +49 -0
  58. package/build/legacy/dynamicFlow/tests/HiddenSchemas.spec.js +307 -0
  59. package/build/legacy/dynamicFlow/tests/ModalLayout.spec.js +252 -0
  60. package/build/legacy/dynamicFlow/tests/MultiSelect.spec.js +327 -0
  61. package/build/legacy/dynamicFlow/tests/MultipleFileUploadSchema.spec.js +401 -0
  62. package/build/legacy/dynamicFlow/tests/ObjectSchema.spec.js +295 -0
  63. package/build/legacy/dynamicFlow/tests/OneOfSchema.spec.js +773 -0
  64. package/build/legacy/dynamicFlow/tests/PersistAsync.blob-schema.spec.js +331 -0
  65. package/build/legacy/dynamicFlow/tests/PersistAsync.string-schema.spec.js +389 -0
  66. package/build/legacy/dynamicFlow/tests/RefreshStepOnChange.debouncing.spec.js +273 -0
  67. package/build/legacy/dynamicFlow/tests/RefreshStepOnChange.spec.js +567 -0
  68. package/build/legacy/dynamicFlow/tests/RepeatableSchema.spec.js +977 -0
  69. package/build/legacy/dynamicFlow/tests/StepModel.spec.js +119 -0
  70. package/build/legacy/dynamicFlow/tests/ValidationAsync.spec.js +484 -0
  71. package/build/legacy/dynamicFlow/tests/ssr.spec.js +47 -0
  72. package/build/legacy/dynamicFlow/utils/responseParsers/response-parsers.spec.js +463 -0
  73. package/build/legacy/formControl/Select.spec.js +104 -0
  74. package/build/legacy/formControl/utils/getAutocompleteString.spec.js +30 -0
  75. package/build/legacy/formControl/utils/value-utils.spec.js +158 -0
  76. package/build/legacy/jsonSchemaForm/JsonSchemaForm.end-to-end.spec.js +563 -0
  77. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/index.js +1 -0
  78. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/repeatableSchema/utils/summary-utils.spec.js +909 -0
  79. package/build/legacy/jsonSchemaForm/genericSchema/GenericSchema.rtl.spec.js +55 -0
  80. package/build/legacy/jsonSchemaForm/schemaFormControl/SchemaFormControl.spec.js +312 -0
  81. package/build/legacy/jsonSchemaForm/schemaFormControl/utils/mapping-utils.spec.js +231 -0
  82. package/build/legacy/layout/button/DynamicButton.spec.js +152 -0
  83. package/build/legacy/layout/button/utils.spec.js +50 -0
  84. package/build/legacy/layout/icon/DynamicIcon.spec.js +20 -0
  85. package/build/legacy/layout/list/DynamicStatusList.spec.js +111 -0
  86. package/build/legacy/layout/loadingIndicator/DynamicLoadingIndicator.spec.js +25 -0
  87. package/build/legacy/layout/markdown/DynamicMarkdown.spec.js +58 -0
  88. package/build/legacy/layout/review/DynamicReview.spec.js +152 -0
  89. package/build/legacy/step/cameraStep/cameraCapture/CameraCapture.spec.js +432 -0
  90. package/build/legacy/test-utils/DynamicFlowProviders.js +19 -0
  91. package/build/legacy/test-utils/index.js +4 -0
  92. package/build/legacy/test-utils/legacy-utils.js +69 -0
  93. package/build/legacy/test-utils/log-utils.js +9 -0
  94. package/build/main.js +20 -20
  95. package/build/main.min.js +1 -1
  96. package/build/main.mjs +20 -20
  97. package/build/revamp/DynamicFlowCore.js +299 -0
  98. package/build/revamp/DynamicFlowWise.js +69 -0
  99. package/build/revamp/DynamicFlowWise.spec.js +105 -0
  100. package/build/revamp/domain/components/repeatableComponent/RepeatableComponent.spec.js +145 -0
  101. package/build/revamp/domain/components/searchComponent/SearchComponent.spec.js +327 -0
  102. package/build/revamp/domain/components/utils/debounce.spec.js +72 -0
  103. package/build/revamp/domain/components/utils/isPartialLocalValueMatch.spec.js +108 -0
  104. package/build/revamp/domain/features/persistAsync/getComponentPersistAsync.spec.js +199 -0
  105. package/build/revamp/domain/features/persistAsync/getInitialPersistedState.js +6 -0
  106. package/build/revamp/domain/features/persistAsync/getPerformPersistAsync.spec.js +280 -0
  107. package/build/revamp/domain/features/search/getPerformSearchFunction.js +104 -0
  108. package/build/revamp/domain/features/search/getPerformSearchFunction.spec.js +260 -0
  109. package/build/revamp/domain/features/summary/summary-utils.spec.js +110 -0
  110. package/build/revamp/domain/features/validation/spec-utils.js +16 -0
  111. package/build/revamp/domain/features/validation/validation-functions.spec.js +110 -0
  112. package/build/revamp/domain/features/validation/value-checks.spec.js +204 -0
  113. package/build/revamp/domain/features/validationAsync/getComponentValidationAsync.spec.js +177 -0
  114. package/build/revamp/domain/features/validationAsync/getInitialValidationState.js +5 -0
  115. package/build/revamp/domain/features/validationAsync/getPerformValidationAsync.spec.js +266 -0
  116. package/build/revamp/domain/mappers/layout/alertLayoutToComponent.js +12 -0
  117. package/build/revamp/domain/mappers/layout/boxLayoutToComponents.js +15 -0
  118. package/build/revamp/domain/mappers/layout/buttonLayoutToComponent.js +64 -0
  119. package/build/revamp/domain/mappers/layout/columnsLayoutToComponent.js +18 -0
  120. package/build/revamp/domain/mappers/layout/decisionLayoutToComponent.js +36 -0
  121. package/build/revamp/domain/mappers/layout/dividerLayoutToComponent.js +5 -0
  122. package/build/revamp/domain/mappers/layout/formLayoutToComponent.js +27 -0
  123. package/build/revamp/domain/mappers/layout/headingLayoutToComponent.js +13 -0
  124. package/build/revamp/domain/mappers/layout/imageLayoutToComponent.js +12 -0
  125. package/build/revamp/domain/mappers/layout/infoLayoutToComponent.js +12 -0
  126. package/build/revamp/domain/mappers/layout/instructionsLayoutToComponent.js +18 -0
  127. package/build/revamp/domain/mappers/layout/listLayoutToComponent.js +30 -0
  128. package/build/revamp/domain/mappers/layout/loadingIndicatorLayoutToComponent.js +5 -0
  129. package/build/revamp/domain/mappers/layout/markdownLayoutToComponent.js +12 -0
  130. package/build/revamp/domain/mappers/layout/modalLayoutToComponent.js +17 -0
  131. package/build/revamp/domain/mappers/layout/paragraphLayoutToComponent.js +12 -0
  132. package/build/revamp/domain/mappers/layout/reviewLayoutToComponent.js +51 -0
  133. package/build/revamp/domain/mappers/layout/searchLayoutToComponent.js +14 -0
  134. package/build/revamp/domain/mappers/layout/statusListLayoutToComponent.js +11 -0
  135. package/build/revamp/domain/mappers/mapLayoutToComponent.js +63 -0
  136. package/build/revamp/domain/mappers/mapSchemaToComponent.js +84 -0
  137. package/build/revamp/domain/mappers/mapSchemaToComponent.spec.js +197 -0
  138. package/build/revamp/domain/mappers/mapStepToComponent.js +143 -0
  139. package/build/revamp/domain/mappers/mapStepToComponent.spec.js +184 -0
  140. package/build/revamp/domain/mappers/schema/allOfSchemaToComponent.js +29 -0
  141. package/build/revamp/domain/mappers/schema/arraySchemaToComponent/arraySchemaToComponent.js +35 -0
  142. package/build/revamp/domain/mappers/schema/arraySchemaToComponent/arraySchemaToMultiUploadComponent.js +63 -0
  143. package/build/revamp/domain/mappers/schema/arraySchemaToComponent/arraySchemaToRepeatableComponent.js +65 -0
  144. package/build/revamp/domain/mappers/schema/blobSchemaToComponent.js +30 -0
  145. package/build/revamp/domain/mappers/schema/booleanSchemaToComponent.js +38 -0
  146. package/build/revamp/domain/mappers/schema/constSchemaToComponent.js +14 -0
  147. package/build/revamp/domain/mappers/schema/integerSchemaToComponent.js +36 -0
  148. package/build/revamp/domain/mappers/schema/numberSchemaToComponent.js +35 -0
  149. package/build/revamp/domain/mappers/schema/objectSchemaToComponent/objectSchemaToComponent.js +41 -0
  150. package/build/revamp/domain/mappers/schema/objectSchemaToComponent/objectSchemaToComponent.spec.js +165 -0
  151. package/build/revamp/domain/mappers/schema/oneOfSchemaToComponent/oneOfSchemaToComponent.js +67 -0
  152. package/build/revamp/domain/mappers/schema/oneOfSchemaToComponent/oneOfSchemaToComponent.spec.js +316 -0
  153. package/build/revamp/domain/mappers/schema/stringSchemaToComponent/stringSchemaToComponent.js +14 -0
  154. package/build/revamp/domain/mappers/schema/stringSchemaToComponent/stringSchemaToComponent.spec.js +220 -0
  155. package/build/revamp/domain/mappers/schema/stringSchemaToComponent/stringSchemaToDateInputComponent.js +37 -0
  156. package/build/revamp/domain/mappers/schema/stringSchemaToComponent/stringSchemaToTextInputComponent.js +45 -0
  157. package/build/revamp/domain/mappers/schema/stringSchemaToComponent/stringSchemaToUploadInputComponent.js +32 -0
  158. package/build/revamp/domain/mappers/schema/tests/test-utils.js +27 -0
  159. package/build/revamp/domain/mappers/schema/types.js +1 -0
  160. package/build/revamp/domain/mappers/schema/utils/getPersistAsyncInitialState.js +35 -0
  161. package/build/revamp/domain/mappers/schema/utils/getValidationAsyncInitialState.js +25 -0
  162. package/build/revamp/domain/mappers/schema/utils/mapCommonSchemaProps.js +28 -0
  163. package/build/revamp/domain/mappers/utils/getAutocompleteString.js +76 -0
  164. package/build/revamp/domain/mappers/utils/getAutocompleteString.spec.js +21 -0
  165. package/build/revamp/domain/mappers/utils/getRandomId.js +2 -0
  166. package/build/revamp/domain/mappers/utils/legacy-utils.js +53 -0
  167. package/build/revamp/flow/executeRefresh.js +97 -0
  168. package/build/revamp/flow/executeSubmission.js +152 -0
  169. package/build/revamp/flow/getResponseType.js +76 -0
  170. package/build/revamp/flow/response-utils.js +1 -1
  171. package/build/revamp/renderers/getRenderFunction.js +55 -0
  172. package/build/revamp/renderers/getSchemaErrorMessageFunction.js +90 -0
  173. package/build/revamp/renderers/mappers/alertComponentToProps.js +4 -0
  174. package/build/revamp/renderers/mappers/allOfComponentToProps.js +11 -0
  175. package/build/revamp/renderers/mappers/booleanInputComponentToProps.js +16 -0
  176. package/build/revamp/renderers/mappers/boxComponentToProps.js +4 -0
  177. package/build/revamp/renderers/mappers/buttonComponentToProps.js +14 -0
  178. package/build/revamp/renderers/mappers/columnsComponentToProps.js +4 -0
  179. package/build/revamp/renderers/mappers/componentToRendererProps.js +105 -0
  180. package/build/revamp/renderers/mappers/containerComponentToProps.js +4 -0
  181. package/build/revamp/renderers/mappers/dateInputComponentToProps.js +13 -0
  182. package/build/revamp/renderers/mappers/decisionComponentToProps.js +4 -0
  183. package/build/revamp/renderers/mappers/dividerComponentToProps.js +4 -0
  184. package/build/revamp/renderers/mappers/formComponentToProps.js +4 -0
  185. package/build/revamp/renderers/mappers/headingComponentToProps.js +11 -0
  186. package/build/revamp/renderers/mappers/hiddenComponentToProps.js +3 -0
  187. package/build/revamp/renderers/mappers/imageComponentToProps.js +11 -0
  188. package/build/revamp/renderers/mappers/instructionsComponentToProps.js +10 -0
  189. package/build/revamp/renderers/mappers/integerInputComponentToProps.js +13 -0
  190. package/build/revamp/renderers/mappers/loadingIndicatorComponentToProps.js +9 -0
  191. package/build/revamp/renderers/mappers/markdownComponentToProps.js +10 -0
  192. package/build/revamp/renderers/mappers/modalComponentToProps.js +10 -0
  193. package/build/revamp/renderers/mappers/multiUploadInputComponentToProps.js +24 -0
  194. package/build/revamp/renderers/mappers/numberInputComponentToProps.js +13 -0
  195. package/build/revamp/renderers/mappers/objectComponentToProps.js +11 -0
  196. package/build/revamp/renderers/mappers/paragraphComponentToProps.js +10 -0
  197. package/build/revamp/renderers/mappers/repeatableComponentToProps.js +40 -0
  198. package/build/revamp/renderers/mappers/reviewComponentToProps.js +11 -0
  199. package/build/revamp/renderers/mappers/searchComponentToProps.js +49 -0
  200. package/build/revamp/renderers/mappers/selectInputComponentToProps.js +29 -0
  201. package/build/revamp/renderers/mappers/statusListComponentToProps.js +10 -0
  202. package/build/revamp/renderers/mappers/textInputComponentToProps.js +13 -0
  203. package/build/revamp/renderers/mappers/uploadInputComponentToProps.js +16 -0
  204. package/build/revamp/renderers/mappers/utils/inputComponentToProps.js +27 -0
  205. package/build/revamp/renderers/step/ExternalConfirmationDialog.js +31 -0
  206. package/build/revamp/renderers/step/StepRenderer.js +29 -0
  207. package/build/revamp/renderers/step/useExternal.js +15 -0
  208. package/build/revamp/renderers/stepComponentToProps.js +9 -0
  209. package/build/revamp/stories/dev-tools/DynamicFlowRevamp.story.js +304 -0
  210. package/build/revamp/stories/dev-tools/EditableStep.story.js +71 -0
  211. package/build/revamp/stories/dev-tools/ErrorHandling.story.js +149 -0
  212. package/build/revamp/stories/dev-tools/External.story.js +83 -0
  213. package/build/revamp/stories/dev-tools/OneOf.Inititalisation.story.js +123 -0
  214. package/build/revamp/stories/dev-tools/PersistAsync.story.js +168 -0
  215. package/build/revamp/stories/dev-tools/RefreshOnChange.story.js +309 -0
  216. package/build/revamp/stories/dev-tools/RefreshOnChange.with.PersistAsync.story.js +1004 -0
  217. package/build/revamp/stories/dev-tools/ServerTest.story.js +81 -0
  218. package/build/revamp/stories/dev-tools/Upload.story.js +221 -0
  219. package/build/revamp/stories/dev-tools/ValidationAsync.story.js +161 -0
  220. package/build/revamp/stories/examples/ObjectConst.story.js +153 -0
  221. package/build/revamp/stories/examples/OneOfInitialisation.story.js +102 -0
  222. package/build/revamp/stories/utils/fixtureHttpClient.js +130 -0
  223. package/build/revamp/stories/utils/mockSearchHandler.js +125 -0
  224. package/build/revamp/stories/visual-tests/VisualTests.story.js +111 -0
  225. package/build/revamp/test-utils/component-utils.js +19 -0
  226. package/build/revamp/test-utils/step-utils.js +6 -0
  227. package/build/revamp/tests/ImageRenderer.spec.js +108 -0
  228. package/build/revamp/tests/InitialAction.spec.js +281 -0
  229. package/build/revamp/tests/InitialStep.spec.js +104 -0
  230. package/build/revamp/tests/Logging.spec.js +112 -0
  231. package/build/revamp/tests/OneOfInitialisation.spec.js +654 -0
  232. package/build/revamp/tests/RefreshOnChange.ResponseHandling.spec.js +322 -0
  233. package/build/revamp/tests/RefreshOnChange.with.Tabs.spec.js +390 -0
  234. package/build/revamp/tests/RefreshOnChangePreserve.spec.js +218 -0
  235. package/build/revamp/tests/Submission.ResponseHandling.spec.js +697 -0
  236. package/build/revamp/tests/Submission.spec.js +399 -0
  237. package/build/revamp/tests/legacy/HiddenSchemas.spec.js +312 -0
  238. package/build/revamp/tests/legacy/MultipleFileUploadSchema.spec.js +447 -0
  239. package/build/revamp/tests/legacy/PersistAsync.blob-schema.spec.js +339 -0
  240. package/build/revamp/tests/legacy/PersistAsync.string-schema.spec.js +385 -0
  241. package/build/revamp/tests/legacy/RefreshStepOnChange.debouncing.spec.js +235 -0
  242. package/build/revamp/tests/legacy/RefreshStepOnChange.spec.js +623 -0
  243. package/build/revamp/tests/legacy/ValidationAsync.spec.js +452 -0
  244. package/build/revamp/tests/legacy/useExternal.spec.js +235 -0
  245. package/build/revamp/utils/component-utils.spec.js +385 -0
  246. package/build/revamp/utils/findComponent.js +29 -0
  247. package/build/revamp/utils/findComponent.spec.js +92 -0
  248. package/build/revamp/utils/type-validators.spec.js +163 -0
  249. package/build/revamp/utils/useStableCallback.js +21 -0
  250. package/build/revamp/wise/renderers/DateInputRenderer.js +35 -0
  251. package/build/revamp/wise/renderers/DecisionRenderer.js +29 -0
  252. package/build/revamp/wise/renderers/DividerRenderer.js +10 -0
  253. package/build/revamp/wise/renderers/FormRenderer.js +21 -0
  254. package/build/revamp/wise/renderers/FormSectionRenderer.js +16 -0
  255. package/build/revamp/wise/renderers/HeadingRenderer.js +57 -0
  256. package/build/revamp/wise/renderers/ImageRenderer.js +111 -0
  257. package/build/revamp/wise/renderers/InstructionsRenderer.js +34 -0
  258. package/build/revamp/wise/renderers/IntegerInputRenderer.js +38 -0
  259. package/build/revamp/wise/renderers/LoadingIndicatorRenderer.js +11 -0
  260. package/build/revamp/wise/renderers/MarkdownRenderer.js +22 -0
  261. package/build/revamp/wise/renderers/ModalRenderer.js +25 -0
  262. package/build/revamp/wise/renderers/MultiUploadInputRenderer.js +74 -0
  263. package/build/revamp/wise/renderers/NumberInputRenderer.js +38 -0
  264. package/build/revamp/wise/renderers/ParagraphRenderer.js +44 -0
  265. package/build/revamp/wise/renderers/RepeatableRenderer.js +58 -0
  266. package/build/revamp/wise/renderers/ReviewRenderer.js +46 -0
  267. package/build/revamp/wise/renderers/SearchRenderer.js +63 -0
  268. package/build/revamp/wise/renderers/SelectInputRenderer/OptionMedia.js +27 -0
  269. package/build/revamp/wise/renderers/SelectInputRenderer/RadioInputRendererComponent.js +25 -0
  270. package/build/revamp/wise/renderers/SelectInputRenderer/SelectInputRenderer.js +30 -0
  271. package/build/revamp/wise/renderers/SelectInputRenderer/SelectInputRendererComponent.js +56 -0
  272. package/build/revamp/wise/renderers/SelectInputRenderer/SelectTriggerMedia.js +27 -0
  273. package/build/revamp/wise/renderers/SelectInputRenderer/TabInputRendererComponent.js +33 -0
  274. package/build/revamp/wise/renderers/StatusListRenderer.js +32 -0
  275. package/build/revamp/wise/renderers/TextInputRenderer.js +35 -0
  276. package/build/revamp/wise/renderers/UploadInputRenderer.js +136 -0
  277. package/build/revamp/wise/renderers/components/UploadFieldInput.js +25 -0
  278. package/build/revamp/wise/renderers/components/VariableDateInput.js +30 -0
  279. package/build/revamp/wise/renderers/components/VariableTextInput.js +69 -0
  280. package/build/revamp/wise/renderers/components/icon/DynamicIcon.js +17 -0
  281. package/build/revamp/wise/renderers/components/icon/FlagIcon.js +198 -0
  282. package/build/revamp/wise/renderers/components/icon/NamedIcon.js +19 -0
  283. package/build/revamp/wise/renderers/components/icon/NavigationOptionMedia.js +31 -0
  284. package/build/revamp/wise/renderers/getWiseRenderers.js +57 -0
  285. package/build/revamp/wise/renderers/hooks/useSnackBarIfAvailable.js +6 -0
  286. package/build/revamp/wise/renderers/utils/file-utils.js +70 -0
  287. package/build/revamp/wise/renderers/utils/getRandomId.js +2 -0
  288. package/build/revamp/wise/renderers/utils/input-utils.js +6 -0
  289. package/build/revamp/wise/renderers/utils/value-utils.js +23 -0
  290. package/build/revamp/wise/renderers/utils/value-utils.spec.js +33 -0
  291. package/build/revamp/wise/renderers/validators/type-validators.js +15 -0
  292. package/build/test-utils/NeptuneProviders.js +23 -0
  293. package/build/test-utils/fetch-utils.js +104 -0
  294. package/build/test-utils/index.js +2 -0
  295. package/build/test-utils/rtl-utils.js +20 -0
  296. package/package.json +3 -2
@@ -0,0 +1,236 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ import { jsx as _jsx } from "react/jsx-runtime";
38
+ import { fireEvent, screen, waitFor } from '@testing-library/react';
39
+ import DynamicFlow from '../../../dynamicFlow/DynamicFlow';
40
+ import { renderWithProviders } from '../../../test-utils';
41
+ import { getMockHttpClient, respondWith } from '../../../../test-utils';
42
+ var mockWindowOpenSuccess = function () {
43
+ return window.open.mockImplementation(function () { return 'fake window'; });
44
+ };
45
+ var mockWindonOpenFail = function () { return window.open.mockImplementation(function () { return null; }); };
46
+ describe('useExternal', function () {
47
+ var mockHttpClient = jest.fn(function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
48
+ return [2 /*return*/, Promise.resolve(new Response(''))];
49
+ }); }); });
50
+ var onError = jest.fn();
51
+ var onCompletion = jest.fn();
52
+ var renderComponent = function (step) {
53
+ return renderWithProviders(_jsx(DynamicFlow, { flowId: "the-flow-id", initialStep: step, httpClient: mockHttpClient, onCompletion: onCompletion, onError: onError }));
54
+ };
55
+ afterEach(function () {
56
+ mockHttpClient.mockClear();
57
+ jest.restoreAllMocks();
58
+ });
59
+ describe('Given a step with an "external" property', function () {
60
+ var step = {
61
+ type: 'form',
62
+ id: 'external',
63
+ title: 'Step Title',
64
+ external: { url: 'https://third-party.website' },
65
+ layout: [{ type: 'paragraph', text: 'This is a paragraph in the step layout' }],
66
+ schemas: []
67
+ };
68
+ it('attempts to open the specified URL, but ONLY ONCE', function () { return __awaiter(void 0, void 0, void 0, function () {
69
+ return __generator(this, function (_a) {
70
+ switch (_a.label) {
71
+ case 0:
72
+ jest.spyOn(window, 'open');
73
+ mockWindowOpenSuccess();
74
+ renderComponent(step);
75
+ expect(window.open).toHaveBeenCalledTimes(1);
76
+ expect(window.open).toHaveBeenCalledWith('https://third-party.website', '_blank');
77
+ return [4 /*yield*/, waitFor(function () {
78
+ expect(window.open).toHaveBeenCalledTimes(1);
79
+ })];
80
+ case 1:
81
+ _a.sent();
82
+ return [2 /*return*/];
83
+ }
84
+ });
85
+ }); });
86
+ describe('when the window/tab fails to open', function () {
87
+ it('displays a confirmation UI (ExternalConfirmationStep)', function () { return __awaiter(void 0, void 0, void 0, function () {
88
+ return __generator(this, function (_a) {
89
+ switch (_a.label) {
90
+ case 0:
91
+ jest.spyOn(window, 'open');
92
+ mockWindonOpenFail();
93
+ renderComponent(step);
94
+ return [4 /*yield*/, expect(screen.findByText('Please confirm')).resolves.toBeInTheDocument()];
95
+ case 1:
96
+ _a.sent();
97
+ return [2 /*return*/];
98
+ }
99
+ });
100
+ }); });
101
+ describe('when the confirmation button is clicked', function () {
102
+ it('opens the external url and displays the step layout', function () {
103
+ jest.spyOn(window, 'open');
104
+ mockWindonOpenFail();
105
+ renderComponent(step);
106
+ expect(screen.getByText('Please confirm')).toBeInTheDocument();
107
+ var confirmButton = screen.getByText('Open in new tab');
108
+ window.open.mockClear();
109
+ fireEvent.click(confirmButton);
110
+ expect(window.open).toHaveBeenCalledTimes(1);
111
+ expect(screen.getByText('This is a paragraph in the step layout')).toBeInTheDocument();
112
+ });
113
+ });
114
+ describe('when the cancel button is clicked', function () {
115
+ it('does not open the external url and displays the step layout', function () {
116
+ jest.spyOn(window, 'open');
117
+ mockWindonOpenFail();
118
+ renderComponent(step);
119
+ expect(screen.getByText('Please confirm')).toBeInTheDocument();
120
+ var confirmButton = screen.getByText('Cancel');
121
+ window.open.mockClear();
122
+ fireEvent.click(confirmButton);
123
+ expect(window.open).toHaveBeenCalledTimes(0);
124
+ expect(screen.getByText('This is a paragraph in the step layout')).toBeInTheDocument();
125
+ });
126
+ });
127
+ describe('when a subsequent step with external is loaded using the same URL', function () {
128
+ var mockClient = getMockHttpClient({
129
+ '/external': function () { return __awaiter(void 0, void 0, void 0, function () {
130
+ return __generator(this, function (_a) {
131
+ return [2 /*return*/, respondWith({
132
+ type: 'form',
133
+ id: 'external',
134
+ title: 'External Step',
135
+ external: { url: 'https://third-party.website' },
136
+ layout: [
137
+ { type: 'paragraph', text: 'This is a paragraph in the external step layout' },
138
+ { type: 'button', action: { url: '/layout', title: 'Continue to layout step' } },
139
+ ],
140
+ schemas: []
141
+ })];
142
+ });
143
+ }); },
144
+ '/layout': function () { return __awaiter(void 0, void 0, void 0, function () {
145
+ return __generator(this, function (_a) {
146
+ return [2 /*return*/, respondWith({
147
+ type: 'form',
148
+ id: 'layout',
149
+ title: 'Layout Step',
150
+ layout: [
151
+ { type: 'paragraph', text: 'This is a paragraph in the layout step layout' },
152
+ {
153
+ type: 'button',
154
+ action: { url: '/external', title: 'Continue to external step' }
155
+ },
156
+ ],
157
+ schemas: []
158
+ })];
159
+ });
160
+ }); }
161
+ });
162
+ it('displays the confirmation UI (ExternalConfirmationStep) a second time', function () { return __awaiter(void 0, void 0, void 0, function () {
163
+ var confirmButton;
164
+ return __generator(this, function (_a) {
165
+ switch (_a.label) {
166
+ case 0:
167
+ jest.spyOn(window, 'open');
168
+ mockWindonOpenFail();
169
+ renderWithProviders(_jsx(DynamicFlow, { flowId: "the-flow-id", initialAction: { method: 'GET', url: '/external' }, httpClient: mockClient, onCompletion: onCompletion, onError: onError }));
170
+ return [4 /*yield*/, expect(screen.findByText('Please confirm')).resolves.toBeInTheDocument()];
171
+ case 1:
172
+ _a.sent();
173
+ confirmButton = screen.getByText('Cancel');
174
+ window.open.mockClear();
175
+ fireEvent.click(confirmButton);
176
+ expect(window.open).toHaveBeenCalledTimes(0);
177
+ expect(screen.getByText('This is a paragraph in the external step layout')).toBeInTheDocument();
178
+ fireEvent.click(screen.getByText(/continue to layout step/i));
179
+ return [4 /*yield*/, expect(screen.findByText('Layout Step')).resolves.toBeInTheDocument()];
180
+ case 2:
181
+ _a.sent();
182
+ fireEvent.click(screen.getByText(/continue to external step/i));
183
+ return [4 /*yield*/, expect(screen.findByText('Please confirm')).resolves.toBeInTheDocument()];
184
+ case 3:
185
+ _a.sent();
186
+ return [2 /*return*/];
187
+ }
188
+ });
189
+ }); });
190
+ });
191
+ });
192
+ describe('when the window/tab opens successfully', function () {
193
+ it('displays the step normally', function () { return __awaiter(void 0, void 0, void 0, function () {
194
+ return __generator(this, function (_a) {
195
+ switch (_a.label) {
196
+ case 0:
197
+ jest.spyOn(window, 'open');
198
+ mockWindowOpenSuccess();
199
+ renderComponent(step);
200
+ return [4 /*yield*/, expect(screen.findByText('This is a paragraph in the step layout')).resolves.toBeInTheDocument()];
201
+ case 1:
202
+ _a.sent();
203
+ expect(screen.queryByText('Please confirm')).not.toBeInTheDocument();
204
+ return [2 /*return*/];
205
+ }
206
+ });
207
+ }); });
208
+ });
209
+ });
210
+ describe('Given a step with a malformed "external" property', function () {
211
+ var step = {
212
+ type: 'form',
213
+ id: 'external',
214
+ title: 'Step Title',
215
+ external: { wrong: 'banana' },
216
+ layout: [{ type: 'paragraph', text: 'This is a paragraph in the step layout' }],
217
+ schemas: []
218
+ };
219
+ it('does not attempt to open a new tab', function () { return __awaiter(void 0, void 0, void 0, function () {
220
+ return __generator(this, function (_a) {
221
+ switch (_a.label) {
222
+ case 0:
223
+ jest.spyOn(window, 'open');
224
+ mockWindowOpenSuccess();
225
+ renderComponent(step);
226
+ return [4 /*yield*/, waitFor(function () {
227
+ expect(window.open).not.toHaveBeenCalled();
228
+ })];
229
+ case 1:
230
+ _a.sent();
231
+ return [2 /*return*/];
232
+ }
233
+ });
234
+ }); });
235
+ });
236
+ });
@@ -0,0 +1,288 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ import { jsx as _jsx } from "react/jsx-runtime";
38
+ /* eslint-disable @typescript-eslint/require-await */
39
+ import { render, waitFor } from '@testing-library/react';
40
+ import DynamicFlow from '../../../dynamicFlow/DynamicFlow';
41
+ import { TestContextProviders } from '../../../test-utils';
42
+ describe('useStepPolling', function () {
43
+ var mockHttpClient = jest.fn(function (input, init) { return Promise.resolve(new Response('')); });
44
+ var onError = jest.fn();
45
+ var onCompletion = jest.fn();
46
+ function renderComponent(step) {
47
+ render(_jsx(TestContextProviders, { children: _jsx(DynamicFlow, { flowId: "the-flow-id", initialStep: step, httpClient: mockHttpClient, onCompletion: onCompletion, onError: onError }) }));
48
+ }
49
+ beforeEach(function () {
50
+ jest.useFakeTimers();
51
+ });
52
+ afterEach(function () {
53
+ mockHttpClient.mockClear();
54
+ onError.mockClear();
55
+ onCompletion.mockClear();
56
+ jest.restoreAllMocks();
57
+ jest.useRealTimers();
58
+ });
59
+ var FIVE_SECS = 5 * 1000;
60
+ var MAX_ATTEMPTS = 5;
61
+ describe('Given a step with a polling property', function () {
62
+ var POLLING_URL = 'https://our-polling-url/';
63
+ var step = {
64
+ type: 'form',
65
+ polling: {
66
+ url: POLLING_URL,
67
+ interval: 5,
68
+ maxAttempts: MAX_ATTEMPTS,
69
+ onError: { action: { url: '/on-error' } }
70
+ }
71
+ };
72
+ it('makes a requests to the speficied URL with the given interval', function () { return __awaiter(void 0, void 0, void 0, function () {
73
+ return __generator(this, function (_a) {
74
+ renderComponent(step);
75
+ jest.advanceTimersByTime(FIVE_SECS / 2);
76
+ expect(mockHttpClient).not.toHaveBeenCalled();
77
+ jest.advanceTimersByTime(FIVE_SECS / 2);
78
+ expect(mockHttpClient).toHaveBeenLastCalledWith(POLLING_URL);
79
+ return [2 /*return*/];
80
+ });
81
+ }); });
82
+ describe('when the polling response contains an action', function () {
83
+ describe('a submitting action', function () {
84
+ it('executes the action, loading a new step, and stops polling', function () { return __awaiter(void 0, void 0, void 0, function () {
85
+ return __generator(this, function (_a) {
86
+ switch (_a.label) {
87
+ case 0:
88
+ renderComponent(step);
89
+ mockHttpClient.mockImplementation(function (input) { return __awaiter(void 0, void 0, void 0, function () {
90
+ return __generator(this, function (_a) {
91
+ return [2 /*return*/, input === POLLING_URL
92
+ ? new Response(JSON.stringify({
93
+ action: {
94
+ url: '/success',
95
+ method: 'POST',
96
+ data: { 'action-data': '1234567890' }
97
+ }
98
+ }))
99
+ : new Response("{}")];
100
+ });
101
+ }); });
102
+ jest.advanceTimersByTime(FIVE_SECS);
103
+ return [4 /*yield*/, waitFor(function () {
104
+ expect(mockHttpClient).toHaveBeenLastCalledWith('/success', expect.objectContaining({ body: "{\"action-data\":\"1234567890\"}" }));
105
+ })];
106
+ case 1:
107
+ _a.sent();
108
+ // Stops polling
109
+ mockHttpClient.mockClear();
110
+ jest.advanceTimersByTime(FIVE_SECS * 2);
111
+ expect(mockHttpClient).not.toHaveBeenCalled();
112
+ return [2 /*return*/];
113
+ }
114
+ });
115
+ }); });
116
+ });
117
+ describe('an exit action', function () {
118
+ it('executes the action, exiting the flow, and stops polling', function () { return __awaiter(void 0, void 0, void 0, function () {
119
+ return __generator(this, function (_a) {
120
+ switch (_a.label) {
121
+ case 0:
122
+ renderComponent(step);
123
+ mockHttpClient.mockImplementation(function (input) { return __awaiter(void 0, void 0, void 0, function () {
124
+ return __generator(this, function (_a) {
125
+ return [2 /*return*/, input === POLLING_URL
126
+ ? new Response("{\"action\":{\"exit\":true,\"result\":{\"action-result\":\"0987654321\"}}}")
127
+ : new Response("{}")];
128
+ });
129
+ }); });
130
+ jest.advanceTimersByTime(FIVE_SECS);
131
+ expect(mockHttpClient).toHaveBeenLastCalledWith(POLLING_URL);
132
+ return [4 /*yield*/, waitFor(function () {
133
+ expect(onCompletion).toHaveBeenLastCalledWith({ 'action-result': '0987654321' });
134
+ })];
135
+ case 1:
136
+ _a.sent();
137
+ // Stops polling
138
+ mockHttpClient.mockClear();
139
+ jest.advanceTimersByTime(FIVE_SECS * 2);
140
+ expect(mockHttpClient).not.toHaveBeenCalled();
141
+ return [2 /*return*/];
142
+ }
143
+ });
144
+ }); });
145
+ }); //
146
+ });
147
+ describe("when the polling response doesn't contain an action", function () {
148
+ describe("...temporarily", function () {
149
+ it('continues polling until the response contains an action', function () { return __awaiter(void 0, void 0, void 0, function () {
150
+ return __generator(this, function (_a) {
151
+ switch (_a.label) {
152
+ case 0:
153
+ renderComponent(step);
154
+ mockHttpClient.mockImplementation(function (input) { return __awaiter(void 0, void 0, void 0, function () {
155
+ return __generator(this, function (_a) {
156
+ return [2 /*return*/, input === POLLING_URL
157
+ ? new Response('please wait...', { status: 202 })
158
+ : new Response("{}")];
159
+ });
160
+ }); });
161
+ jest.advanceTimersByTime(FIVE_SECS);
162
+ return [4 /*yield*/, waitFor(function () {
163
+ expect(mockHttpClient).toHaveBeenCalledTimes(1);
164
+ })];
165
+ case 1:
166
+ _a.sent();
167
+ expect(mockHttpClient).toHaveBeenLastCalledWith(POLLING_URL);
168
+ jest.advanceTimersByTime(FIVE_SECS);
169
+ return [4 /*yield*/, waitFor(function () {
170
+ expect(mockHttpClient).toHaveBeenCalledTimes(2);
171
+ })];
172
+ case 2:
173
+ _a.sent();
174
+ expect(mockHttpClient).toHaveBeenLastCalledWith(POLLING_URL);
175
+ mockHttpClient.mockImplementation(function (input) { return __awaiter(void 0, void 0, void 0, function () {
176
+ return __generator(this, function (_a) {
177
+ return [2 /*return*/, input === POLLING_URL
178
+ ? new Response("{\"action\":{\"url\":\"/success\",\"data\":{\"action-data\":\"1234567890\"}}}")
179
+ : new Response("{}")];
180
+ });
181
+ }); });
182
+ jest.advanceTimersByTime(FIVE_SECS);
183
+ return [4 /*yield*/, waitFor(function () {
184
+ expect(mockHttpClient).toHaveBeenLastCalledWith('/success', expect.objectContaining({ body: "{\"action-data\":\"1234567890\"}" }));
185
+ })];
186
+ case 3:
187
+ _a.sent();
188
+ return [2 /*return*/];
189
+ }
190
+ });
191
+ }); });
192
+ });
193
+ describe("...permanently", function () {
194
+ it('continues polling until maxAttempts is reached, then onError.action is triggered', function () { return __awaiter(void 0, void 0, void 0, function () {
195
+ var _loop_1, i;
196
+ return __generator(this, function (_a) {
197
+ switch (_a.label) {
198
+ case 0:
199
+ renderComponent(step);
200
+ mockHttpClient.mockImplementation(function (input) { return __awaiter(void 0, void 0, void 0, function () {
201
+ return __generator(this, function (_a) {
202
+ return [2 /*return*/, input === POLLING_URL
203
+ ? new Response('this will never change', { status: 202 })
204
+ : new Response("{}")];
205
+ });
206
+ }); });
207
+ _loop_1 = function (i) {
208
+ return __generator(this, function (_b) {
209
+ switch (_b.label) {
210
+ case 0:
211
+ jest.advanceTimersByTime(FIVE_SECS);
212
+ return [4 /*yield*/, waitFor(function () {
213
+ expect(mockHttpClient).toHaveBeenCalledTimes(i + 1);
214
+ // eslint-disable-next-line testing-library/no-wait-for-multiple-assertions
215
+ expect(mockHttpClient).toHaveBeenLastCalledWith(POLLING_URL);
216
+ })];
217
+ case 1:
218
+ _b.sent();
219
+ return [2 /*return*/];
220
+ }
221
+ });
222
+ };
223
+ i = 0;
224
+ _a.label = 1;
225
+ case 1:
226
+ if (!(i < MAX_ATTEMPTS)) return [3 /*break*/, 4];
227
+ return [5 /*yield**/, _loop_1(i)];
228
+ case 2:
229
+ _a.sent();
230
+ _a.label = 3;
231
+ case 3:
232
+ i++;
233
+ return [3 /*break*/, 1];
234
+ case 4:
235
+ jest.advanceTimersByTime(FIVE_SECS);
236
+ return [4 /*yield*/, waitFor(function () {
237
+ expect(mockHttpClient).toHaveBeenLastCalledWith('/on-error', expect.anything());
238
+ })];
239
+ case 5:
240
+ _a.sent();
241
+ return [2 /*return*/];
242
+ }
243
+ });
244
+ }); });
245
+ });
246
+ });
247
+ describe('when the polling response contains an error status code', function () {
248
+ it('executes the onError.action', function () { return __awaiter(void 0, void 0, void 0, function () {
249
+ return __generator(this, function (_a) {
250
+ switch (_a.label) {
251
+ case 0:
252
+ renderComponent(step);
253
+ mockHttpClient.mockImplementation(function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
254
+ return [2 /*return*/, new Response(null, { status: 400 })];
255
+ }); }); });
256
+ jest.advanceTimersByTime(FIVE_SECS);
257
+ return [4 /*yield*/, waitFor(function () {
258
+ expect(mockHttpClient).toHaveBeenLastCalledWith('/on-error', expect.anything());
259
+ })];
260
+ case 1:
261
+ _a.sent();
262
+ return [2 /*return*/];
263
+ }
264
+ });
265
+ }); });
266
+ });
267
+ describe('when the polling request fails', function () {
268
+ it('executes the onError.action', function () { return __awaiter(void 0, void 0, void 0, function () {
269
+ return __generator(this, function (_a) {
270
+ switch (_a.label) {
271
+ case 0:
272
+ renderComponent(step);
273
+ mockHttpClient.mockImplementation(function (input) { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
274
+ return [2 /*return*/, input === POLLING_URL ? new Response("{}", { status: 500 }) : new Response("{}")];
275
+ }); }); });
276
+ jest.advanceTimersByTime(FIVE_SECS);
277
+ return [4 /*yield*/, waitFor(function () {
278
+ expect(mockHttpClient).toHaveBeenLastCalledWith('/on-error', expect.anything());
279
+ })];
280
+ case 1:
281
+ _a.sent();
282
+ return [2 /*return*/];
283
+ }
284
+ });
285
+ }); });
286
+ });
287
+ });
288
+ });
@@ -0,0 +1,72 @@
1
+ import { debounce } from './debounce';
2
+ describe('debounce', function () {
3
+ beforeAll(function () {
4
+ jest.useFakeTimers();
5
+ });
6
+ afterAll(function () {
7
+ jest.useRealTimers();
8
+ });
9
+ it('will delay function execution until the wait period has passed', function () {
10
+ var fn = jest.fn();
11
+ var debouncedFn = debounce(fn, 5);
12
+ debouncedFn();
13
+ expect(fn).toHaveBeenCalledTimes(0);
14
+ jest.advanceTimersByTime(5);
15
+ expect(fn).toHaveBeenCalledTimes(1);
16
+ });
17
+ it('will call function with provided arguments', function () {
18
+ var fn = jest.fn();
19
+ var debouncedFn = debounce(fn, 5);
20
+ debouncedFn('a', 'b', 'c');
21
+ jest.advanceTimersByTime(5);
22
+ expect(fn).toHaveBeenCalledTimes(1);
23
+ expect(fn).toHaveBeenCalledWith('a', 'b', 'c');
24
+ });
25
+ it('will reset the wait period and ignore previous executions if called within the wait period', function () {
26
+ var fn = jest.fn();
27
+ var debouncedFn = debounce(fn, 5);
28
+ debouncedFn(1, 2, 3);
29
+ jest.advanceTimersByTime(4);
30
+ debouncedFn('a', 'b', 'c');
31
+ jest.advanceTimersByTime(5);
32
+ expect(fn).toHaveBeenCalledTimes(1);
33
+ expect(fn).toHaveBeenCalledWith('a', 'b', 'c');
34
+ });
35
+ it('will call the same function twice if invoked after the wait period', function () {
36
+ var fn = jest.fn();
37
+ var debouncedFn = debounce(fn, 5);
38
+ debouncedFn();
39
+ jest.advanceTimersByTime(5);
40
+ debouncedFn();
41
+ jest.advanceTimersByTime(5);
42
+ expect(fn).toHaveBeenCalledTimes(2);
43
+ });
44
+ describe('flush', function () {
45
+ it('will call the callback immediately', function () {
46
+ var fn = jest.fn();
47
+ var debouncedFn = debounce(fn, 5);
48
+ debouncedFn();
49
+ debouncedFn.flush();
50
+ expect(fn).toHaveBeenCalledTimes(1);
51
+ });
52
+ it('uses the last passed args', function () {
53
+ var fn = jest.fn();
54
+ var debouncedFn = debounce(fn, 5);
55
+ debouncedFn(1, 2, 3);
56
+ debouncedFn('a', 'b', 'c');
57
+ debouncedFn.flush();
58
+ expect(fn).toHaveBeenCalledTimes(1);
59
+ expect(fn).toHaveBeenCalledWith('a', 'b', 'c');
60
+ });
61
+ });
62
+ describe('cancel', function () {
63
+ it('cancels any waiting callback', function () {
64
+ var fn = jest.fn();
65
+ var debouncedFn = debounce(fn, 5);
66
+ debouncedFn();
67
+ debouncedFn.cancel();
68
+ jest.advanceTimersByTime(5);
69
+ expect(fn).toHaveBeenCalledTimes(0);
70
+ });
71
+ });
72
+ });
@@ -0,0 +1,69 @@
1
+ import { Status } from '@transferwise/components';
2
+ import { areFilesSame } from './file-utils';
3
+ var constructFile = function (_a) {
4
+ var _b = _a.id, id = _b === void 0 ? 123 : _b, _c = _a.status, status = _c === void 0 ? Status.SUCCEEDED : _c;
5
+ return ({ id: id, status: status });
6
+ };
7
+ describe('Given a set of utility functions for file', function () {
8
+ describe('when checking if two lists of files are same', function () {
9
+ it('should return true if empty file list is compared', function () {
10
+ expect(areFilesSame([], [])).toBeTruthy();
11
+ });
12
+ it('should return false comparing file with different ids', function () {
13
+ var file = constructFile({ id: 123 });
14
+ var anotherFile = constructFile({ id: 234 });
15
+ expect(areFilesSame([anotherFile], [file])).toBeFalsy();
16
+ });
17
+ it('should return true comparing file with same ids', function () {
18
+ var file = constructFile({ id: 123 });
19
+ var anotherFile = constructFile({ id: 123 });
20
+ expect(areFilesSame([anotherFile], [file])).toBeTruthy();
21
+ });
22
+ it('should return false comparing file with same ids but different status', function () {
23
+ var anotherFile = constructFile({ id: 123, status: Status.FAILED });
24
+ var file = constructFile({ id: 123, status: Status.SUCCEEDED });
25
+ expect(areFilesSame([anotherFile], [file])).toBeFalsy();
26
+ });
27
+ it('should return false comparing respective file ids with their status status', function () {
28
+ var fileUpdate1 = constructFile({ id: 111, status: Status.FAILED });
29
+ var fileUpdate2 = constructFile({ id: 222, status: Status.SUCCEEDED });
30
+ var fileUpdate3 = constructFile({ id: 333, status: Status.SUCCEEDED });
31
+ var file1 = constructFile({ id: 111, status: Status.PENDING });
32
+ var file2 = constructFile({ id: 222, status: Status.SUCCEEDED });
33
+ var file3 = constructFile({ id: 333, status: Status.SUCCEEDED });
34
+ expect(areFilesSame([fileUpdate1, fileUpdate2, fileUpdate3], [file1, file2, file3])).toBeFalsy();
35
+ });
36
+ describe('should only consider id and status in similarity comparison', function () {
37
+ it('when files are same', function () {
38
+ var anotherFile = {
39
+ id: 111,
40
+ status: Status.SUCCEEDED,
41
+ url: 'www.something.com/file.png',
42
+ filename: 'filename1.png'
43
+ };
44
+ var file = {
45
+ id: 111,
46
+ status: Status.SUCCEEDED,
47
+ url: 'www.somethingElse.com/file.png',
48
+ filename: 'filename2.png'
49
+ };
50
+ expect(areFilesSame([anotherFile], [file])).toBeTruthy();
51
+ });
52
+ it('when files are different', function () {
53
+ var anotherFile = {
54
+ id: 111,
55
+ status: Status.SUCCEEDED,
56
+ url: 'www.something.com/file.png',
57
+ filename: 'filename.png'
58
+ };
59
+ var file = {
60
+ id: 112,
61
+ status: Status.SUCCEEDED,
62
+ url: 'www.something.com/file.png',
63
+ filename: 'filename.png'
64
+ };
65
+ expect(areFilesSame([anotherFile], [file])).toBeFalsy();
66
+ });
67
+ });
68
+ });
69
+ });