@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.
- package/build/common/makeHttpClient/makeHttpClient.spec.js +141 -0
- package/build/i18n/de.json +46 -46
- package/build/i18n/en.json +46 -46
- package/build/i18n/es.json +46 -46
- package/build/i18n/fr.json +46 -46
- package/build/i18n/hu.json +46 -46
- package/build/i18n/id.json +46 -46
- package/build/i18n/it.json +46 -46
- package/build/i18n/ja.json +46 -46
- package/build/i18n/pl.json +46 -46
- package/build/i18n/pt.json +46 -46
- package/build/i18n/ro.json +46 -46
- package/build/i18n/ru.json +46 -46
- package/build/i18n/th.json +46 -46
- package/build/i18n/tr.json +46 -46
- package/build/i18n/zh_CN.json +46 -46
- package/build/i18n/zh_HK.json +46 -46
- package/build/index.js +10 -0
- package/build/legacy/common/contexts/eventsContext/EventsContext.spec.js +58 -0
- package/build/legacy/common/contexts/featureContext/FeatureContext.spec.js +41 -0
- package/build/legacy/common/contexts/logContext/LogContext.spec.js +54 -0
- package/build/legacy/common/hooks/useDebouncedFunction/useDebouncedFunction.spec.js +59 -0
- package/build/legacy/common/hooks/useExternal/useExternal.spec.js +236 -0
- package/build/legacy/common/hooks/useStepPolling/useStepPolling.spec.js +288 -0
- package/build/legacy/common/utils/debounce.spec.js +72 -0
- package/build/legacy/common/utils/file-utils.spec.js +69 -0
- package/build/legacy/common/utils/id-utils.spec.js +12 -0
- package/build/legacy/common/utils/is-equal.spec.js +88 -0
- package/build/legacy/common/utils/mobile-utils.spec.js +71 -0
- package/build/legacy/common/validators/models/model-utils.spec.js +45 -0
- package/build/legacy/common/validators/models/model-validators.spec.js +647 -0
- package/build/legacy/common/validators/schemas/schema-validators.spec.js +157 -0
- package/build/legacy/common/validators/types/type-validators.spec.js +147 -0
- package/build/legacy/common/validators/validationFailures/validation-failures.spec.js +198 -0
- package/build/legacy/common/validators/validationFailures/validation-failures.utils.spec.js +145 -0
- package/build/legacy/common/validators/values/value-validators.spec.js +22 -0
- package/build/legacy/dynamicFlow/stories/dev-tools/DynamicFlow.story.js +78 -0
- package/build/legacy/dynamicFlow/stories/dev-tools/ErrorResponses.story.js +124 -0
- package/build/legacy/dynamicFlow/stories/dev-tools/Examples.story.js +25 -0
- package/build/legacy/dynamicFlow/stories/dev-tools/Features.story.js +33 -0
- package/build/legacy/dynamicFlow/stories/dev-tools/JsonSchemaForm.story.js +31 -0
- package/build/legacy/dynamicFlow/stories/dev-tools/RefreshOnChange.story.js +194 -0
- package/build/legacy/dynamicFlow/stories/dev-tools/SearchFeature.story.js +114 -0
- package/build/legacy/dynamicFlow/stories/dev-tools/ServerTest.story.js +44 -0
- package/build/legacy/dynamicFlow/stories/dev-tools/Upload.story.js +212 -0
- package/build/legacy/dynamicFlow/stories/dev-tools/ValidationAsync.story.js +156 -0
- package/build/legacy/dynamicFlow/stories/examples/ObjectConst.story.js +150 -0
- package/build/legacy/dynamicFlow/stories/fixtureHttpClient.js +117 -0
- package/build/legacy/dynamicFlow/stories/visual-tests/VisualTests.story.js +43 -0
- package/build/legacy/dynamicFlow/tests/Actions.spec.js +185 -0
- package/build/legacy/dynamicFlow/tests/AllOfSchema.spec.js +196 -0
- package/build/legacy/dynamicFlow/tests/AutocompleteHints.spec.js +59 -0
- package/build/legacy/dynamicFlow/tests/DynamicFlow.BackButton.spec.js +179 -0
- package/build/legacy/dynamicFlow/tests/DynamicFlow.search.spec.js +475 -0
- package/build/legacy/dynamicFlow/tests/DynamicFlow.spec.js +559 -0
- package/build/legacy/dynamicFlow/tests/DynamicImage.spec.js +287 -0
- package/build/legacy/dynamicFlow/tests/DynamicInstructions.spec.js +49 -0
- package/build/legacy/dynamicFlow/tests/HiddenSchemas.spec.js +307 -0
- package/build/legacy/dynamicFlow/tests/ModalLayout.spec.js +252 -0
- package/build/legacy/dynamicFlow/tests/MultiSelect.spec.js +327 -0
- package/build/legacy/dynamicFlow/tests/MultipleFileUploadSchema.spec.js +401 -0
- package/build/legacy/dynamicFlow/tests/ObjectSchema.spec.js +295 -0
- package/build/legacy/dynamicFlow/tests/OneOfSchema.spec.js +773 -0
- package/build/legacy/dynamicFlow/tests/PersistAsync.blob-schema.spec.js +331 -0
- package/build/legacy/dynamicFlow/tests/PersistAsync.string-schema.spec.js +389 -0
- package/build/legacy/dynamicFlow/tests/RefreshStepOnChange.debouncing.spec.js +273 -0
- package/build/legacy/dynamicFlow/tests/RefreshStepOnChange.spec.js +567 -0
- package/build/legacy/dynamicFlow/tests/RepeatableSchema.spec.js +977 -0
- package/build/legacy/dynamicFlow/tests/StepModel.spec.js +119 -0
- package/build/legacy/dynamicFlow/tests/ValidationAsync.spec.js +484 -0
- package/build/legacy/dynamicFlow/tests/ssr.spec.js +47 -0
- package/build/legacy/dynamicFlow/utils/responseParsers/response-parsers.spec.js +463 -0
- package/build/legacy/formControl/Select.spec.js +104 -0
- package/build/legacy/formControl/utils/getAutocompleteString.spec.js +30 -0
- package/build/legacy/formControl/utils/value-utils.spec.js +158 -0
- package/build/legacy/jsonSchemaForm/JsonSchemaForm.end-to-end.spec.js +563 -0
- package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/index.js +1 -0
- package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/repeatableSchema/utils/summary-utils.spec.js +909 -0
- package/build/legacy/jsonSchemaForm/genericSchema/GenericSchema.rtl.spec.js +55 -0
- package/build/legacy/jsonSchemaForm/schemaFormControl/SchemaFormControl.spec.js +312 -0
- package/build/legacy/jsonSchemaForm/schemaFormControl/utils/mapping-utils.spec.js +231 -0
- package/build/legacy/layout/button/DynamicButton.spec.js +152 -0
- package/build/legacy/layout/button/utils.spec.js +50 -0
- package/build/legacy/layout/icon/DynamicIcon.spec.js +20 -0
- package/build/legacy/layout/list/DynamicStatusList.spec.js +111 -0
- package/build/legacy/layout/loadingIndicator/DynamicLoadingIndicator.spec.js +25 -0
- package/build/legacy/layout/markdown/DynamicMarkdown.spec.js +58 -0
- package/build/legacy/layout/review/DynamicReview.spec.js +152 -0
- package/build/legacy/step/cameraStep/cameraCapture/CameraCapture.spec.js +432 -0
- package/build/legacy/test-utils/DynamicFlowProviders.js +19 -0
- package/build/legacy/test-utils/index.js +4 -0
- package/build/legacy/test-utils/legacy-utils.js +69 -0
- package/build/legacy/test-utils/log-utils.js +9 -0
- package/build/main.js +20 -20
- package/build/main.min.js +1 -1
- package/build/main.mjs +20 -20
- package/build/revamp/DynamicFlowCore.js +299 -0
- package/build/revamp/DynamicFlowWise.js +69 -0
- package/build/revamp/DynamicFlowWise.spec.js +105 -0
- package/build/revamp/domain/components/repeatableComponent/RepeatableComponent.spec.js +145 -0
- package/build/revamp/domain/components/searchComponent/SearchComponent.spec.js +327 -0
- package/build/revamp/domain/components/utils/debounce.spec.js +72 -0
- package/build/revamp/domain/components/utils/isPartialLocalValueMatch.spec.js +108 -0
- package/build/revamp/domain/features/persistAsync/getComponentPersistAsync.spec.js +199 -0
- package/build/revamp/domain/features/persistAsync/getInitialPersistedState.js +6 -0
- package/build/revamp/domain/features/persistAsync/getPerformPersistAsync.spec.js +280 -0
- package/build/revamp/domain/features/search/getPerformSearchFunction.js +104 -0
- package/build/revamp/domain/features/search/getPerformSearchFunction.spec.js +260 -0
- package/build/revamp/domain/features/summary/summary-utils.spec.js +110 -0
- package/build/revamp/domain/features/validation/spec-utils.js +16 -0
- package/build/revamp/domain/features/validation/validation-functions.spec.js +110 -0
- package/build/revamp/domain/features/validation/value-checks.spec.js +204 -0
- package/build/revamp/domain/features/validationAsync/getComponentValidationAsync.spec.js +177 -0
- package/build/revamp/domain/features/validationAsync/getInitialValidationState.js +5 -0
- package/build/revamp/domain/features/validationAsync/getPerformValidationAsync.spec.js +266 -0
- package/build/revamp/domain/mappers/layout/alertLayoutToComponent.js +12 -0
- package/build/revamp/domain/mappers/layout/boxLayoutToComponents.js +15 -0
- package/build/revamp/domain/mappers/layout/buttonLayoutToComponent.js +64 -0
- package/build/revamp/domain/mappers/layout/columnsLayoutToComponent.js +18 -0
- package/build/revamp/domain/mappers/layout/decisionLayoutToComponent.js +36 -0
- package/build/revamp/domain/mappers/layout/dividerLayoutToComponent.js +5 -0
- package/build/revamp/domain/mappers/layout/formLayoutToComponent.js +27 -0
- package/build/revamp/domain/mappers/layout/headingLayoutToComponent.js +13 -0
- package/build/revamp/domain/mappers/layout/imageLayoutToComponent.js +12 -0
- package/build/revamp/domain/mappers/layout/infoLayoutToComponent.js +12 -0
- package/build/revamp/domain/mappers/layout/instructionsLayoutToComponent.js +18 -0
- package/build/revamp/domain/mappers/layout/listLayoutToComponent.js +30 -0
- package/build/revamp/domain/mappers/layout/loadingIndicatorLayoutToComponent.js +5 -0
- package/build/revamp/domain/mappers/layout/markdownLayoutToComponent.js +12 -0
- package/build/revamp/domain/mappers/layout/modalLayoutToComponent.js +17 -0
- package/build/revamp/domain/mappers/layout/paragraphLayoutToComponent.js +12 -0
- package/build/revamp/domain/mappers/layout/reviewLayoutToComponent.js +51 -0
- package/build/revamp/domain/mappers/layout/searchLayoutToComponent.js +14 -0
- package/build/revamp/domain/mappers/layout/statusListLayoutToComponent.js +11 -0
- package/build/revamp/domain/mappers/mapLayoutToComponent.js +63 -0
- package/build/revamp/domain/mappers/mapSchemaToComponent.js +84 -0
- package/build/revamp/domain/mappers/mapSchemaToComponent.spec.js +197 -0
- package/build/revamp/domain/mappers/mapStepToComponent.js +143 -0
- package/build/revamp/domain/mappers/mapStepToComponent.spec.js +184 -0
- package/build/revamp/domain/mappers/schema/allOfSchemaToComponent.js +29 -0
- package/build/revamp/domain/mappers/schema/arraySchemaToComponent/arraySchemaToComponent.js +35 -0
- package/build/revamp/domain/mappers/schema/arraySchemaToComponent/arraySchemaToMultiUploadComponent.js +63 -0
- package/build/revamp/domain/mappers/schema/arraySchemaToComponent/arraySchemaToRepeatableComponent.js +65 -0
- package/build/revamp/domain/mappers/schema/blobSchemaToComponent.js +30 -0
- package/build/revamp/domain/mappers/schema/booleanSchemaToComponent.js +38 -0
- package/build/revamp/domain/mappers/schema/constSchemaToComponent.js +14 -0
- package/build/revamp/domain/mappers/schema/integerSchemaToComponent.js +36 -0
- package/build/revamp/domain/mappers/schema/numberSchemaToComponent.js +35 -0
- package/build/revamp/domain/mappers/schema/objectSchemaToComponent/objectSchemaToComponent.js +41 -0
- package/build/revamp/domain/mappers/schema/objectSchemaToComponent/objectSchemaToComponent.spec.js +165 -0
- package/build/revamp/domain/mappers/schema/oneOfSchemaToComponent/oneOfSchemaToComponent.js +67 -0
- package/build/revamp/domain/mappers/schema/oneOfSchemaToComponent/oneOfSchemaToComponent.spec.js +316 -0
- package/build/revamp/domain/mappers/schema/stringSchemaToComponent/stringSchemaToComponent.js +14 -0
- package/build/revamp/domain/mappers/schema/stringSchemaToComponent/stringSchemaToComponent.spec.js +220 -0
- package/build/revamp/domain/mappers/schema/stringSchemaToComponent/stringSchemaToDateInputComponent.js +37 -0
- package/build/revamp/domain/mappers/schema/stringSchemaToComponent/stringSchemaToTextInputComponent.js +45 -0
- package/build/revamp/domain/mappers/schema/stringSchemaToComponent/stringSchemaToUploadInputComponent.js +32 -0
- package/build/revamp/domain/mappers/schema/tests/test-utils.js +27 -0
- package/build/revamp/domain/mappers/schema/types.js +1 -0
- package/build/revamp/domain/mappers/schema/utils/getPersistAsyncInitialState.js +35 -0
- package/build/revamp/domain/mappers/schema/utils/getValidationAsyncInitialState.js +25 -0
- package/build/revamp/domain/mappers/schema/utils/mapCommonSchemaProps.js +28 -0
- package/build/revamp/domain/mappers/utils/getAutocompleteString.js +76 -0
- package/build/revamp/domain/mappers/utils/getAutocompleteString.spec.js +21 -0
- package/build/revamp/domain/mappers/utils/getRandomId.js +2 -0
- package/build/revamp/domain/mappers/utils/legacy-utils.js +53 -0
- package/build/revamp/flow/executeRefresh.js +97 -0
- package/build/revamp/flow/executeSubmission.js +152 -0
- package/build/revamp/flow/getResponseType.js +76 -0
- package/build/revamp/flow/response-utils.js +1 -1
- package/build/revamp/renderers/getRenderFunction.js +55 -0
- package/build/revamp/renderers/getSchemaErrorMessageFunction.js +90 -0
- package/build/revamp/renderers/mappers/alertComponentToProps.js +4 -0
- package/build/revamp/renderers/mappers/allOfComponentToProps.js +11 -0
- package/build/revamp/renderers/mappers/booleanInputComponentToProps.js +16 -0
- package/build/revamp/renderers/mappers/boxComponentToProps.js +4 -0
- package/build/revamp/renderers/mappers/buttonComponentToProps.js +14 -0
- package/build/revamp/renderers/mappers/columnsComponentToProps.js +4 -0
- package/build/revamp/renderers/mappers/componentToRendererProps.js +105 -0
- package/build/revamp/renderers/mappers/containerComponentToProps.js +4 -0
- package/build/revamp/renderers/mappers/dateInputComponentToProps.js +13 -0
- package/build/revamp/renderers/mappers/decisionComponentToProps.js +4 -0
- package/build/revamp/renderers/mappers/dividerComponentToProps.js +4 -0
- package/build/revamp/renderers/mappers/formComponentToProps.js +4 -0
- package/build/revamp/renderers/mappers/headingComponentToProps.js +11 -0
- package/build/revamp/renderers/mappers/hiddenComponentToProps.js +3 -0
- package/build/revamp/renderers/mappers/imageComponentToProps.js +11 -0
- package/build/revamp/renderers/mappers/instructionsComponentToProps.js +10 -0
- package/build/revamp/renderers/mappers/integerInputComponentToProps.js +13 -0
- package/build/revamp/renderers/mappers/loadingIndicatorComponentToProps.js +9 -0
- package/build/revamp/renderers/mappers/markdownComponentToProps.js +10 -0
- package/build/revamp/renderers/mappers/modalComponentToProps.js +10 -0
- package/build/revamp/renderers/mappers/multiUploadInputComponentToProps.js +24 -0
- package/build/revamp/renderers/mappers/numberInputComponentToProps.js +13 -0
- package/build/revamp/renderers/mappers/objectComponentToProps.js +11 -0
- package/build/revamp/renderers/mappers/paragraphComponentToProps.js +10 -0
- package/build/revamp/renderers/mappers/repeatableComponentToProps.js +40 -0
- package/build/revamp/renderers/mappers/reviewComponentToProps.js +11 -0
- package/build/revamp/renderers/mappers/searchComponentToProps.js +49 -0
- package/build/revamp/renderers/mappers/selectInputComponentToProps.js +29 -0
- package/build/revamp/renderers/mappers/statusListComponentToProps.js +10 -0
- package/build/revamp/renderers/mappers/textInputComponentToProps.js +13 -0
- package/build/revamp/renderers/mappers/uploadInputComponentToProps.js +16 -0
- package/build/revamp/renderers/mappers/utils/inputComponentToProps.js +27 -0
- package/build/revamp/renderers/step/ExternalConfirmationDialog.js +31 -0
- package/build/revamp/renderers/step/StepRenderer.js +29 -0
- package/build/revamp/renderers/step/useExternal.js +15 -0
- package/build/revamp/renderers/stepComponentToProps.js +9 -0
- package/build/revamp/stories/dev-tools/DynamicFlowRevamp.story.js +304 -0
- package/build/revamp/stories/dev-tools/EditableStep.story.js +71 -0
- package/build/revamp/stories/dev-tools/ErrorHandling.story.js +149 -0
- package/build/revamp/stories/dev-tools/External.story.js +83 -0
- package/build/revamp/stories/dev-tools/OneOf.Inititalisation.story.js +123 -0
- package/build/revamp/stories/dev-tools/PersistAsync.story.js +168 -0
- package/build/revamp/stories/dev-tools/RefreshOnChange.story.js +309 -0
- package/build/revamp/stories/dev-tools/RefreshOnChange.with.PersistAsync.story.js +1004 -0
- package/build/revamp/stories/dev-tools/ServerTest.story.js +81 -0
- package/build/revamp/stories/dev-tools/Upload.story.js +221 -0
- package/build/revamp/stories/dev-tools/ValidationAsync.story.js +161 -0
- package/build/revamp/stories/examples/ObjectConst.story.js +153 -0
- package/build/revamp/stories/examples/OneOfInitialisation.story.js +102 -0
- package/build/revamp/stories/utils/fixtureHttpClient.js +130 -0
- package/build/revamp/stories/utils/mockSearchHandler.js +125 -0
- package/build/revamp/stories/visual-tests/VisualTests.story.js +111 -0
- package/build/revamp/test-utils/component-utils.js +19 -0
- package/build/revamp/test-utils/step-utils.js +6 -0
- package/build/revamp/tests/ImageRenderer.spec.js +108 -0
- package/build/revamp/tests/InitialAction.spec.js +281 -0
- package/build/revamp/tests/InitialStep.spec.js +104 -0
- package/build/revamp/tests/Logging.spec.js +112 -0
- package/build/revamp/tests/OneOfInitialisation.spec.js +654 -0
- package/build/revamp/tests/RefreshOnChange.ResponseHandling.spec.js +322 -0
- package/build/revamp/tests/RefreshOnChange.with.Tabs.spec.js +390 -0
- package/build/revamp/tests/RefreshOnChangePreserve.spec.js +218 -0
- package/build/revamp/tests/Submission.ResponseHandling.spec.js +697 -0
- package/build/revamp/tests/Submission.spec.js +399 -0
- package/build/revamp/tests/legacy/HiddenSchemas.spec.js +312 -0
- package/build/revamp/tests/legacy/MultipleFileUploadSchema.spec.js +447 -0
- package/build/revamp/tests/legacy/PersistAsync.blob-schema.spec.js +339 -0
- package/build/revamp/tests/legacy/PersistAsync.string-schema.spec.js +385 -0
- package/build/revamp/tests/legacy/RefreshStepOnChange.debouncing.spec.js +235 -0
- package/build/revamp/tests/legacy/RefreshStepOnChange.spec.js +623 -0
- package/build/revamp/tests/legacy/ValidationAsync.spec.js +452 -0
- package/build/revamp/tests/legacy/useExternal.spec.js +235 -0
- package/build/revamp/utils/component-utils.spec.js +385 -0
- package/build/revamp/utils/findComponent.js +29 -0
- package/build/revamp/utils/findComponent.spec.js +92 -0
- package/build/revamp/utils/type-validators.spec.js +163 -0
- package/build/revamp/utils/useStableCallback.js +21 -0
- package/build/revamp/wise/renderers/DateInputRenderer.js +35 -0
- package/build/revamp/wise/renderers/DecisionRenderer.js +29 -0
- package/build/revamp/wise/renderers/DividerRenderer.js +10 -0
- package/build/revamp/wise/renderers/FormRenderer.js +21 -0
- package/build/revamp/wise/renderers/FormSectionRenderer.js +16 -0
- package/build/revamp/wise/renderers/HeadingRenderer.js +57 -0
- package/build/revamp/wise/renderers/ImageRenderer.js +111 -0
- package/build/revamp/wise/renderers/InstructionsRenderer.js +34 -0
- package/build/revamp/wise/renderers/IntegerInputRenderer.js +38 -0
- package/build/revamp/wise/renderers/LoadingIndicatorRenderer.js +11 -0
- package/build/revamp/wise/renderers/MarkdownRenderer.js +22 -0
- package/build/revamp/wise/renderers/ModalRenderer.js +25 -0
- package/build/revamp/wise/renderers/MultiUploadInputRenderer.js +74 -0
- package/build/revamp/wise/renderers/NumberInputRenderer.js +38 -0
- package/build/revamp/wise/renderers/ParagraphRenderer.js +44 -0
- package/build/revamp/wise/renderers/RepeatableRenderer.js +58 -0
- package/build/revamp/wise/renderers/ReviewRenderer.js +46 -0
- package/build/revamp/wise/renderers/SearchRenderer.js +63 -0
- package/build/revamp/wise/renderers/SelectInputRenderer/OptionMedia.js +27 -0
- package/build/revamp/wise/renderers/SelectInputRenderer/RadioInputRendererComponent.js +25 -0
- package/build/revamp/wise/renderers/SelectInputRenderer/SelectInputRenderer.js +30 -0
- package/build/revamp/wise/renderers/SelectInputRenderer/SelectInputRendererComponent.js +56 -0
- package/build/revamp/wise/renderers/SelectInputRenderer/SelectTriggerMedia.js +27 -0
- package/build/revamp/wise/renderers/SelectInputRenderer/TabInputRendererComponent.js +33 -0
- package/build/revamp/wise/renderers/StatusListRenderer.js +32 -0
- package/build/revamp/wise/renderers/TextInputRenderer.js +35 -0
- package/build/revamp/wise/renderers/UploadInputRenderer.js +136 -0
- package/build/revamp/wise/renderers/components/UploadFieldInput.js +25 -0
- package/build/revamp/wise/renderers/components/VariableDateInput.js +30 -0
- package/build/revamp/wise/renderers/components/VariableTextInput.js +69 -0
- package/build/revamp/wise/renderers/components/icon/DynamicIcon.js +17 -0
- package/build/revamp/wise/renderers/components/icon/FlagIcon.js +198 -0
- package/build/revamp/wise/renderers/components/icon/NamedIcon.js +19 -0
- package/build/revamp/wise/renderers/components/icon/NavigationOptionMedia.js +31 -0
- package/build/revamp/wise/renderers/getWiseRenderers.js +57 -0
- package/build/revamp/wise/renderers/hooks/useSnackBarIfAvailable.js +6 -0
- package/build/revamp/wise/renderers/utils/file-utils.js +70 -0
- package/build/revamp/wise/renderers/utils/getRandomId.js +2 -0
- package/build/revamp/wise/renderers/utils/input-utils.js +6 -0
- package/build/revamp/wise/renderers/utils/value-utils.js +23 -0
- package/build/revamp/wise/renderers/utils/value-utils.spec.js +33 -0
- package/build/revamp/wise/renderers/validators/type-validators.js +15 -0
- package/build/test-utils/NeptuneProviders.js +23 -0
- package/build/test-utils/fetch-utils.js +104 -0
- package/build/test-utils/index.js +2 -0
- package/build/test-utils/rtl-utils.js +20 -0
- package/package.json +3 -2
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { getAboveMaxLengthCheck, getBelowMinLengthCheck, getAboveMaximumCheck, getBelowMinimumCheck, getAboveMaximumDateCheck, getBelowMinimumDateCheck, getNotAdheringToPatternCheck, getAboveMaxItemsCheck, getBelowMinItemsCheck, getAboveMaxFilesCheck, getBelowMinFilesCheck, } from './value-checks';
|
|
2
|
+
import { mockErrorMessageFunctions } from './spec-utils';
|
|
3
|
+
describe('value checks', function () {
|
|
4
|
+
describe('getAboveMaxLengthCheck', function () {
|
|
5
|
+
it('should return null if the string length is below or equal to the maxLength', function () {
|
|
6
|
+
var schema = { type: 'string', maxLength: 5 };
|
|
7
|
+
var check = getAboveMaxLengthCheck(schema, mockErrorMessageFunctions);
|
|
8
|
+
var belowLength = check('0');
|
|
9
|
+
var atLength = check('01234');
|
|
10
|
+
expect(belowLength).toBeNull();
|
|
11
|
+
expect(atLength).toBeNull();
|
|
12
|
+
});
|
|
13
|
+
it('should return an error message if the string length is above the maxLength', function () {
|
|
14
|
+
var schema = { type: 'string', maxLength: 5 };
|
|
15
|
+
var check = getAboveMaxLengthCheck(schema, mockErrorMessageFunctions);
|
|
16
|
+
expect(check('012345')).toBe('maxLength');
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
describe('getBelowMinLengthCheck', function () {
|
|
20
|
+
it('should return null if the string length is above or equal to the minLength', function () {
|
|
21
|
+
var schema = { type: 'string', minLength: 5 };
|
|
22
|
+
var check = getBelowMinLengthCheck(schema, mockErrorMessageFunctions);
|
|
23
|
+
var atLength = check('01234');
|
|
24
|
+
var aboveLength = check('0123456789');
|
|
25
|
+
expect(atLength).toBeNull();
|
|
26
|
+
expect(aboveLength).toBeNull();
|
|
27
|
+
});
|
|
28
|
+
it('should return an error message if the string length is below the minLength', function () {
|
|
29
|
+
var schema = { type: 'string', minLength: 5 };
|
|
30
|
+
var check = getBelowMinLengthCheck(schema, mockErrorMessageFunctions);
|
|
31
|
+
expect(check('0')).toBe('minLength');
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
describe('getAboveMaximumCheck', function () {
|
|
35
|
+
it('should return null if the number is below or equal to the maximum', function () {
|
|
36
|
+
var schema = { type: 'number', maximum: 10 };
|
|
37
|
+
var check = getAboveMaximumCheck(schema, mockErrorMessageFunctions);
|
|
38
|
+
var atMax = check(5);
|
|
39
|
+
var belowMax = check(10);
|
|
40
|
+
expect(atMax).toBeNull();
|
|
41
|
+
expect(belowMax).toBeNull();
|
|
42
|
+
});
|
|
43
|
+
it('should return an error message if the number is above the maximum', function () {
|
|
44
|
+
var schema = { type: 'number', maximum: 10 };
|
|
45
|
+
var check = getAboveMaximumCheck(schema, mockErrorMessageFunctions);
|
|
46
|
+
expect(check(15)).toBe('maximum');
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
describe('getBelowMinimumCheck', function () {
|
|
50
|
+
it('should return null if the number is above or equal to the minimum', function () {
|
|
51
|
+
var schema = { type: 'integer', minimum: 5 };
|
|
52
|
+
var check = getBelowMinimumCheck(schema, mockErrorMessageFunctions);
|
|
53
|
+
var atMinimum = check(5);
|
|
54
|
+
var aboveMinimum = check(10);
|
|
55
|
+
expect(atMinimum).toBeNull();
|
|
56
|
+
expect(aboveMinimum).toBeNull();
|
|
57
|
+
});
|
|
58
|
+
it('should return an error message if the number is below the minimum', function () {
|
|
59
|
+
var schema = { type: 'integer', minimum: 10 };
|
|
60
|
+
var check = getBelowMinimumCheck(schema, mockErrorMessageFunctions);
|
|
61
|
+
expect(check(5)).toBe('minimum');
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
describe('getAboveMaximumDateCheck', function () {
|
|
65
|
+
it('should return null if the date is below or equal to the maximum', function () {
|
|
66
|
+
var schema = { type: 'string', format: 'date', maximum: '2022-01-01' };
|
|
67
|
+
var check = getAboveMaximumDateCheck(schema, mockErrorMessageFunctions);
|
|
68
|
+
var atDate = check('2022-01-01');
|
|
69
|
+
var belowDate = check('2021-12-31');
|
|
70
|
+
expect(atDate).toBeNull();
|
|
71
|
+
expect(belowDate).toBeNull();
|
|
72
|
+
});
|
|
73
|
+
it('should return an error message if the date is above the maximum', function () {
|
|
74
|
+
var schema = { type: 'string', format: 'date', maximum: '2022-01-01' };
|
|
75
|
+
var check = getAboveMaximumDateCheck(schema, mockErrorMessageFunctions);
|
|
76
|
+
expect(check('2022-01-02')).toBe('maximumDate');
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
describe('getBelowMinimumDateCheck', function () {
|
|
80
|
+
it('should return null if the date is above or equal to the minimum', function () {
|
|
81
|
+
var schema = { type: 'string', format: 'date', minimum: '2022-01-01' };
|
|
82
|
+
var check = getBelowMinimumDateCheck(schema, mockErrorMessageFunctions);
|
|
83
|
+
var atDate = check('2022-01-01');
|
|
84
|
+
var aboveDate = check('2022-01-02');
|
|
85
|
+
expect(atDate).toBeNull();
|
|
86
|
+
expect(aboveDate).toBeNull();
|
|
87
|
+
});
|
|
88
|
+
it('should return an error message if the date is below the minimum', function () {
|
|
89
|
+
var schema = { type: 'string', format: 'date', minimum: '2022-01-01' };
|
|
90
|
+
var check = getBelowMinimumDateCheck(schema, mockErrorMessageFunctions);
|
|
91
|
+
expect(check('2021-12-31')).toBe('minimumDate');
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
describe('getNotAdheringToPatternCheck', function () {
|
|
95
|
+
it('should return null if the string adheres to the pattern', function () {
|
|
96
|
+
var schema = { type: 'string', pattern: '[A-Za-z]+' };
|
|
97
|
+
var check = getNotAdheringToPatternCheck(schema, mockErrorMessageFunctions);
|
|
98
|
+
expect(check('Hello')).toBeNull();
|
|
99
|
+
});
|
|
100
|
+
it('should return an error message if the string does not adhere to the pattern', function () {
|
|
101
|
+
var schema = { type: 'string', pattern: '[A-Za-z]+' };
|
|
102
|
+
var check = getNotAdheringToPatternCheck(schema, mockErrorMessageFunctions);
|
|
103
|
+
expect(check('01234')).toBe('pattern');
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
describe('getAboveMaxItemsCheck', function () {
|
|
107
|
+
var arraySchema = {
|
|
108
|
+
type: 'array',
|
|
109
|
+
items: { type: 'string' },
|
|
110
|
+
addItemTitle: '',
|
|
111
|
+
editItemTitle: '',
|
|
112
|
+
maxItems: 5
|
|
113
|
+
};
|
|
114
|
+
it('should return null if the array length is below or equal to the maxItems', function () {
|
|
115
|
+
var check = getAboveMaxItemsCheck(arraySchema, mockErrorMessageFunctions);
|
|
116
|
+
var belowLength = check(['0']);
|
|
117
|
+
var atLength = check(['0', '1', '2', '3', '4']);
|
|
118
|
+
expect(belowLength).toBeNull();
|
|
119
|
+
expect(atLength).toBeNull();
|
|
120
|
+
});
|
|
121
|
+
it('should return an error message if the array length is above the maxItems', function () {
|
|
122
|
+
var check = getAboveMaxItemsCheck(arraySchema, mockErrorMessageFunctions);
|
|
123
|
+
expect(check(['0', '1', '2', '3', '4', '5'])).toBe('maxItems');
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
describe('getBelowMinItemsCheck', function () {
|
|
127
|
+
var arraySchema = {
|
|
128
|
+
type: 'array',
|
|
129
|
+
items: { type: 'string' },
|
|
130
|
+
addItemTitle: '',
|
|
131
|
+
editItemTitle: '',
|
|
132
|
+
minItems: 3
|
|
133
|
+
};
|
|
134
|
+
it('should return null if the array length is above or equal to the minItems', function () {
|
|
135
|
+
var check = getBelowMinItemsCheck(arraySchema, mockErrorMessageFunctions);
|
|
136
|
+
var atLength = check(['0', '1', '2']);
|
|
137
|
+
var aboveLength = check(['0', '1', '2', '3']);
|
|
138
|
+
expect(atLength).toBeNull();
|
|
139
|
+
expect(aboveLength).toBeNull();
|
|
140
|
+
});
|
|
141
|
+
it('should return null if the array is empty', function () {
|
|
142
|
+
var check = getBelowMinItemsCheck(arraySchema, mockErrorMessageFunctions);
|
|
143
|
+
var empty = check([]);
|
|
144
|
+
expect(empty).toBeNull();
|
|
145
|
+
});
|
|
146
|
+
it('should return an error message if the array length is below the minItems', function () {
|
|
147
|
+
var check = getBelowMinItemsCheck(arraySchema, mockErrorMessageFunctions);
|
|
148
|
+
expect(check(['0', '1'])).toBe('minItems');
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
describe('getAboveMaxFilesCheck', function () {
|
|
152
|
+
var arraySchema = {
|
|
153
|
+
type: 'array',
|
|
154
|
+
items: { type: 'string' },
|
|
155
|
+
addItemTitle: '',
|
|
156
|
+
editItemTitle: '',
|
|
157
|
+
maxItems: 2
|
|
158
|
+
};
|
|
159
|
+
it('should return null if the array length is below or equal to the maxItems', function () {
|
|
160
|
+
var check = getAboveMaxFilesCheck(arraySchema, mockErrorMessageFunctions);
|
|
161
|
+
var belowLength = check([new File([new Blob()], '0')]);
|
|
162
|
+
var atLength = check([new File([new Blob()], '0'), new File([new Blob()], '1')]);
|
|
163
|
+
expect(belowLength).toBeNull();
|
|
164
|
+
expect(atLength).toBeNull();
|
|
165
|
+
});
|
|
166
|
+
it('should return an error message if the array length is above the maxItems', function () {
|
|
167
|
+
var check = getAboveMaxFilesCheck(arraySchema, mockErrorMessageFunctions);
|
|
168
|
+
expect(check([
|
|
169
|
+
new File([new Blob()], '0'),
|
|
170
|
+
new File([new Blob()], '1'),
|
|
171
|
+
new File([new Blob()], '2'),
|
|
172
|
+
])).toBe('maxFiles');
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
describe('getBelowMinFilesCheck', function () {
|
|
176
|
+
var arraySchema = {
|
|
177
|
+
type: 'array',
|
|
178
|
+
items: { type: 'string' },
|
|
179
|
+
addItemTitle: '',
|
|
180
|
+
editItemTitle: '',
|
|
181
|
+
minItems: 2
|
|
182
|
+
};
|
|
183
|
+
it('should return null if the array length is above or equal to the minItems', function () {
|
|
184
|
+
var check = getBelowMinFilesCheck(arraySchema, mockErrorMessageFunctions);
|
|
185
|
+
var atLength = check([new File([new Blob()], '0'), new File([new Blob()], '1')]);
|
|
186
|
+
var aboveLength = check([
|
|
187
|
+
new File([new Blob()], '0'),
|
|
188
|
+
new File([new Blob()], '1'),
|
|
189
|
+
new File([new Blob()], '2'),
|
|
190
|
+
]);
|
|
191
|
+
expect(atLength).toBeNull();
|
|
192
|
+
expect(aboveLength).toBeNull();
|
|
193
|
+
});
|
|
194
|
+
it('should return null if the array is empty', function () {
|
|
195
|
+
var check = getBelowMinFilesCheck(arraySchema, mockErrorMessageFunctions);
|
|
196
|
+
var empty = check([]);
|
|
197
|
+
expect(empty).toBeNull();
|
|
198
|
+
});
|
|
199
|
+
it('should return an error message if the array length is below the minItems', function () {
|
|
200
|
+
var check = getBelowMinFilesCheck(arraySchema, mockErrorMessageFunctions);
|
|
201
|
+
expect(check([new File([new Blob()], '0')])).toBe('minFiles');
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
});
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
13
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
14
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
15
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
16
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
17
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
18
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
22
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
23
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
24
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
25
|
+
function step(op) {
|
|
26
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
27
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
28
|
+
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;
|
|
29
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
30
|
+
switch (op[0]) {
|
|
31
|
+
case 0: case 1: t = op; break;
|
|
32
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
33
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
34
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
35
|
+
default:
|
|
36
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
37
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
38
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
39
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
40
|
+
if (t[2]) _.ops.pop();
|
|
41
|
+
_.trys.pop(); continue;
|
|
42
|
+
}
|
|
43
|
+
op = body.call(thisArg, _);
|
|
44
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
45
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
import { abortableDelay } from '../../../../test-utils/fetch-utils';
|
|
49
|
+
import { createTextInputComponent, } from '../../components/TextInputComponent';
|
|
50
|
+
import { getInputUpdateFunction } from '../../components/utils/component-utils';
|
|
51
|
+
import { getUpdateFunctionMock } from '../../mappers/schema/tests/test-utils';
|
|
52
|
+
import { getInitialPersistedState } from '../persistAsync/getInitialPersistedState';
|
|
53
|
+
import { getInitialValidationState } from './getInitialValidationState';
|
|
54
|
+
import { getComponentValidationAsync } from './getComponentValidationAsync';
|
|
55
|
+
import { waitFor } from '@testing-library/react';
|
|
56
|
+
var defaultProps = {
|
|
57
|
+
uid: '123',
|
|
58
|
+
checks: [],
|
|
59
|
+
analyticsId: 'analyticsId',
|
|
60
|
+
autoComplete: 'off',
|
|
61
|
+
disabled: true,
|
|
62
|
+
errors: [],
|
|
63
|
+
hidden: false,
|
|
64
|
+
id: 'id',
|
|
65
|
+
required: false,
|
|
66
|
+
persistedState: getInitialPersistedState(),
|
|
67
|
+
validationState: getInitialValidationState(),
|
|
68
|
+
value: '',
|
|
69
|
+
performPersistAsync: undefined,
|
|
70
|
+
performRefresh: undefined,
|
|
71
|
+
summariser: function () { return ({}); }
|
|
72
|
+
};
|
|
73
|
+
describe('getComponentValidationAsync', function () {
|
|
74
|
+
it('should make request and update message if response is ok', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
75
|
+
var performValidationAsync, mockUpdateFunction, inputComponent, update, validate;
|
|
76
|
+
return __generator(this, function (_a) {
|
|
77
|
+
switch (_a.label) {
|
|
78
|
+
case 0:
|
|
79
|
+
performValidationAsync = jest.fn().mockResolvedValue('Everything is ok');
|
|
80
|
+
mockUpdateFunction = getUpdateFunctionMock(function () { return inputComponent; });
|
|
81
|
+
inputComponent = createTextInputComponent(__assign(__assign({}, defaultProps), { performValidationAsync: performValidationAsync, value: 'test' }), mockUpdateFunction);
|
|
82
|
+
update = getInputUpdateFunction('uid', mockUpdateFunction);
|
|
83
|
+
validate = getComponentValidationAsync(update, performValidationAsync);
|
|
84
|
+
void validate(inputComponent.validationState, inputComponent.getLocalValue());
|
|
85
|
+
expect(performValidationAsync).toHaveBeenCalledWith(expect.objectContaining({ value: 'test' }));
|
|
86
|
+
return [4 /*yield*/, waitFor(function () {
|
|
87
|
+
return expect(inputComponent.validationState.messages.success).toBe('Everything is ok');
|
|
88
|
+
})];
|
|
89
|
+
case 1:
|
|
90
|
+
_a.sent();
|
|
91
|
+
return [2 /*return*/];
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}); });
|
|
95
|
+
it('should not perform a second request if called with the same value twice', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
96
|
+
var performValidationAsync, mockUpdateFunction, inputComponent, update, validate;
|
|
97
|
+
return __generator(this, function (_a) {
|
|
98
|
+
performValidationAsync = jest.fn().mockResolvedValue('Everything is ok');
|
|
99
|
+
mockUpdateFunction = getUpdateFunctionMock(function () { return inputComponent; });
|
|
100
|
+
inputComponent = createTextInputComponent(__assign(__assign({}, defaultProps), { performValidationAsync: performValidationAsync, value: 'test' }), mockUpdateFunction);
|
|
101
|
+
update = getInputUpdateFunction('uid', mockUpdateFunction);
|
|
102
|
+
validate = getComponentValidationAsync(update, performValidationAsync);
|
|
103
|
+
void validate(inputComponent.validationState, inputComponent.getLocalValue());
|
|
104
|
+
void validate(inputComponent.validationState, inputComponent.getLocalValue());
|
|
105
|
+
expect(performValidationAsync).toHaveBeenCalledTimes(1);
|
|
106
|
+
return [2 /*return*/];
|
|
107
|
+
});
|
|
108
|
+
}); });
|
|
109
|
+
it('should set component errors if validation fails', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
110
|
+
var errorMessage, performValidationAsync, mockUpdateFunction, inputComponent, update, validate;
|
|
111
|
+
return __generator(this, function (_a) {
|
|
112
|
+
switch (_a.label) {
|
|
113
|
+
case 0:
|
|
114
|
+
errorMessage = 'This field is invalid';
|
|
115
|
+
performValidationAsync = jest.fn().mockRejectedValue(new Error(errorMessage));
|
|
116
|
+
mockUpdateFunction = getUpdateFunctionMock(function () { return inputComponent; });
|
|
117
|
+
inputComponent = createTextInputComponent(__assign(__assign({}, defaultProps), { performValidationAsync: performValidationAsync, value: 'test' }), mockUpdateFunction);
|
|
118
|
+
update = getInputUpdateFunction('uid', mockUpdateFunction);
|
|
119
|
+
validate = getComponentValidationAsync(update, performValidationAsync);
|
|
120
|
+
void validate(inputComponent.validationState, inputComponent.getLocalValue());
|
|
121
|
+
return [4 /*yield*/, waitFor(function () {
|
|
122
|
+
return expect(inputComponent.validationState.messages.error).toEqual(errorMessage);
|
|
123
|
+
})];
|
|
124
|
+
case 1:
|
|
125
|
+
_a.sent();
|
|
126
|
+
return [2 /*return*/];
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
}); });
|
|
130
|
+
it('should ignore previous responses if a second persist has been triggered', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
131
|
+
var performValidationAsync, mockUpdateFunction, inputComponent, update, validate;
|
|
132
|
+
return __generator(this, function (_a) {
|
|
133
|
+
switch (_a.label) {
|
|
134
|
+
case 0:
|
|
135
|
+
jest.useFakeTimers();
|
|
136
|
+
performValidationAsync = jest
|
|
137
|
+
.fn()
|
|
138
|
+
.mockImplementationOnce(function (_a) {
|
|
139
|
+
var signal = _a.signal;
|
|
140
|
+
return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_b) {
|
|
141
|
+
return [2 /*return*/, abortableDelay(200, signal).then(function () { return 'response-1'; })];
|
|
142
|
+
}); });
|
|
143
|
+
})
|
|
144
|
+
.mockImplementationOnce(function (_a) {
|
|
145
|
+
var signal = _a.signal;
|
|
146
|
+
return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_b) {
|
|
147
|
+
return [2 /*return*/, abortableDelay(10, signal).then(function () { return 'response-2'; })];
|
|
148
|
+
}); });
|
|
149
|
+
});
|
|
150
|
+
mockUpdateFunction = getUpdateFunctionMock(function () { return inputComponent; });
|
|
151
|
+
inputComponent = createTextInputComponent(__assign(__assign({}, defaultProps), { performValidationAsync: performValidationAsync, value: 'test' }), mockUpdateFunction);
|
|
152
|
+
update = getInputUpdateFunction('uid', mockUpdateFunction);
|
|
153
|
+
validate = getComponentValidationAsync(update, performValidationAsync);
|
|
154
|
+
void validate(inputComponent.validationState, inputComponent.getLocalValue());
|
|
155
|
+
inputComponent.onChange('new-value');
|
|
156
|
+
void validate(inputComponent.validationState, inputComponent.getLocalValue());
|
|
157
|
+
// Second callback has resolved
|
|
158
|
+
return [4 /*yield*/, jest.advanceTimersByTimeAsync(100)];
|
|
159
|
+
case 1:
|
|
160
|
+
// Second callback has resolved
|
|
161
|
+
_a.sent();
|
|
162
|
+
return [4 /*yield*/, waitFor(function () { return expect(inputComponent.validationState.messages.success).toBe('response-2'); })];
|
|
163
|
+
case 2:
|
|
164
|
+
_a.sent();
|
|
165
|
+
// First callback has resolved, but value is ignored
|
|
166
|
+
return [4 /*yield*/, jest.advanceTimersByTimeAsync(100)];
|
|
167
|
+
case 3:
|
|
168
|
+
// First callback has resolved, but value is ignored
|
|
169
|
+
_a.sent();
|
|
170
|
+
return [4 /*yield*/, waitFor(function () { return expect(inputComponent.validationState.messages.success).toBe('response-2'); })];
|
|
171
|
+
case 4:
|
|
172
|
+
_a.sent();
|
|
173
|
+
return [2 /*return*/];
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
}); });
|
|
177
|
+
});
|
|
@@ -0,0 +1,266 @@
|
|
|
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 { getPerformValidationAsync } from './getPerformValidationAsync';
|
|
38
|
+
import { getMockHttpClient, respondWith } from '../../../../test-utils';
|
|
39
|
+
describe('getPerformValidationAsync', function () {
|
|
40
|
+
var trackEvent = jest.fn();
|
|
41
|
+
var signal = {};
|
|
42
|
+
var validationAsyncConfig = {
|
|
43
|
+
method: 'POST',
|
|
44
|
+
param: 'param',
|
|
45
|
+
url: '/validate'
|
|
46
|
+
};
|
|
47
|
+
it('should make the request using the specified parameter', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
48
|
+
var spyHttpClient, spyTrackEvent, performValidationAsync;
|
|
49
|
+
return __generator(this, function (_a) {
|
|
50
|
+
switch (_a.label) {
|
|
51
|
+
case 0:
|
|
52
|
+
spyHttpClient = jest
|
|
53
|
+
.fn()
|
|
54
|
+
.mockResolvedValue(respondWith({ message: 'Validation failed' }));
|
|
55
|
+
spyTrackEvent = jest.fn();
|
|
56
|
+
performValidationAsync = getPerformValidationAsync({
|
|
57
|
+
httpClient: spyHttpClient,
|
|
58
|
+
trackEvent: spyTrackEvent,
|
|
59
|
+
validationAsyncConfig: validationAsyncConfig,
|
|
60
|
+
schemaId: 'schemaId'
|
|
61
|
+
});
|
|
62
|
+
return [4 /*yield*/, performValidationAsync({ value: 'value', signal: signal })];
|
|
63
|
+
case 1:
|
|
64
|
+
_a.sent();
|
|
65
|
+
expect(spyHttpClient).toHaveBeenCalledWith('/validate', {
|
|
66
|
+
body: '{"param":"value"}',
|
|
67
|
+
headers: { 'Content-Type': 'application/json' },
|
|
68
|
+
method: 'POST',
|
|
69
|
+
signal: signal
|
|
70
|
+
});
|
|
71
|
+
expect(spyTrackEvent).toHaveBeenCalledWith('ValidationAsync Triggered', expect.objectContaining({ schema: 'schemaId' }));
|
|
72
|
+
return [2 /*return*/];
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}); });
|
|
76
|
+
it('should wrap blobs in form data before submitting', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
77
|
+
var spyHttpClient, performValidationAsync, file;
|
|
78
|
+
return __generator(this, function (_a) {
|
|
79
|
+
switch (_a.label) {
|
|
80
|
+
case 0:
|
|
81
|
+
spyHttpClient = jest
|
|
82
|
+
.fn()
|
|
83
|
+
.mockResolvedValue(respondWith({ message: 'Validation failed' }));
|
|
84
|
+
performValidationAsync = getPerformValidationAsync({
|
|
85
|
+
httpClient: spyHttpClient,
|
|
86
|
+
trackEvent: trackEvent,
|
|
87
|
+
validationAsyncConfig: validationAsyncConfig
|
|
88
|
+
});
|
|
89
|
+
file = new File(['file'], 'file.txt');
|
|
90
|
+
return [4 /*yield*/, performValidationAsync({ value: file, signal: signal })];
|
|
91
|
+
case 1:
|
|
92
|
+
_a.sent();
|
|
93
|
+
expect(spyHttpClient).toHaveBeenCalledWith('/validate', {
|
|
94
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
95
|
+
body: expect.any(FormData),
|
|
96
|
+
headers: {},
|
|
97
|
+
method: 'POST',
|
|
98
|
+
signal: signal
|
|
99
|
+
});
|
|
100
|
+
return [2 /*return*/];
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}); });
|
|
104
|
+
describe('when the response is ok', function () {
|
|
105
|
+
it('should respond with message if response includes one', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
106
|
+
var httpClient, spyTrackEvent, performValidationAsync, result;
|
|
107
|
+
return __generator(this, function (_a) {
|
|
108
|
+
switch (_a.label) {
|
|
109
|
+
case 0:
|
|
110
|
+
httpClient = getMockHttpClient({
|
|
111
|
+
'/validate': function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
112
|
+
return [2 /*return*/, respondWith({ message: 'Validation succeeded' })];
|
|
113
|
+
}); }); }
|
|
114
|
+
});
|
|
115
|
+
spyTrackEvent = jest.fn();
|
|
116
|
+
performValidationAsync = getPerformValidationAsync({
|
|
117
|
+
httpClient: httpClient,
|
|
118
|
+
trackEvent: spyTrackEvent,
|
|
119
|
+
validationAsyncConfig: validationAsyncConfig,
|
|
120
|
+
schemaId: 'schemaId'
|
|
121
|
+
});
|
|
122
|
+
return [4 /*yield*/, performValidationAsync({ value: 'value', signal: signal })];
|
|
123
|
+
case 1:
|
|
124
|
+
result = _a.sent();
|
|
125
|
+
expect(result).toBe('Validation succeeded');
|
|
126
|
+
expect(spyTrackEvent).toHaveBeenLastCalledWith('ValidationAsync Succeeded', expect.objectContaining({ schema: 'schemaId' }));
|
|
127
|
+
return [2 /*return*/];
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}); });
|
|
131
|
+
it('should respond with null if response does not include a message', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
132
|
+
var httpClient, spyTrackEvent, performValidationAsync, result;
|
|
133
|
+
return __generator(this, function (_a) {
|
|
134
|
+
switch (_a.label) {
|
|
135
|
+
case 0:
|
|
136
|
+
httpClient = getMockHttpClient({
|
|
137
|
+
'/validate': function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
138
|
+
return [2 /*return*/, respondWith({}, { status: 200 })];
|
|
139
|
+
}); }); }
|
|
140
|
+
});
|
|
141
|
+
spyTrackEvent = jest.fn();
|
|
142
|
+
performValidationAsync = getPerformValidationAsync({
|
|
143
|
+
httpClient: httpClient,
|
|
144
|
+
trackEvent: spyTrackEvent,
|
|
145
|
+
validationAsyncConfig: validationAsyncConfig,
|
|
146
|
+
schemaId: 'schemaId'
|
|
147
|
+
});
|
|
148
|
+
return [4 /*yield*/, performValidationAsync({ value: 'value', signal: signal })];
|
|
149
|
+
case 1:
|
|
150
|
+
result = _a.sent();
|
|
151
|
+
expect(result).toBeNull();
|
|
152
|
+
expect(spyTrackEvent).toHaveBeenLastCalledWith('ValidationAsync Succeeded', expect.objectContaining({ schema: 'schemaId' }));
|
|
153
|
+
return [2 /*return*/];
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}); });
|
|
157
|
+
});
|
|
158
|
+
describe('when the response is 422', function () {
|
|
159
|
+
it('should throw if the response includes a message', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
160
|
+
var httpClient, spyTrackEvent, performValidationAsync;
|
|
161
|
+
return __generator(this, function (_a) {
|
|
162
|
+
switch (_a.label) {
|
|
163
|
+
case 0:
|
|
164
|
+
httpClient = getMockHttpClient({
|
|
165
|
+
'/validate': function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
166
|
+
return [2 /*return*/, respondWith({ message: 'error with this field' }, { status: 422 })];
|
|
167
|
+
}); }); }
|
|
168
|
+
});
|
|
169
|
+
spyTrackEvent = jest.fn();
|
|
170
|
+
performValidationAsync = getPerformValidationAsync({
|
|
171
|
+
httpClient: httpClient,
|
|
172
|
+
trackEvent: spyTrackEvent,
|
|
173
|
+
validationAsyncConfig: validationAsyncConfig,
|
|
174
|
+
schemaId: 'schemaId'
|
|
175
|
+
});
|
|
176
|
+
return [4 /*yield*/, expect(performValidationAsync({ value: 'value', signal: signal })).rejects.toThrow('error with this field')];
|
|
177
|
+
case 1:
|
|
178
|
+
_a.sent();
|
|
179
|
+
expect(spyTrackEvent).toHaveBeenLastCalledWith('ValidationAsync Succeeded', expect.objectContaining({ schema: 'schemaId' }));
|
|
180
|
+
return [2 /*return*/];
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
}); });
|
|
184
|
+
it('should respond with null if response does not include a message', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
185
|
+
var httpClient, spyTrackEvent, performValidationAsync, result;
|
|
186
|
+
return __generator(this, function (_a) {
|
|
187
|
+
switch (_a.label) {
|
|
188
|
+
case 0:
|
|
189
|
+
httpClient = getMockHttpClient({
|
|
190
|
+
'/validate': function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
191
|
+
return [2 /*return*/, respondWith({}, { status: 422 })];
|
|
192
|
+
}); }); }
|
|
193
|
+
});
|
|
194
|
+
spyTrackEvent = jest.fn();
|
|
195
|
+
performValidationAsync = getPerformValidationAsync({
|
|
196
|
+
httpClient: httpClient,
|
|
197
|
+
trackEvent: spyTrackEvent,
|
|
198
|
+
validationAsyncConfig: validationAsyncConfig,
|
|
199
|
+
schemaId: 'schemaId'
|
|
200
|
+
});
|
|
201
|
+
return [4 /*yield*/, performValidationAsync({ value: 'value', signal: signal })];
|
|
202
|
+
case 1:
|
|
203
|
+
result = _a.sent();
|
|
204
|
+
expect(result).toBeNull();
|
|
205
|
+
expect(spyTrackEvent).toHaveBeenLastCalledWith('ValidationAsync Failed', expect.objectContaining({ schema: 'schemaId' }));
|
|
206
|
+
return [2 /*return*/];
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
}); });
|
|
210
|
+
});
|
|
211
|
+
describe('when the response is neither 2xx or 422', function () {
|
|
212
|
+
it('should track a failure and return null', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
213
|
+
var analytics, httpClient, spyTrackEvent, performValidationAsync, result;
|
|
214
|
+
return __generator(this, function (_a) {
|
|
215
|
+
switch (_a.label) {
|
|
216
|
+
case 0:
|
|
217
|
+
analytics = { something: 'important' };
|
|
218
|
+
httpClient = getMockHttpClient({
|
|
219
|
+
'/validate': function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
220
|
+
return [2 /*return*/, respondWith({ analytics: analytics }, { status: 500 })];
|
|
221
|
+
}); }); }
|
|
222
|
+
});
|
|
223
|
+
spyTrackEvent = jest.fn();
|
|
224
|
+
performValidationAsync = getPerformValidationAsync({
|
|
225
|
+
httpClient: httpClient,
|
|
226
|
+
trackEvent: spyTrackEvent,
|
|
227
|
+
validationAsyncConfig: validationAsyncConfig,
|
|
228
|
+
schemaId: 'schemaId'
|
|
229
|
+
});
|
|
230
|
+
return [4 /*yield*/, performValidationAsync({ value: 'value', signal: signal })];
|
|
231
|
+
case 1:
|
|
232
|
+
result = _a.sent();
|
|
233
|
+
expect(result).toBeNull();
|
|
234
|
+
expect(spyTrackEvent).toHaveBeenLastCalledWith('ValidationAsync Failed', expect.objectContaining({ schema: 'schemaId', something: 'important' }));
|
|
235
|
+
return [2 /*return*/];
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
}); });
|
|
239
|
+
it('should track and return null if the response fails', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
240
|
+
var httpClient, spyTrackEvent, performValidationAsync, result;
|
|
241
|
+
return __generator(this, function (_a) {
|
|
242
|
+
switch (_a.label) {
|
|
243
|
+
case 0:
|
|
244
|
+
httpClient = getMockHttpClient({
|
|
245
|
+
'/validate': function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
246
|
+
return [2 /*return*/, Promise.reject(new Error())];
|
|
247
|
+
}); }); }
|
|
248
|
+
});
|
|
249
|
+
spyTrackEvent = jest.fn();
|
|
250
|
+
performValidationAsync = getPerformValidationAsync({
|
|
251
|
+
httpClient: httpClient,
|
|
252
|
+
trackEvent: spyTrackEvent,
|
|
253
|
+
validationAsyncConfig: validationAsyncConfig,
|
|
254
|
+
schemaId: 'schemaId'
|
|
255
|
+
});
|
|
256
|
+
return [4 /*yield*/, performValidationAsync({ value: 'value', signal: signal })];
|
|
257
|
+
case 1:
|
|
258
|
+
result = _a.sent();
|
|
259
|
+
expect(result).toBeNull();
|
|
260
|
+
expect(spyTrackEvent).toHaveBeenLastCalledWith('ValidationAsync Failed', expect.objectContaining({ schema: 'schemaId' }));
|
|
261
|
+
return [2 /*return*/];
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
}); });
|
|
265
|
+
});
|
|
266
|
+
});
|