@ukhomeoffice/cop-react-form-renderer 6.14.0 → 6.14.2-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/dist/components/CheckYourAnswers/Answer.js +12 -11
- package/dist/components/CheckYourAnswers/Answer.test.js +132 -181
- package/dist/components/CheckYourAnswers/CheckYourAnswers.js +98 -133
- package/dist/components/CheckYourAnswers/CheckYourAnswers.test.js +544 -939
- package/dist/components/CheckYourAnswers/index.js +1 -1
- package/dist/components/CollectionPage/CollectionPage.js +62 -60
- package/dist/components/CollectionPage/CollectionPage.test.js +315 -365
- package/dist/components/CollectionPage/index.js +1 -1
- package/dist/components/CollectionSummary/BannerStrip.js +14 -14
- package/dist/components/CollectionSummary/BannerStrip.test.js +79 -74
- package/dist/components/CollectionSummary/CollectionSummary.js +75 -97
- package/dist/components/CollectionSummary/CollectionSummary.test.js +182 -166
- package/dist/components/CollectionSummary/Confirmation.js +15 -13
- package/dist/components/CollectionSummary/Confirmation.test.js +68 -63
- package/dist/components/CollectionSummary/RenderListView.js +34 -47
- package/dist/components/CollectionSummary/RenderListView.test.js +113 -111
- package/dist/components/CollectionSummary/SummaryCard.js +101 -133
- package/dist/components/CollectionSummary/SummaryCard.test.js +961 -993
- package/dist/components/CollectionSummary/SummaryCardButtons.js +25 -30
- package/dist/components/CollectionSummary/SummaryCardButtons.test.js +30 -28
- package/dist/components/CollectionSummary/SummaryCardDetails.js +59 -76
- package/dist/components/CollectionSummary/SummaryCardDetails.test.js +170 -180
- package/dist/components/CollectionSummary/SummaryCardValidationContext.js +31 -36
- package/dist/components/CollectionSummary/SummaryCardValidationContext.test.js +63 -75
- package/dist/components/CollectionSummary/index.js +1 -1
- package/dist/components/FormComponent/Collection.js +63 -100
- package/dist/components/FormComponent/Collection.test.js +907 -1080
- package/dist/components/FormComponent/Container.js +35 -29
- package/dist/components/FormComponent/Container.test.js +378 -409
- package/dist/components/FormComponent/FormComponent.js +59 -63
- package/dist/components/FormComponent/FormComponent.test.js +354 -415
- package/dist/components/FormComponent/helpers/addLabel.js +4 -7
- package/dist/components/FormComponent/helpers/getComponentDisabled.js +1 -1
- package/dist/components/FormComponent/helpers/getComponentDisabled.test.js +8 -8
- package/dist/components/FormComponent/helpers/getComponentError.js +3 -5
- package/dist/components/FormComponent/helpers/getComponentError.test.js +15 -15
- package/dist/components/FormComponent/helpers/getComponentFieldSet.js +3 -4
- package/dist/components/FormComponent/helpers/getComponentFieldSet.test.js +7 -7
- package/dist/components/FormComponent/helpers/index.js +5 -5
- package/dist/components/FormComponent/index.js +1 -1
- package/dist/components/FormPage/FormPage.js +70 -93
- package/dist/components/FormPage/FormPage.test.js +150 -202
- package/dist/components/FormPage/index.js +1 -1
- package/dist/components/FormRenderer/FormRenderer.js +131 -173
- package/dist/components/FormRenderer/FormRenderer.test.js +732 -1114
- package/dist/components/FormRenderer/handlers/cyaAction.js +3 -3
- package/dist/components/FormRenderer/handlers/getPageId.js +1 -3
- package/dist/components/FormRenderer/handlers/getPageId.test.js +15 -15
- package/dist/components/FormRenderer/handlers/handlers.test.js +33 -33
- package/dist/components/FormRenderer/handlers/index.js +2 -2
- package/dist/components/FormRenderer/handlers/navigate.js +4 -4
- package/dist/components/FormRenderer/handlers/submissionError.js +1 -1
- package/dist/components/FormRenderer/helpers/canActionProceed.js +1 -1
- package/dist/components/FormRenderer/helpers/canActionProceed.test.js +16 -16
- package/dist/components/FormRenderer/helpers/canCYASubmit.js +1 -3
- package/dist/components/FormRenderer/helpers/canCYASubmit.test.js +17 -21
- package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.js +22 -25
- package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.test.js +21 -21
- package/dist/components/FormRenderer/helpers/getCYA.js +4 -6
- package/dist/components/FormRenderer/helpers/getCYA.test.js +12 -12
- package/dist/components/FormRenderer/helpers/getFormState.js +6 -8
- package/dist/components/FormRenderer/helpers/getFormState.test.js +11 -11
- package/dist/components/FormRenderer/helpers/getNextPageId.js +14 -25
- package/dist/components/FormRenderer/helpers/getNextPageId.test.js +68 -68
- package/dist/components/FormRenderer/helpers/getPage.js +2 -4
- package/dist/components/FormRenderer/helpers/getPage.test.js +12 -12
- package/dist/components/FormRenderer/helpers/getRelevantPages.js +7 -9
- package/dist/components/FormRenderer/helpers/getRelevantPages.test.js +15 -15
- package/dist/components/FormRenderer/helpers/getSubmissionStatus.js +6 -6
- package/dist/components/FormRenderer/helpers/getSubmissionStatus.test.js +104 -98
- package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.js +44 -51
- package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.test.js +68 -74
- package/dist/components/FormRenderer/helpers/index.js +2 -2
- package/dist/components/FormRenderer/index.js +1 -1
- package/dist/components/FormRenderer/onCYAAction.js +43 -44
- package/dist/components/FormRenderer/onCYAAction.test.js +126 -133
- package/dist/components/FormRenderer/onPageAction.js +26 -35
- package/dist/components/FormRenderer/onPageAction.test.js +177 -186
- package/dist/components/FormRenderer/onTaskAction.js +11 -12
- package/dist/components/FormRenderer/onTaskAction.test.js +63 -68
- package/dist/components/PageActions/ActionButton.js +14 -14
- package/dist/components/PageActions/ActionButton.test.js +57 -79
- package/dist/components/PageActions/PageActions.js +11 -11
- package/dist/components/PageActions/PageActions.test.js +87 -116
- package/dist/components/PageActions/index.js +1 -1
- package/dist/components/SummaryList/GroupAction.js +10 -18
- package/dist/components/SummaryList/GroupAction.test.js +38 -34
- package/dist/components/SummaryList/RowAction.js +12 -17
- package/dist/components/SummaryList/RowAction.test.js +38 -34
- package/dist/components/SummaryList/SummaryList.js +23 -25
- package/dist/components/SummaryList/SummaryList.test.js +162 -189
- package/dist/components/SummaryList/SummaryListHeadingRow.js +7 -5
- package/dist/components/SummaryList/SummaryListHeadingRowWithAction.js +7 -5
- package/dist/components/SummaryList/SummaryListRow.js +7 -5
- package/dist/components/SummaryList/SummaryListTitleRow.js +6 -4
- package/dist/components/SummaryList/helpers/getGroupActionAttributes.js +3 -5
- package/dist/components/SummaryList/helpers/getGroupActionAttributes.test.js +23 -23
- package/dist/components/SummaryList/helpers/getRowActionAttributes.js +3 -5
- package/dist/components/SummaryList/helpers/getRowActionAttributes.test.js +23 -23
- package/dist/components/SummaryList/helpers/index.js +2 -2
- package/dist/components/SummaryList/index.js +1 -1
- package/dist/components/TaskList/Task.js +20 -30
- package/dist/components/TaskList/Task.test.js +84 -77
- package/dist/components/TaskList/TaskList.js +56 -79
- package/dist/components/TaskList/TaskList.test.js +149 -149
- package/dist/components/TaskList/TaskState.js +8 -6
- package/dist/components/TaskList/TaskState.test.js +53 -46
- package/dist/components/TaskList/index.js +1 -1
- package/dist/components/index.js +8 -8
- package/dist/context/HooksContext/HooksContext.js +56 -79
- package/dist/context/HooksContext/HooksContext.test.js +27 -36
- package/dist/context/HooksContext/index.js +3 -4
- package/dist/context/ValidationContext/ValidationContext.js +44 -95
- package/dist/context/ValidationContext/ValidationContext.test.js +57 -69
- package/dist/context/ValidationContext/index.js +3 -4
- package/dist/context/index.js +3 -3
- package/dist/hooks/index.js +10 -11
- package/dist/hooks/useAxios.js +15 -41
- package/dist/hooks/useGetRequest.js +62 -98
- package/dist/hooks/useHooks.js +1 -3
- package/dist/hooks/useRefData.js +25 -37
- package/dist/hooks/useValidation.js +1 -3
- package/dist/index.js +14 -15
- package/dist/models/CollectionLabels.js +1 -1
- package/dist/models/ComponentTypes.js +25 -25
- package/dist/models/EventTypes.js +4 -4
- package/dist/models/FormPages.js +4 -4
- package/dist/models/FormTypes.js +8 -8
- package/dist/models/HubFormats.js +3 -3
- package/dist/models/PageAction.js +44 -38
- package/dist/models/TaskStates.js +29 -28
- package/dist/models/index.js +10 -10
- package/dist/setupTests.js +30 -31
- package/dist/utils/CheckYourAnswers/getCYAAction.js +5 -5
- package/dist/utils/CheckYourAnswers/getCYAAction.test.js +53 -55
- package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.js +12 -21
- package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.test.js +32 -33
- package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.js +15 -28
- package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.test.js +41 -42
- package/dist/utils/CheckYourAnswers/getCYARow.js +7 -7
- package/dist/utils/CheckYourAnswers/getCYARow.test.js +87 -87
- package/dist/utils/CheckYourAnswers/getCYARowForGroup.js +19 -21
- package/dist/utils/CheckYourAnswers/getCYARowForGroup.test.js +16 -17
- package/dist/utils/CheckYourAnswers/getCYARowsForCollection.js +27 -34
- package/dist/utils/CheckYourAnswers/getCYARowsForCollection.test.js +48 -52
- package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.js +76 -93
- package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.test.js +110 -115
- package/dist/utils/CheckYourAnswers/getCYARowsForContainer.js +11 -16
- package/dist/utils/CheckYourAnswers/getCYARowsForContainer.test.js +112 -106
- package/dist/utils/CheckYourAnswers/getCYARowsForPage.js +14 -19
- package/dist/utils/CheckYourAnswers/getCYARowsForPage.test.js +69 -73
- package/dist/utils/CheckYourAnswers/getSummaryListRowForDetails.js +7 -8
- package/dist/utils/CheckYourAnswers/getSummaryListRowForDetails.test.js +15 -16
- package/dist/utils/CheckYourAnswers/index.js +2 -2
- package/dist/utils/CheckYourAnswers/showComponentCYA.js +5 -5
- package/dist/utils/CheckYourAnswers/showComponentCYA.test.js +26 -26
- package/dist/utils/CollectionPage/addCollectionPageEntry.js +2 -2
- package/dist/utils/CollectionPage/addCollectionPageEntry.test.js +6 -6
- package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.js +3 -3
- package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.test.js +18 -19
- package/dist/utils/CollectionPage/duplicateCollectionPageEntry.js +13 -20
- package/dist/utils/CollectionPage/duplicateCollectionPageEntry.test.js +48 -39
- package/dist/utils/CollectionPage/getCollectionPageActiveId.js +2 -2
- package/dist/utils/CollectionPage/getCollectionPageActiveId.test.js +11 -11
- package/dist/utils/CollectionPage/getCollectionPageActiveIndex.js +7 -11
- package/dist/utils/CollectionPage/getCollectionPageActiveIndex.test.js +23 -23
- package/dist/utils/CollectionPage/getCollectionPageData.js +8 -12
- package/dist/utils/CollectionPage/getCollectionPageData.test.js +20 -20
- package/dist/utils/CollectionPage/getErrorsForCollection.js +20 -21
- package/dist/utils/CollectionPage/getErrorsForCollection.test.js +21 -23
- package/dist/utils/CollectionPage/getQuickEditPage.js +22 -23
- package/dist/utils/CollectionPage/getQuickEditPage.test.js +17 -18
- package/dist/utils/CollectionPage/index.js +2 -2
- package/dist/utils/CollectionPage/mergeCollectionPages.js +26 -35
- package/dist/utils/CollectionPage/mergeCollectionPages.test.js +18 -18
- package/dist/utils/CollectionPage/removeCollectionPageEntry.js +5 -7
- package/dist/utils/CollectionPage/removeCollectionPageEntry.test.js +11 -11
- package/dist/utils/CollectionPage/setCollectionPageData.js +10 -16
- package/dist/utils/CollectionPage/setCollectionPageData.test.js +25 -25
- package/dist/utils/Component/addShowWhen.js +5 -6
- package/dist/utils/Component/addShowWhen.test.js +38 -38
- package/dist/utils/Component/applyToComponentTree.js +12 -15
- package/dist/utils/Component/applyToComponentTree.test.js +28 -31
- package/dist/utils/Component/cleanAttributes.js +12 -11
- package/dist/utils/Component/cleanAttributes.test.js +17 -18
- package/dist/utils/Component/elevateNestedComponents.js +6 -6
- package/dist/utils/Component/elevateNestedComponents.test.js +34 -34
- package/dist/utils/Component/getComponent.js +79 -85
- package/dist/utils/Component/getComponentTests/getComponent.autocomplete.test.js +19 -18
- package/dist/utils/Component/getComponentTests/getComponent.calculation.test.js +41 -58
- package/dist/utils/Component/getComponentTests/getComponent.checkboxes.test.js +40 -49
- package/dist/utils/Component/getComponentTests/getComponent.date.test.js +24 -34
- package/dist/utils/Component/getComponentTests/getComponent.details.test.js +21 -19
- package/dist/utils/Component/getComponentTests/getComponent.email.test.js +18 -23
- package/dist/utils/Component/getComponentTests/getComponent.file.test.js +21 -26
- package/dist/utils/Component/getComponentTests/getComponent.heading.test.js +11 -10
- package/dist/utils/Component/getComponentTests/getComponent.html.test.js +18 -16
- package/dist/utils/Component/getComponentTests/getComponent.insetText.test.js +10 -9
- package/dist/utils/Component/getComponentTests/getComponent.list.test.js +18 -16
- package/dist/utils/Component/getComponentTests/getComponent.multifile.test.js +23 -27
- package/dist/utils/Component/getComponentTests/getComponent.nested.test.js +201 -226
- package/dist/utils/Component/getComponentTests/getComponent.paragraph.test.js +18 -16
- package/dist/utils/Component/getComponentTests/getComponent.phoneNumber.test.js +18 -23
- package/dist/utils/Component/getComponentTests/getComponent.radios.test.js +58 -73
- package/dist/utils/Component/getComponentTests/getComponent.select.test.js +18 -23
- package/dist/utils/Component/getComponentTests/getComponent.text.test.js +18 -23
- package/dist/utils/Component/getComponentTests/getComponent.textArea.test.js +32 -39
- package/dist/utils/Component/getComponentTests/getComponent.time.test.js +21 -30
- package/dist/utils/Component/getComponentTests/getComponent.unknown.test.js +3 -3
- package/dist/utils/Component/getComponentTests/getComponent.warningText.test.js +10 -9
- package/dist/utils/Component/getDefaultValue.js +7 -9
- package/dist/utils/Component/getDefaultValue.test.js +13 -13
- package/dist/utils/Component/getDefaultValueFromConfig.js +16 -20
- package/dist/utils/Component/getDefaultValueFromConfig.test.js +32 -32
- package/dist/utils/Component/index.js +2 -2
- package/dist/utils/Component/isEditable.js +2 -4
- package/dist/utils/Component/isEditable.test.js +14 -15
- package/dist/utils/Component/optionIsSelected.js +2 -4
- package/dist/utils/Component/optionIsSelected.test.js +12 -12
- package/dist/utils/Component/setupContainerComponentsPath.js +23 -28
- package/dist/utils/Component/setupContainerComponentsPath.test.js +12 -12
- package/dist/utils/Component/showComponent.js +2 -2
- package/dist/utils/Component/showComponent.test.js +29 -29
- package/dist/utils/Component/wrapInFormGroup.js +4 -4
- package/dist/utils/Condition/index.js +2 -2
- package/dist/utils/Condition/meetsAllConditions.js +9 -9
- package/dist/utils/Condition/meetsAllConditions.test.js +21 -21
- package/dist/utils/Condition/meetsCondition.js +17 -26
- package/dist/utils/Condition/meetsCondition.test.js +403 -403
- package/dist/utils/Condition/meetsOneCondition.js +6 -6
- package/dist/utils/Condition/meetsOneCondition.test.js +17 -17
- package/dist/utils/Condition/setupConditions.js +12 -15
- package/dist/utils/Condition/setupConditions.test.js +8 -8
- package/dist/utils/Container/getEditableComponents.js +4 -6
- package/dist/utils/Container/getEditableComponents.test.js +44 -46
- package/dist/utils/Container/index.js +2 -2
- package/dist/utils/Container/setupNesting.js +14 -15
- package/dist/utils/Container/setupNesting.test.js +20 -23
- package/dist/utils/Container/showContainer.js +4 -8
- package/dist/utils/Container/showContainer.test.js +31 -31
- package/dist/utils/Data/applyFormula.js +30 -44
- package/dist/utils/Data/applyFormula.test.js +21 -21
- package/dist/utils/Data/deleteValues.js +4 -8
- package/dist/utils/Data/deleteValues.test.js +11 -11
- package/dist/utils/Data/getAutocompleteSource.js +72 -63
- package/dist/utils/Data/getAutocompleteSource.test.js +106 -98
- package/dist/utils/Data/getDataPath.js +18 -28
- package/dist/utils/Data/getDataPath.test.js +13 -13
- package/dist/utils/Data/getOptions.js +35 -42
- package/dist/utils/Data/getOptions.test.js +37 -38
- package/dist/utils/Data/getSourceData.js +6 -19
- package/dist/utils/Data/getSourceData.test.js +85 -81
- package/dist/utils/Data/index.js +2 -2
- package/dist/utils/Data/nestInRefdataOptions.js +9 -12
- package/dist/utils/Data/nestInRefdataOptions.test.js +17 -17
- package/dist/utils/Data/refDataToOptions.js +9 -10
- package/dist/utils/Data/refDataToOptions.test.js +20 -20
- package/dist/utils/Data/setDataItem.js +7 -8
- package/dist/utils/Data/setDataItem.test.js +38 -38
- package/dist/utils/Data/setupFormData.js +13 -20
- package/dist/utils/Data/setupFormData.test.js +48 -47
- package/dist/utils/Data/setupRefDataUrlForComponent.js +11 -20
- package/dist/utils/Data/setupRefDataUrlForComponent.test.js +25 -25
- package/dist/utils/FormPage/applyConditionalProperties.js +7 -8
- package/dist/utils/FormPage/applyConditionalProperties.test.js +14 -15
- package/dist/utils/FormPage/getConditionalText.js +4 -4
- package/dist/utils/FormPage/getConditionalText.test.js +30 -30
- package/dist/utils/FormPage/getFormPage.js +12 -15
- package/dist/utils/FormPage/getFormPage.test.js +23 -24
- package/dist/utils/FormPage/getFormPages.js +8 -11
- package/dist/utils/FormPage/getFormPages.test.js +15 -16
- package/dist/utils/FormPage/getPageActions.js +10 -13
- package/dist/utils/FormPage/getPageActions.test.js +33 -33
- package/dist/utils/FormPage/getParagraphFromText.js +5 -7
- package/dist/utils/FormPage/getParagraphFromText.test.js +7 -7
- package/dist/utils/FormPage/index.js +3 -5
- package/dist/utils/FormPage/showFormPage.js +4 -8
- package/dist/utils/FormPage/showFormPage.test.js +33 -33
- package/dist/utils/FormPage/showFormPageCYA.js +2 -2
- package/dist/utils/FormPage/showFormPageCYA.test.js +9 -9
- package/dist/utils/FormPage/useComponent.js +15 -23
- package/dist/utils/FormPage/useComponent.test.js +49 -50
- package/dist/utils/Format/formatData.js +1 -1
- package/dist/utils/Format/formatData.test.js +19 -19
- package/dist/utils/Format/formatDataForComponent.js +6 -7
- package/dist/utils/Format/formatDataForComponent.test.js +50 -78
- package/dist/utils/Format/formatDataForForm.js +5 -6
- package/dist/utils/Format/formatDataForForm.test.js +14 -17
- package/dist/utils/Format/formatDataForPage.js +4 -5
- package/dist/utils/Format/formatDataForPage.test.js +20 -25
- package/dist/utils/Format/index.js +2 -2
- package/dist/utils/Hub/getFormHub.js +2 -2
- package/dist/utils/Hub/getFormHub.test.js +23 -24
- package/dist/utils/Hub/index.js +2 -2
- package/dist/utils/Meta/constants.js +2 -2
- package/dist/utils/Meta/documents/getDocuments.js +1 -1
- package/dist/utils/Meta/documents/getDocuments.test.js +25 -17
- package/dist/utils/Meta/documents/index.js +2 -2
- package/dist/utils/Meta/documents/setDocumentsForField.js +12 -13
- package/dist/utils/Meta/documents/setDocumentsForField.test.js +70 -33
- package/dist/utils/Meta/index.js +2 -2
- package/dist/utils/Operate/checkValueIsTruthy.js +3 -3
- package/dist/utils/Operate/checkValueIsTruthy.test.js +17 -17
- package/dist/utils/Operate/deleteValueInFormData.js +2 -2
- package/dist/utils/Operate/deleteValueInFormData.test.js +15 -15
- package/dist/utils/Operate/getFirstOf.js +6 -6
- package/dist/utils/Operate/getFirstOf.test.js +32 -32
- package/dist/utils/Operate/getIndexOfMatchingValueIn.js +11 -11
- package/dist/utils/Operate/getIndexOfMatchingValueIn.test.js +47 -53
- package/dist/utils/Operate/getLength.js +9 -9
- package/dist/utils/Operate/getLength.test.js +19 -19
- package/dist/utils/Operate/index.js +2 -2
- package/dist/utils/Operate/persistValueInFormData.js +4 -4
- package/dist/utils/Operate/persistValueInFormData.test.js +23 -21
- package/dist/utils/Operate/runPageOperations.js +8 -8
- package/dist/utils/Operate/runPageOperations.test.js +24 -25
- package/dist/utils/Operate/setValueInFormData.js +3 -3
- package/dist/utils/Operate/setValueInFormData.test.js +17 -17
- package/dist/utils/Operate/shouldRun.js +7 -7
- package/dist/utils/Operate/shouldRun.test.js +22 -24
- package/dist/utils/Validate/additional/conditionallyPermittedChange.js +1 -1
- package/dist/utils/Validate/additional/conditionallyPermittedChange.test.js +15 -15
- package/dist/utils/Validate/additional/conditionallyRequired.js +4 -4
- package/dist/utils/Validate/additional/conditionallyRequired.test.js +19 -19
- package/dist/utils/Validate/additional/index.js +8 -8
- package/dist/utils/Validate/additional/index.test.js +22 -22
- package/dist/utils/Validate/additional/mustBeAfter.js +3 -3
- package/dist/utils/Validate/additional/mustBeAfter.test.js +41 -41
- package/dist/utils/Validate/additional/mustBeBefore.js +3 -3
- package/dist/utils/Validate/additional/mustBeBefore.test.js +29 -29
- package/dist/utils/Validate/additional/mustBeEarlierDateTime.js +8 -12
- package/dist/utils/Validate/additional/mustBeEarlierDateTime.test.js +37 -38
- package/dist/utils/Validate/additional/mustBeGreaterThan.js +2 -2
- package/dist/utils/Validate/additional/mustBeGreaterThan.test.js +19 -19
- package/dist/utils/Validate/additional/mustBeInTheFuture.js +3 -3
- package/dist/utils/Validate/additional/mustBeInTheFuture.test.js +13 -13
- package/dist/utils/Validate/additional/mustBeInThePast.js +4 -4
- package/dist/utils/Validate/additional/mustBeInThePast.test.js +13 -13
- package/dist/utils/Validate/additional/mustBeLessThan.js +2 -2
- package/dist/utils/Validate/additional/mustBeLessThan.test.js +18 -18
- package/dist/utils/Validate/additional/mustBeLongerThan.js +1 -1
- package/dist/utils/Validate/additional/mustBeLongerThan.test.js +17 -17
- package/dist/utils/Validate/additional/mustBeNumbersOnly.js +2 -2
- package/dist/utils/Validate/additional/mustBeNumbersOnly.test.js +21 -21
- package/dist/utils/Validate/additional/mustBeOneOf.js +1 -1
- package/dist/utils/Validate/additional/mustBeOneOf.test.js +13 -13
- package/dist/utils/Validate/additional/mustBeShorterThan.js +1 -1
- package/dist/utils/Validate/additional/mustBeShorterThan.test.js +17 -17
- package/dist/utils/Validate/additional/mustBeUniqueInCollection.js +5 -5
- package/dist/utils/Validate/additional/mustBeUniqueInCollection.test.js +35 -36
- package/dist/utils/Validate/additional/mustEnterAtLeastOne.js +2 -2
- package/dist/utils/Validate/additional/mustEnterAtLeastOne.test.js +15 -17
- package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.js +1 -1
- package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.test.js +13 -13
- package/dist/utils/Validate/additional/mustNotContainSql.js +3 -4
- package/dist/utils/Validate/additional/mustNotContainSql.test.js +15 -15
- package/dist/utils/Validate/additional/mustSelectOnlyOne.js +2 -2
- package/dist/utils/Validate/additional/mustSelectOnlyOne.test.js +29 -27
- package/dist/utils/Validate/additional/utils.js +9 -22
- package/dist/utils/Validate/index.js +2 -2
- package/dist/utils/Validate/validateCollection.js +18 -23
- package/dist/utils/Validate/validateCollection.test.js +75 -67
- package/dist/utils/Validate/validateComponent.js +19 -19
- package/dist/utils/Validate/validateComponent.test.js +179 -154
- package/dist/utils/Validate/validateContainer.js +14 -17
- package/dist/utils/Validate/validateContainer.test.js +59 -53
- package/dist/utils/Validate/validateDate.js +16 -22
- package/dist/utils/Validate/validateDate.test.js +31 -32
- package/dist/utils/Validate/validateEmail.js +7 -9
- package/dist/utils/Validate/validateEmail.test.js +27 -27
- package/dist/utils/Validate/validateMultifile.js +5 -7
- package/dist/utils/Validate/validateMultifile.test.js +17 -18
- package/dist/utils/Validate/validatePage.js +13 -18
- package/dist/utils/Validate/validatePage.test.js +198 -195
- package/dist/utils/Validate/validateRegex.js +3 -5
- package/dist/utils/Validate/validateRegex.test.js +15 -15
- package/dist/utils/Validate/validateRequired.js +4 -6
- package/dist/utils/Validate/validateRequired.test.js +19 -19
- package/dist/utils/Validate/validateTextArea.js +4 -6
- package/dist/utils/Validate/validateTextArea.test.js +21 -21
- package/dist/utils/Validate/validateTime.js +12 -19
- package/dist/utils/Validate/validateTime.test.js +27 -27
- package/dist/utils/index.js +5 -6
- package/package.json +2 -4
|
@@ -2,80 +2,84 @@
|
|
|
2
2
|
|
|
3
3
|
var _models = require("../../models");
|
|
4
4
|
var _validateContainer = _interopRequireDefault(require("./validateContainer"));
|
|
5
|
-
function _interopRequireDefault(
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
additionalValidation: additionalValidation
|
|
19
|
-
};
|
|
20
|
-
};
|
|
21
|
-
it('should return an empty array when the component is null', function () {
|
|
5
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
6
|
+
// Local imports
|
|
7
|
+
|
|
8
|
+
describe('utils.Validate.Container', () => {
|
|
9
|
+
const setup = (id, type, label, required, additionalValidation) => ({
|
|
10
|
+
id,
|
|
11
|
+
fieldId: id,
|
|
12
|
+
type,
|
|
13
|
+
label,
|
|
14
|
+
required,
|
|
15
|
+
additionalValidation
|
|
16
|
+
});
|
|
17
|
+
it('should return an empty array when the component is null', () => {
|
|
22
18
|
expect((0, _validateContainer.default)(null, {})).toEqual([]);
|
|
23
19
|
});
|
|
24
|
-
it('should return an empty array when the container has an undefined components array',
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
20
|
+
it('should return an empty array when the container has an undefined components array', () => {
|
|
21
|
+
const ID = 'container';
|
|
22
|
+
const LABEL = 'field';
|
|
23
|
+
const CONTAINER = setup(ID, _models.ComponentTypes.CONTAINER, LABEL, false);
|
|
28
24
|
expect((0, _validateContainer.default)(CONTAINER, null)).toEqual([]);
|
|
29
25
|
});
|
|
30
|
-
it('should return an empty array when the container has no components',
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
26
|
+
it('should return an empty array when the container has no components', () => {
|
|
27
|
+
const ID = 'container';
|
|
28
|
+
const LABEL = 'field';
|
|
29
|
+
const CONTAINER = setup(ID, _models.ComponentTypes.CONTAINER, LABEL, false);
|
|
34
30
|
CONTAINER.components = [];
|
|
35
31
|
expect((0, _validateContainer.default)(CONTAINER, null)).toEqual([]);
|
|
36
32
|
});
|
|
37
|
-
it('should return an empty array when the container has only valid components',
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
33
|
+
it('should return an empty array when the container has only valid components', () => {
|
|
34
|
+
const EMAIL_ID = 'email';
|
|
35
|
+
const EMAIL_LABEL = 'Email';
|
|
36
|
+
const EMAIL = setup(EMAIL_ID, _models.ComponentTypes.EMAIL, EMAIL_LABEL, false);
|
|
37
|
+
const ID = 'container';
|
|
38
|
+
const LABEL = 'field';
|
|
39
|
+
const CONTAINER = setup(ID, _models.ComponentTypes.CONTAINER, LABEL, false);
|
|
44
40
|
CONTAINER.components = [EMAIL];
|
|
45
|
-
|
|
41
|
+
const DATA = {
|
|
42
|
+
[ID]: {
|
|
43
|
+
[EMAIL_ID]: 'alpha.bravo@digital.homeoffice.gov.uk'
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
46
|
expect((0, _validateContainer.default)(CONTAINER, DATA)).toEqual([]);
|
|
47
47
|
});
|
|
48
|
-
it('should return an array containing an error when the container has an invalid component',
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
48
|
+
it('should return an array containing an error when the container has an invalid component', () => {
|
|
49
|
+
const EMAIL_ID = 'email';
|
|
50
|
+
const EMAIL_LABEL = 'Email';
|
|
51
|
+
const EMAIL = setup(EMAIL_ID, _models.ComponentTypes.EMAIL, EMAIL_LABEL, false);
|
|
52
|
+
const ID = 'container';
|
|
53
|
+
const LABEL = 'field';
|
|
54
|
+
const CONTAINER = setup(ID, _models.ComponentTypes.CONTAINER, LABEL, false);
|
|
55
55
|
CONTAINER.components = [EMAIL];
|
|
56
|
-
|
|
56
|
+
const DATA = {
|
|
57
|
+
[ID]: {
|
|
58
|
+
[EMAIL_ID]: 'alpha.bravo@digital.homeoffice.com'
|
|
59
|
+
}
|
|
60
|
+
};
|
|
57
61
|
expect((0, _validateContainer.default)(CONTAINER, DATA)).toEqual([{
|
|
58
62
|
id: "".concat(ID, ".").concat(EMAIL_ID),
|
|
59
63
|
error: "Enter ".concat(EMAIL_LABEL.toLowerCase(), " in the correct format, like jane.doe@homeoffice.gov.uk")
|
|
60
64
|
}]);
|
|
61
65
|
});
|
|
62
|
-
it('should apply optional validators when specified',
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
+
it('should apply optional validators when specified', () => {
|
|
67
|
+
const ID = 'container';
|
|
68
|
+
const DATA = {};
|
|
69
|
+
const ADDITIONAL_VALIDATION = [{
|
|
66
70
|
function: 'mustEnterAtLeastOne',
|
|
67
71
|
message: 'Must enter at least one'
|
|
68
72
|
}];
|
|
69
|
-
|
|
73
|
+
const COMPONENT = setup(ID, _models.ComponentTypes.DATE, null, false, ADDITIONAL_VALIDATION);
|
|
70
74
|
expect((0, _validateContainer.default)(COMPONENT, DATA)).toEqual({
|
|
71
75
|
error: 'Must enter at least one',
|
|
72
76
|
id: ID
|
|
73
77
|
});
|
|
74
78
|
});
|
|
75
|
-
it('should return an array containing errors for nested components if the container has them as children',
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
+
it('should return an array containing errors for nested components if the container has them as children', () => {
|
|
80
|
+
const ID = 'container';
|
|
81
|
+
const LABEL = 'field';
|
|
82
|
+
const CONTAINER = setup(ID, _models.ComponentTypes.CONTAINER, LABEL, false);
|
|
79
83
|
CONTAINER.components = [{
|
|
80
84
|
id: 'testRadio',
|
|
81
85
|
fieldId: 'testRadio',
|
|
@@ -96,9 +100,11 @@ describe('utils.Validate.Container', function () {
|
|
|
96
100
|
}]
|
|
97
101
|
}
|
|
98
102
|
}];
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
103
|
+
const DATA = {
|
|
104
|
+
[ID]: {
|
|
105
|
+
testRadio: 'yes'
|
|
106
|
+
}
|
|
107
|
+
};
|
|
102
108
|
expect((0, _validateContainer.default)(CONTAINER, DATA)).toEqual([{
|
|
103
109
|
id: "".concat(ID, ".nestedText"),
|
|
104
110
|
error: 'Nested text is required',
|
|
@@ -9,18 +9,15 @@ var _customParseFormat = _interopRequireDefault(require("dayjs/plugin/customPars
|
|
|
9
9
|
var _isToday = _interopRequireDefault(require("dayjs/plugin/isToday"));
|
|
10
10
|
var _isLeapYear = _interopRequireDefault(require("dayjs/plugin/isLeapYear"));
|
|
11
11
|
var _utils = require("./additional/utils");
|
|
12
|
-
function _interopRequireDefault(
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
16
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
17
|
-
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
18
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } // Global imports
|
|
12
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
+
// Global imports
|
|
14
|
+
|
|
19
15
|
// Local imports
|
|
16
|
+
|
|
20
17
|
_dayjs.default.extend(_customParseFormat.default);
|
|
21
18
|
_dayjs.default.extend(_isToday.default);
|
|
22
19
|
_dayjs.default.extend(_isLeapYear.default);
|
|
23
|
-
|
|
20
|
+
const maxMonthDays = (month, year) => {
|
|
24
21
|
if (month === '02') {
|
|
25
22
|
return (0, _dayjs.default)().year(year).isLeapYear() ? 29 : 28;
|
|
26
23
|
}
|
|
@@ -29,6 +26,7 @@ var maxMonthDays = exports.maxMonthDays = function maxMonthDays(month, year) {
|
|
|
29
26
|
}
|
|
30
27
|
return 31;
|
|
31
28
|
};
|
|
29
|
+
exports.maxMonthDays = maxMonthDays;
|
|
32
30
|
/**
|
|
33
31
|
* Checks if a date passed is a valid date.
|
|
34
32
|
* This will validate for 'leap years', missing components, invalid day, month or year components.
|
|
@@ -41,23 +39,19 @@ var maxMonthDays = exports.maxMonthDays = function maxMonthDays(month, year) {
|
|
|
41
39
|
* @returns an object with an error message and instructions for which parts of the date are in error
|
|
42
40
|
* or undefined for both if the date is valid
|
|
43
41
|
*/
|
|
44
|
-
|
|
42
|
+
const validateDate = date => {
|
|
45
43
|
if (!date) {
|
|
46
44
|
return {
|
|
47
45
|
message: undefined,
|
|
48
46
|
propsInError: undefined
|
|
49
47
|
};
|
|
50
48
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
var intDay = parseInt(day, 10);
|
|
58
|
-
var intMonth = parseInt(month, 10);
|
|
59
|
-
var badProps = [];
|
|
60
|
-
var messages = [];
|
|
49
|
+
const formattedDate = (0, _utils.formatString)(date);
|
|
50
|
+
const [day, month, year] = formattedDate.split('-');
|
|
51
|
+
const intDay = parseInt(day, 10);
|
|
52
|
+
const intMonth = parseInt(month, 10);
|
|
53
|
+
const badProps = [];
|
|
54
|
+
const messages = [];
|
|
61
55
|
if (year.length === 0) {
|
|
62
56
|
badProps.push('year');
|
|
63
57
|
messages.push('Date must include a year');
|
|
@@ -76,7 +70,7 @@ var validateDate = function validateDate(date) {
|
|
|
76
70
|
badProps.push('day');
|
|
77
71
|
messages.push('Date must include a day');
|
|
78
72
|
} else {
|
|
79
|
-
|
|
73
|
+
const maxDays = maxMonthDays(month, year);
|
|
80
74
|
if (intDay > maxDays || intDay < 1) {
|
|
81
75
|
badProps.push('day');
|
|
82
76
|
messages.push("Day must be between 1 and ".concat(maxDays));
|
|
@@ -84,7 +78,7 @@ var validateDate = function validateDate(date) {
|
|
|
84
78
|
}
|
|
85
79
|
if (badProps.length > 0) {
|
|
86
80
|
// return single error or generic error if multiple problem
|
|
87
|
-
|
|
81
|
+
const propsInError = {};
|
|
88
82
|
if (badProps.includes('day')) {
|
|
89
83
|
propsInError.day = true;
|
|
90
84
|
}
|
|
@@ -96,7 +90,7 @@ var validateDate = function validateDate(date) {
|
|
|
96
90
|
}
|
|
97
91
|
return {
|
|
98
92
|
message: badProps.length === 1 ? messages[0] : 'Enter a valid date',
|
|
99
|
-
propsInError
|
|
93
|
+
propsInError
|
|
100
94
|
};
|
|
101
95
|
}
|
|
102
96
|
if ((0, _dayjs.default)(formattedDate, _utils.DATE_FORMAT).format(_utils.DATE_FORMAT) !== formattedDate) {
|
|
@@ -1,34 +1,33 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
3
|
var _validateDate = _interopRequireWildcard(require("./validateDate"));
|
|
5
|
-
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function
|
|
6
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" !=
|
|
7
|
-
describe('utils',
|
|
8
|
-
describe('Validate',
|
|
9
|
-
describe('date',
|
|
10
|
-
test('should return no error when the value is an empty string',
|
|
4
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
5
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
6
|
+
describe('utils', () => {
|
|
7
|
+
describe('Validate', () => {
|
|
8
|
+
describe('date', () => {
|
|
9
|
+
test('should return no error when the value is an empty string', () => {
|
|
11
10
|
expect((0, _validateDate.default)('', 'DD-MM-YYYY')).toEqual({
|
|
12
11
|
message: undefined,
|
|
13
12
|
propsInError: undefined
|
|
14
13
|
});
|
|
15
14
|
});
|
|
16
|
-
test('should return undefined if a date string is valid',
|
|
17
|
-
|
|
15
|
+
test('should return undefined if a date string is valid', () => {
|
|
16
|
+
const output = (0, _validateDate.default)('28-02-2024', 'DD-MM-YYYY');
|
|
18
17
|
expect(output).toEqual({
|
|
19
18
|
message: undefined,
|
|
20
19
|
propsInError: undefined
|
|
21
20
|
});
|
|
22
21
|
});
|
|
23
|
-
test('should return undefined to a correct leap year date',
|
|
24
|
-
|
|
22
|
+
test('should return undefined to a correct leap year date', () => {
|
|
23
|
+
const output = (0, _validateDate.default)('29-02-2024', 'DD-MM-YYYY');
|
|
25
24
|
expect(output).toEqual({
|
|
26
25
|
message: undefined,
|
|
27
26
|
propsInError: undefined
|
|
28
27
|
});
|
|
29
28
|
});
|
|
30
|
-
test('should validate false if NOT a leap year & 29 Feb is entered',
|
|
31
|
-
|
|
29
|
+
test('should validate false if NOT a leap year & 29 Feb is entered', () => {
|
|
30
|
+
const output = (0, _validateDate.default)('29-02-2023', 'DD-MM-YYYY');
|
|
32
31
|
expect(output).toEqual({
|
|
33
32
|
message: 'Day must be between 1 and 28',
|
|
34
33
|
propsInError: {
|
|
@@ -36,8 +35,8 @@ describe('utils', function () {
|
|
|
36
35
|
}
|
|
37
36
|
});
|
|
38
37
|
});
|
|
39
|
-
test('should return an error if no year is given',
|
|
40
|
-
|
|
38
|
+
test('should return an error if no year is given', () => {
|
|
39
|
+
const output = (0, _validateDate.default)('29-02-', 'DD-MM-YYYY');
|
|
41
40
|
expect(output).toEqual({
|
|
42
41
|
message: 'Date must include a year',
|
|
43
42
|
propsInError: {
|
|
@@ -45,8 +44,8 @@ describe('utils', function () {
|
|
|
45
44
|
}
|
|
46
45
|
});
|
|
47
46
|
});
|
|
48
|
-
test('should return an error if the year contains less than 4 numbers',
|
|
49
|
-
|
|
47
|
+
test('should return an error if the year contains less than 4 numbers', () => {
|
|
48
|
+
const output = (0, _validateDate.default)('29-02-20', 'DD-MM-YYYY');
|
|
50
49
|
expect(output).toEqual({
|
|
51
50
|
message: 'Year must be 4 numbers',
|
|
52
51
|
propsInError: {
|
|
@@ -54,9 +53,9 @@ describe('utils', function () {
|
|
|
54
53
|
}
|
|
55
54
|
});
|
|
56
55
|
});
|
|
57
|
-
test('should return an error if the year contains more than 4 numbers',
|
|
56
|
+
test('should return an error if the year contains more than 4 numbers', () => {
|
|
58
57
|
// 20202 is not a leap year,so 29th Feb not valid
|
|
59
|
-
|
|
58
|
+
const output = (0, _validateDate.default)('28-02-20202', 'DD-MM-YYYY');
|
|
60
59
|
expect(output).toEqual({
|
|
61
60
|
message: 'Year must be 4 numbers',
|
|
62
61
|
propsInError: {
|
|
@@ -64,8 +63,8 @@ describe('utils', function () {
|
|
|
64
63
|
}
|
|
65
64
|
});
|
|
66
65
|
});
|
|
67
|
-
test('should return an error if no month is given',
|
|
68
|
-
|
|
66
|
+
test('should return an error if no month is given', () => {
|
|
67
|
+
const output = (0, _validateDate.default)('29--2020', 'DD-MM-YYYY');
|
|
69
68
|
expect(output).toEqual({
|
|
70
69
|
message: 'Date must include a month',
|
|
71
70
|
propsInError: {
|
|
@@ -73,8 +72,8 @@ describe('utils', function () {
|
|
|
73
72
|
}
|
|
74
73
|
});
|
|
75
74
|
});
|
|
76
|
-
test('should return an error if the month is not between 1 and 12',
|
|
77
|
-
|
|
75
|
+
test('should return an error if the month is not between 1 and 12', () => {
|
|
76
|
+
const output = (0, _validateDate.default)('29-14-2020', 'DD-MM-YYYY');
|
|
78
77
|
expect(output).toEqual({
|
|
79
78
|
message: 'Month must be between 1 and 12',
|
|
80
79
|
propsInError: {
|
|
@@ -82,8 +81,8 @@ describe('utils', function () {
|
|
|
82
81
|
}
|
|
83
82
|
});
|
|
84
83
|
});
|
|
85
|
-
test('should return an error if no day is given',
|
|
86
|
-
|
|
84
|
+
test('should return an error if no day is given', () => {
|
|
85
|
+
const output = (0, _validateDate.default)('-03-2020', 'DD-MM-YYYY');
|
|
87
86
|
expect(output).toEqual({
|
|
88
87
|
message: 'Date must include a day',
|
|
89
88
|
propsInError: {
|
|
@@ -91,8 +90,8 @@ describe('utils', function () {
|
|
|
91
90
|
}
|
|
92
91
|
});
|
|
93
92
|
});
|
|
94
|
-
test('should return an error if the day is not between 1 and 31',
|
|
95
|
-
|
|
93
|
+
test('should return an error if the day is not between 1 and 31', () => {
|
|
94
|
+
const output = (0, _validateDate.default)('45-12-2020', 'DD-MM-YYYY');
|
|
96
95
|
expect(output).toEqual({
|
|
97
96
|
message: 'Day must be between 1 and 31',
|
|
98
97
|
propsInError: {
|
|
@@ -100,8 +99,8 @@ describe('utils', function () {
|
|
|
100
99
|
}
|
|
101
100
|
});
|
|
102
101
|
});
|
|
103
|
-
test('should handle multiple errors',
|
|
104
|
-
|
|
102
|
+
test('should handle multiple errors', () => {
|
|
103
|
+
const output = (0, _validateDate.default)('45-13-2020', 'DD-MM-YYYY');
|
|
105
104
|
expect(output).toEqual({
|
|
106
105
|
message: 'Enter a valid date',
|
|
107
106
|
propsInError: {
|
|
@@ -109,7 +108,7 @@ describe('utils', function () {
|
|
|
109
108
|
month: true
|
|
110
109
|
}
|
|
111
110
|
});
|
|
112
|
-
|
|
111
|
+
const output2 = (0, _validateDate.default)('45-13-', 'DD-MM-YYYY');
|
|
113
112
|
expect(output2).toEqual({
|
|
114
113
|
message: 'Enter a valid date',
|
|
115
114
|
propsInError: {
|
|
@@ -119,8 +118,8 @@ describe('utils', function () {
|
|
|
119
118
|
}
|
|
120
119
|
});
|
|
121
120
|
});
|
|
122
|
-
test('should correctly identify the maximum numbers of days in a given month and year',
|
|
123
|
-
|
|
121
|
+
test('should correctly identify the maximum numbers of days in a given month and year', () => {
|
|
122
|
+
let max = (0, _validateDate.maxMonthDays)('02', '2024');
|
|
124
123
|
expect(max).toEqual(29);
|
|
125
124
|
max = (0, _validateDate.maxMonthDays)('02', '2023');
|
|
126
125
|
expect(max).toEqual(28);
|
|
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
// eslint-disable-next-line no-control-regex
|
|
8
8
|
// const EMAIL_REGEX = /(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/i;
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
const HODS_EMAIL_REGEX = /^[a-z0-9._\-']+@(digital\.)?homeoffice.gov.uk$/i;
|
|
10
|
+
const JMSC_EMAIL_REGEX = /^[a-z0-9._\-']+@jmsc.gov.uk$/i;
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Validates an email address, ensuring it is in the correct domain and
|
|
@@ -20,21 +20,19 @@ var JMSC_EMAIL_REGEX = /^[a-z0-9._\-']+@jmsc.gov.uk$/i;
|
|
|
20
20
|
* @param {array} customErrors The array of custom errors to use for format message.
|
|
21
21
|
* @returns An error if the email address is invalid.
|
|
22
22
|
*/
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
const validateEmail = function (value) {
|
|
24
|
+
let label = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
25
|
+
let customErrors = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
26
26
|
// eslint-disable-next-line no-extra-boolean-cast
|
|
27
27
|
if (!!value) {
|
|
28
|
-
|
|
28
|
+
const name = label ? label.toLowerCase() : 'email address';
|
|
29
29
|
if (typeof value === 'string') {
|
|
30
30
|
if (HODS_EMAIL_REGEX.test(value) || JMSC_EMAIL_REGEX.test(value)) {
|
|
31
31
|
return undefined;
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
if (Array.isArray(customErrors)) {
|
|
35
|
-
|
|
36
|
-
return error.type === 'format';
|
|
37
|
-
});
|
|
35
|
+
const result = customErrors.filter(error => error.type === 'format');
|
|
38
36
|
if (result && result.length > 0 && result[0].message) {
|
|
39
37
|
return result[0].message;
|
|
40
38
|
}
|
|
@@ -1,72 +1,72 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _validateEmail = _interopRequireDefault(require("./validateEmail"));
|
|
4
|
-
function _interopRequireDefault(
|
|
4
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
5
5
|
// Local imports
|
|
6
6
|
|
|
7
|
-
describe('utils',
|
|
8
|
-
describe('Validate',
|
|
9
|
-
describe('email',
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
describe('utils', () => {
|
|
8
|
+
describe('Validate', () => {
|
|
9
|
+
describe('email', () => {
|
|
10
|
+
const LABEL = 'Component';
|
|
11
|
+
const ERROR = "Enter ".concat(LABEL.toLowerCase(), " in the correct format, like jane.doe@homeoffice.gov.uk");
|
|
12
12
|
|
|
13
13
|
// Valid values
|
|
14
|
-
it('should return no error when the value is a valid .gov.uk address',
|
|
14
|
+
it('should return no error when the value is a valid .gov.uk address', () => {
|
|
15
15
|
expect((0, _validateEmail.default)('alpha@homeoffice.gov.uk', LABEL)).toBeUndefined();
|
|
16
16
|
});
|
|
17
|
-
it('should return no error when the value is a valid jmsc.gov.uk address',
|
|
17
|
+
it('should return no error when the value is a valid jmsc.gov.uk address', () => {
|
|
18
18
|
expect((0, _validateEmail.default)('alpha@jmsc.gov.uk', LABEL)).toBeUndefined();
|
|
19
19
|
});
|
|
20
|
-
it('should return no error when the value is a capitalised digital.homeoffice.gov.uk address',
|
|
20
|
+
it('should return no error when the value is a capitalised digital.homeoffice.gov.uk address', () => {
|
|
21
21
|
expect((0, _validateEmail.default)('ALPHA.BRAVO@DIGITAL.HOMEOFFICE.GOV.UK', LABEL)).toBeUndefined();
|
|
22
22
|
});
|
|
23
|
-
it('should return no error when the value is an empty string',
|
|
23
|
+
it('should return no error when the value is an empty string', () => {
|
|
24
24
|
expect((0, _validateEmail.default)('', LABEL)).toBeUndefined();
|
|
25
25
|
});
|
|
26
26
|
|
|
27
27
|
// Invalid values
|
|
28
|
-
it('should return an error when the value is an empty object',
|
|
28
|
+
it('should return an error when the value is an empty object', () => {
|
|
29
29
|
expect((0, _validateEmail.default)({}, LABEL)).toEqual(ERROR);
|
|
30
30
|
});
|
|
31
|
-
it('should return an error when the value is an array',
|
|
31
|
+
it('should return an error when the value is an array', () => {
|
|
32
32
|
expect((0, _validateEmail.default)(['bob'], LABEL)).toEqual(ERROR);
|
|
33
33
|
});
|
|
34
|
-
it('should return an error when the value is numeric',
|
|
34
|
+
it('should return an error when the value is numeric', () => {
|
|
35
35
|
expect((0, _validateEmail.default)(24, LABEL)).toEqual(ERROR);
|
|
36
36
|
});
|
|
37
|
-
it('should return an error when the value is in the wrong domain',
|
|
37
|
+
it('should return an error when the value is in the wrong domain', () => {
|
|
38
38
|
expect((0, _validateEmail.default)('alpha@domain.com', LABEL)).toEqual(ERROR);
|
|
39
39
|
});
|
|
40
|
-
it('should return an error when the domain contains spaces',
|
|
40
|
+
it('should return an error when the domain contains spaces', () => {
|
|
41
41
|
expect((0, _validateEmail.default)('alpha.bravo@digital homeoffice.gov.uk', LABEL)).toEqual(ERROR);
|
|
42
42
|
});
|
|
43
|
-
it('should return an error when the value has no TLD',
|
|
43
|
+
it('should return an error when the value has no TLD', () => {
|
|
44
44
|
expect((0, _validateEmail.default)('alpha.bravo@homeoffice', LABEL)).toEqual(ERROR);
|
|
45
45
|
});
|
|
46
|
-
it('should return an error when there is no name',
|
|
46
|
+
it('should return an error when there is no name', () => {
|
|
47
47
|
expect((0, _validateEmail.default)('@homeoffice.gov.uk', LABEL)).toEqual(ERROR);
|
|
48
48
|
});
|
|
49
|
-
it('should return an error when there is no @ symbol',
|
|
49
|
+
it('should return an error when there is no @ symbol', () => {
|
|
50
50
|
expect((0, _validateEmail.default)('alpha.bravo.homeoffice.gov.uk', LABEL)).toEqual(ERROR);
|
|
51
51
|
});
|
|
52
|
-
it('should return an error when the name contains spaces',
|
|
52
|
+
it('should return an error when the name contains spaces', () => {
|
|
53
53
|
expect((0, _validateEmail.default)('alpha bravo@digital.homeoffice.gov.uk', LABEL)).toEqual(ERROR);
|
|
54
54
|
});
|
|
55
|
-
it('should use a default label when none is specified',
|
|
56
|
-
|
|
55
|
+
it('should use a default label when none is specified', () => {
|
|
56
|
+
const DEFAULT_ERROR = 'Enter email address in the correct format, like jane.doe@homeoffice.gov.uk';
|
|
57
57
|
expect((0, _validateEmail.default)(['bob'], undefined)).toEqual(DEFAULT_ERROR);
|
|
58
58
|
});
|
|
59
|
-
it('should use a custom format error message when specified',
|
|
60
|
-
|
|
59
|
+
it('should use a custom format error message when specified', () => {
|
|
60
|
+
const customErrors = [{
|
|
61
61
|
'type': 'format',
|
|
62
62
|
'message': 'Enter email address in the correct format'
|
|
63
63
|
}];
|
|
64
|
-
|
|
64
|
+
const CUSTOM_ERROR = 'Enter email address in the correct format';
|
|
65
65
|
expect((0, _validateEmail.default)('bob', '', customErrors)).toEqual(CUSTOM_ERROR);
|
|
66
66
|
});
|
|
67
|
-
it('should use the default format error message when custom errors is not an array',
|
|
68
|
-
|
|
69
|
-
|
|
67
|
+
it('should use the default format error message when custom errors is not an array', () => {
|
|
68
|
+
const DEFAULT_ERROR = 'Enter email address in the correct format, like jane.doe@homeoffice.gov.uk';
|
|
69
|
+
const customErrors = {
|
|
70
70
|
'type': 'format',
|
|
71
71
|
'message': 'Enter email address in the correct format'
|
|
72
72
|
};
|
|
@@ -4,21 +4,19 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = exports.DEFAULT_ERROR = void 0;
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
const DEFAULT_ERROR = exports.DEFAULT_ERROR = 'Invalid files must be deleted';
|
|
8
|
+
const validateMultifile = (value, customErrors) => {
|
|
9
9
|
if (!value) {
|
|
10
10
|
return undefined;
|
|
11
11
|
}
|
|
12
|
-
|
|
13
|
-
value.every(
|
|
12
|
+
let inError = false;
|
|
13
|
+
value.every(entry => {
|
|
14
14
|
inError = entry.error;
|
|
15
15
|
return !inError;
|
|
16
16
|
});
|
|
17
17
|
if (inError) {
|
|
18
18
|
if (Array.isArray(customErrors)) {
|
|
19
|
-
|
|
20
|
-
return error.type === 'invalidFile';
|
|
21
|
-
});
|
|
19
|
+
const result = customErrors.filter(error => error.type === 'invalidFile');
|
|
22
20
|
if (result && result.length > 0 && result[0].message) {
|
|
23
21
|
return result[0].message;
|
|
24
22
|
}
|
|
@@ -1,43 +1,42 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
3
|
var _validateMultifile = _interopRequireWildcard(require("./validateMultifile"));
|
|
5
|
-
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function
|
|
6
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" !=
|
|
4
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
5
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
7
6
|
// Local imports
|
|
8
7
|
|
|
9
|
-
describe('utils',
|
|
10
|
-
describe('Validate',
|
|
11
|
-
describe('multifile',
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
describe('utils', () => {
|
|
9
|
+
describe('Validate', () => {
|
|
10
|
+
describe('multifile', () => {
|
|
11
|
+
const ERROR_MSG = 'This is a custom error message';
|
|
12
|
+
const CUSTOM_ERRORS = [{
|
|
14
13
|
type: 'invalidFile',
|
|
15
14
|
message: ERROR_MSG
|
|
16
15
|
}];
|
|
17
16
|
|
|
18
17
|
// Valid values.
|
|
19
|
-
it('should return no error when value is nullish',
|
|
20
|
-
|
|
18
|
+
it('should return no error when value is nullish', () => {
|
|
19
|
+
const VALUE = null;
|
|
21
20
|
expect((0, _validateMultifile.default)(VALUE, [])).toBeUndefined();
|
|
22
21
|
});
|
|
23
|
-
it('should return no error when value is an empty array',
|
|
24
|
-
|
|
22
|
+
it('should return no error when value is an empty array', () => {
|
|
23
|
+
const VALUE = [];
|
|
25
24
|
expect((0, _validateMultifile.default)(VALUE, [])).toBeUndefined();
|
|
26
25
|
});
|
|
27
|
-
it('should return no error when value only contains valid files',
|
|
28
|
-
|
|
26
|
+
it('should return no error when value only contains valid files', () => {
|
|
27
|
+
const VALUE = [{}, {}];
|
|
29
28
|
expect((0, _validateMultifile.default)(VALUE, [])).toBeUndefined();
|
|
30
29
|
});
|
|
31
30
|
|
|
32
31
|
// Invalid values.
|
|
33
|
-
it('should return an error when valid contains invalid files',
|
|
34
|
-
|
|
32
|
+
it('should return an error when valid contains invalid files', () => {
|
|
33
|
+
const VALUE = [{
|
|
35
34
|
error: 'This is an invalid file'
|
|
36
35
|
}];
|
|
37
36
|
expect((0, _validateMultifile.default)(VALUE, [])).toEqual(_validateMultifile.DEFAULT_ERROR);
|
|
38
37
|
});
|
|
39
|
-
it('should return a custom error when one is provided',
|
|
40
|
-
|
|
38
|
+
it('should return a custom error when one is provided', () => {
|
|
39
|
+
const VALUE = [{
|
|
41
40
|
error: 'This is an invalid file'
|
|
42
41
|
}];
|
|
43
42
|
expect((0, _validateMultifile.default)(VALUE, CUSTOM_ERRORS)).toEqual(ERROR_MSG);
|