@ukhomeoffice/cop-react-form-renderer 5.14.0 → 5.14.4
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/dist/components/CheckYourAnswers/Answer.js +15 -15
- package/dist/components/CheckYourAnswers/Answer.test.js +94 -128
- package/dist/components/CheckYourAnswers/CheckYourAnswers.js +99 -129
- package/dist/components/CheckYourAnswers/CheckYourAnswers.test.js +291 -501
- package/dist/components/CheckYourAnswers/index.js +2 -3
- package/dist/components/CollectionPage/CollectionPage.js +64 -58
- package/dist/components/CollectionPage/CollectionPage.test.js +212 -238
- package/dist/components/CollectionPage/index.js +2 -3
- package/dist/components/FormComponent/Collection.js +77 -113
- package/dist/components/FormComponent/Collection.test.js +688 -787
- package/dist/components/FormComponent/Container.js +44 -43
- package/dist/components/FormComponent/Container.test.js +316 -346
- package/dist/components/FormComponent/FormComponent.js +58 -64
- package/dist/components/FormComponent/FormComponent.test.js +180 -219
- package/dist/components/FormComponent/helpers/addLabel.js +5 -9
- package/dist/components/FormComponent/helpers/getComponentDisabled.js +2 -3
- package/dist/components/FormComponent/helpers/getComponentDisabled.test.js +8 -8
- package/dist/components/FormComponent/helpers/getComponentError.js +4 -7
- package/dist/components/FormComponent/helpers/getComponentError.test.js +15 -15
- package/dist/components/FormComponent/helpers/getComponentFieldSet.js +2 -2
- 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 +2 -3
- package/dist/components/FormPage/FormPage.js +65 -79
- package/dist/components/FormPage/FormPage.test.js +134 -170
- package/dist/components/FormPage/index.js +2 -3
- package/dist/components/FormRenderer/FormRenderer.js +151 -193
- package/dist/components/FormRenderer/FormRenderer.test.js +598 -920
- package/dist/components/FormRenderer/handlers/cyaAction.js +4 -5
- package/dist/components/FormRenderer/handlers/getPageId.js +2 -5
- 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 +3 -4
- package/dist/components/FormRenderer/handlers/navigate.js +5 -6
- package/dist/components/FormRenderer/handlers/submissionError.js +2 -3
- package/dist/components/FormRenderer/helpers/canActionProceed.js +2 -3
- package/dist/components/FormRenderer/helpers/canActionProceed.test.js +10 -10
- package/dist/components/FormRenderer/helpers/canCYASubmit.js +2 -5
- package/dist/components/FormRenderer/helpers/canCYASubmit.test.js +17 -21
- package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.js +19 -27
- package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.test.js +17 -17
- package/dist/components/FormRenderer/helpers/getCYA.js +6 -9
- package/dist/components/FormRenderer/helpers/getCYA.test.js +12 -12
- package/dist/components/FormRenderer/helpers/getFormState.js +7 -10
- package/dist/components/FormRenderer/helpers/getFormState.test.js +11 -11
- package/dist/components/FormRenderer/helpers/getNextPageId.js +19 -34
- package/dist/components/FormRenderer/helpers/getNextPageId.test.js +68 -68
- package/dist/components/FormRenderer/helpers/getPage.js +3 -6
- package/dist/components/FormRenderer/helpers/getPage.test.js +12 -12
- package/dist/components/FormRenderer/helpers/getRelevantPages.js +9 -13
- package/dist/components/FormRenderer/helpers/getRelevantPages.test.js +15 -15
- package/dist/components/FormRenderer/helpers/getSubmissionStatus.js +12 -13
- package/dist/components/FormRenderer/helpers/getSubmissionStatus.test.js +98 -92
- package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.js +66 -66
- package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.test.js +72 -79
- package/dist/components/FormRenderer/helpers/index.js +3 -4
- package/dist/components/FormRenderer/index.js +2 -3
- package/dist/components/FormRenderer/onCYAAction.js +52 -62
- package/dist/components/FormRenderer/onCYAAction.test.js +146 -138
- package/dist/components/FormRenderer/onPageAction.js +48 -47
- package/dist/components/FormRenderer/onPageAction.test.js +219 -205
- package/dist/components/FormRenderer/onTaskAction.js +12 -17
- package/dist/components/FormRenderer/onTaskAction.test.js +94 -89
- package/dist/components/PageActions/ActionButton.js +15 -19
- package/dist/components/PageActions/ActionButton.test.js +58 -79
- package/dist/components/PageActions/PageActions.js +12 -13
- package/dist/components/PageActions/PageActions.test.js +88 -116
- package/dist/components/PageActions/index.js +2 -3
- package/dist/components/SummaryList/GroupAction.js +15 -23
- package/dist/components/SummaryList/GroupAction.test.js +41 -37
- package/dist/components/SummaryList/RowAction.js +14 -19
- package/dist/components/SummaryList/RowAction.test.js +41 -37
- package/dist/components/SummaryList/SummaryList.js +25 -30
- package/dist/components/SummaryList/SummaryList.test.js +160 -182
- package/dist/components/SummaryList/SummaryListHeadingRow.js +9 -8
- package/dist/components/SummaryList/SummaryListRow.js +9 -8
- package/dist/components/SummaryList/SummaryListTitleRow.js +8 -7
- package/dist/components/SummaryList/helpers/getGroupActionAttributes.js +5 -8
- package/dist/components/SummaryList/helpers/getGroupActionAttributes.test.js +24 -24
- package/dist/components/SummaryList/helpers/getRowActionAttributes.js +5 -8
- package/dist/components/SummaryList/helpers/getRowActionAttributes.test.js +24 -24
- package/dist/components/SummaryList/helpers/index.js +2 -2
- package/dist/components/SummaryList/index.js +2 -3
- package/dist/components/TaskList/Task.js +22 -33
- package/dist/components/TaskList/Task.test.js +84 -77
- package/dist/components/TaskList/TaskList.js +46 -75
- package/dist/components/TaskList/TaskList.test.js +118 -113
- package/dist/components/TaskList/TaskState.js +9 -9
- package/dist/components/TaskList/TaskState.test.js +56 -49
- package/dist/components/TaskList/index.js +2 -3
- package/dist/components/index.js +8 -8
- package/dist/context/HooksContext/HooksContext.js +59 -85
- package/dist/context/HooksContext/HooksContext.test.js +28 -36
- package/dist/context/HooksContext/index.js +4 -6
- package/dist/context/ValidationContext/ValidationContext.js +35 -76
- package/dist/context/ValidationContext/ValidationContext.test.js +50 -61
- package/dist/context/ValidationContext/index.js +4 -6
- package/dist/context/index.js +3 -3
- package/dist/hooks/index.js +10 -11
- package/dist/hooks/useAxios.js +17 -43
- package/dist/hooks/useGetRequest.js +65 -106
- package/dist/hooks/useHooks.js +2 -5
- package/dist/hooks/useRefData.js +30 -45
- package/dist/hooks/useValidation.js +2 -5
- package/dist/index.js +15 -17
- package/dist/models/CollectionLabels.js +2 -3
- package/dist/models/ComponentTypes.js +25 -26
- package/dist/models/EventTypes.js +5 -6
- package/dist/models/FormPages.js +5 -6
- package/dist/models/FormTypes.js +9 -10
- package/dist/models/HubFormats.js +4 -5
- package/dist/models/PageAction.js +45 -42
- package/dist/models/TaskStates.js +30 -31
- package/dist/models/index.js +11 -12
- package/dist/setupTests.js +20 -24
- package/dist/utils/CheckYourAnswers/getCYAAction.js +6 -7
- package/dist/utils/CheckYourAnswers/getCYAAction.test.js +53 -55
- package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.js +18 -20
- package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.test.js +21 -23
- package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.js +17 -21
- package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.test.js +18 -20
- package/dist/utils/CheckYourAnswers/getCYARow.js +8 -10
- package/dist/utils/CheckYourAnswers/getCYARow.test.js +72 -72
- package/dist/utils/CheckYourAnswers/getCYARowForGroup.js +20 -27
- package/dist/utils/CheckYourAnswers/getCYARowForGroup.test.js +16 -17
- package/dist/utils/CheckYourAnswers/getCYARowsForCollection.js +41 -47
- package/dist/utils/CheckYourAnswers/getCYARowsForCollection.test.js +72 -75
- package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.js +71 -78
- package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.test.js +133 -114
- package/dist/utils/CheckYourAnswers/getCYARowsForContainer.js +27 -23
- package/dist/utils/CheckYourAnswers/getCYARowsForContainer.test.js +112 -106
- package/dist/utils/CheckYourAnswers/getCYARowsForPage.js +16 -23
- package/dist/utils/CheckYourAnswers/getCYARowsForPage.test.js +77 -83
- package/dist/utils/CheckYourAnswers/index.js +3 -4
- package/dist/utils/CheckYourAnswers/showComponentCYA.js +7 -9
- package/dist/utils/CheckYourAnswers/showComponentCYA.test.js +25 -25
- package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.js +9 -16
- package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.test.js +19 -20
- package/dist/utils/CollectionPage/getCollectionPageActiveIndex.js +4 -8
- package/dist/utils/CollectionPage/getCollectionPageActiveIndex.test.js +15 -15
- package/dist/utils/CollectionPage/index.js +3 -4
- package/dist/utils/CollectionPage/mergeCollectionPages.js +26 -29
- package/dist/utils/CollectionPage/mergeCollectionPages.test.js +15 -15
- package/dist/utils/Component/addShowWhen.js +5 -10
- package/dist/utils/Component/addShowWhen.test.js +38 -38
- package/dist/utils/Component/applyToComponentTree.js +20 -22
- package/dist/utils/Component/applyToComponentTree.test.js +28 -33
- package/dist/utils/Component/cleanAttributes.js +11 -16
- package/dist/utils/Component/cleanAttributes.test.js +17 -18
- package/dist/utils/Component/elevateNestedComponents.js +7 -9
- package/dist/utils/Component/elevateNestedComponents.test.js +19 -19
- package/dist/utils/Component/getComponent.js +91 -99
- package/dist/utils/Component/getComponentTests/getComponent.autocomplete.test.js +19 -18
- package/dist/utils/Component/getComponentTests/getComponent.calculation.test.js +51 -63
- package/dist/utils/Component/getComponentTests/getComponent.checkboxes.test.js +41 -49
- package/dist/utils/Component/getComponentTests/getComponent.date.test.js +33 -37
- package/dist/utils/Component/getComponentTests/getComponent.details.test.js +21 -19
- package/dist/utils/Component/getComponentTests/getComponent.email.test.js +19 -23
- package/dist/utils/Component/getComponentTests/getComponent.file.test.js +23 -27
- package/dist/utils/Component/getComponentTests/getComponent.heading.test.js +12 -11
- 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 +24 -27
- package/dist/utils/Component/getComponentTests/getComponent.nested.test.js +156 -175
- package/dist/utils/Component/getComponentTests/getComponent.paragraph.test.js +18 -16
- package/dist/utils/Component/getComponentTests/getComponent.phoneNumber.test.js +19 -23
- package/dist/utils/Component/getComponentTests/getComponent.radios.test.js +59 -73
- package/dist/utils/Component/getComponentTests/getComponent.select.test.js +19 -23
- package/dist/utils/Component/getComponentTests/getComponent.text.test.js +19 -23
- package/dist/utils/Component/getComponentTests/getComponent.textArea.test.js +35 -41
- package/dist/utils/Component/getComponentTests/getComponent.time.test.js +24 -32
- 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 +14 -14
- package/dist/utils/Component/index.js +3 -4
- package/dist/utils/Component/isEditable.js +3 -7
- package/dist/utils/Component/isEditable.test.js +14 -15
- package/dist/utils/Component/optionIsSelected.js +2 -3
- package/dist/utils/Component/optionIsSelected.test.js +10 -10
- package/dist/utils/Component/setupContainerComponentsPath.js +30 -33
- package/dist/utils/Component/setupContainerComponentsPath.test.js +16 -16
- package/dist/utils/Component/showComponent.js +4 -6
- package/dist/utils/Component/showComponent.test.js +29 -29
- package/dist/utils/Component/wrapInFormGroup.js +6 -6
- package/dist/utils/Condition/index.js +3 -4
- package/dist/utils/Condition/meetsAllConditions.js +9 -10
- package/dist/utils/Condition/meetsAllConditions.test.js +18 -18
- package/dist/utils/Condition/meetsCondition.js +19 -27
- package/dist/utils/Condition/meetsCondition.test.js +377 -377
- package/dist/utils/Condition/meetsOneCondition.js +7 -8
- package/dist/utils/Condition/meetsOneCondition.test.js +17 -17
- package/dist/utils/Condition/setupConditions.js +15 -21
- package/dist/utils/Condition/setupConditions.test.js +8 -8
- package/dist/utils/Container/getEditableComponents.js +5 -8
- package/dist/utils/Container/getEditableComponents.test.js +44 -46
- package/dist/utils/Container/index.js +3 -4
- package/dist/utils/Container/setupNesting.js +17 -24
- package/dist/utils/Container/setupNesting.test.js +28 -31
- package/dist/utils/Container/showContainer.js +5 -10
- package/dist/utils/Container/showContainer.test.js +31 -31
- package/dist/utils/Data/applyFormula.js +41 -52
- package/dist/utils/Data/applyFormula.test.js +26 -26
- package/dist/utils/Data/getAutocompleteSource.js +11 -14
- package/dist/utils/Data/getAutocompleteSource.test.js +59 -59
- package/dist/utils/Data/getDataPath.js +21 -32
- package/dist/utils/Data/getDataPath.test.js +20 -20
- package/dist/utils/Data/getOptions.js +22 -28
- package/dist/utils/Data/getOptions.test.js +21 -21
- package/dist/utils/Data/getSourceData.js +7 -21
- package/dist/utils/Data/getSourceData.test.js +85 -81
- package/dist/utils/Data/index.js +3 -4
- package/dist/utils/Data/refDataToOptions.js +12 -17
- package/dist/utils/Data/refDataToOptions.test.js +20 -20
- package/dist/utils/Data/setDataItem.js +8 -10
- package/dist/utils/Data/setDataItem.test.js +38 -38
- package/dist/utils/Data/setupFormData.js +32 -48
- package/dist/utils/Data/setupFormData.test.js +99 -98
- package/dist/utils/Data/setupRefDataUrlForComponent.js +22 -30
- package/dist/utils/Data/setupRefDataUrlForComponent.test.js +28 -28
- package/dist/utils/FormPage/applyConditionalProperties.js +7 -12
- package/dist/utils/FormPage/applyConditionalProperties.test.js +16 -19
- package/dist/utils/FormPage/getFormPage.js +17 -19
- package/dist/utils/FormPage/getFormPage.test.js +49 -48
- package/dist/utils/FormPage/getFormPages.js +9 -15
- package/dist/utils/FormPage/getFormPages.test.js +22 -25
- package/dist/utils/FormPage/getPageActions.js +11 -19
- package/dist/utils/FormPage/getPageActions.test.js +33 -33
- package/dist/utils/FormPage/getParagraphFromText.js +6 -9
- package/dist/utils/FormPage/getParagraphFromText.test.js +7 -7
- package/dist/utils/FormPage/index.js +3 -4
- package/dist/utils/FormPage/showFormPage.js +5 -10
- package/dist/utils/FormPage/showFormPage.test.js +33 -33
- package/dist/utils/FormPage/showFormPageCYA.js +4 -5
- package/dist/utils/FormPage/showFormPageCYA.test.js +9 -9
- package/dist/utils/FormPage/useComponent.js +21 -29
- package/dist/utils/FormPage/useComponent.test.js +71 -73
- package/dist/utils/Format/formatData.js +2 -3
- package/dist/utils/Format/formatData.test.js +19 -19
- package/dist/utils/Format/formatDataForComponent.js +6 -9
- package/dist/utils/Format/formatDataForComponent.test.js +50 -78
- package/dist/utils/Format/formatDataForForm.js +7 -10
- package/dist/utils/Format/formatDataForForm.test.js +14 -17
- package/dist/utils/Format/formatDataForPage.js +4 -7
- package/dist/utils/Format/formatDataForPage.test.js +20 -25
- package/dist/utils/Format/index.js +3 -4
- package/dist/utils/Hub/getFormHub.js +3 -4
- package/dist/utils/Hub/getFormHub.test.js +29 -32
- package/dist/utils/Hub/index.js +3 -4
- package/dist/utils/Meta/constants.js +2 -4
- package/dist/utils/Meta/documents/getDocuments.js +2 -6
- package/dist/utils/Meta/documents/getDocuments.test.js +25 -17
- package/dist/utils/Meta/documents/index.js +3 -4
- package/dist/utils/Meta/documents/setDocumentsForField.js +16 -19
- package/dist/utils/Meta/documents/setDocumentsForField.test.js +69 -35
- package/dist/utils/Meta/index.js +3 -4
- package/dist/utils/Operate/checkValueIsTruthy.js +5 -6
- package/dist/utils/Operate/checkValueIsTruthy.test.js +17 -17
- package/dist/utils/Operate/getFirstOf.js +9 -10
- package/dist/utils/Operate/getFirstOf.test.js +33 -33
- package/dist/utils/Operate/getIndexOfMatchingValueIn.js +13 -14
- package/dist/utils/Operate/getIndexOfMatchingValueIn.test.js +47 -53
- package/dist/utils/Operate/index.js +3 -4
- package/dist/utils/Operate/persistValueInFormData.js +7 -8
- package/dist/utils/Operate/persistValueInFormData.test.js +23 -21
- package/dist/utils/Operate/runPageOperations.js +10 -11
- package/dist/utils/Operate/runPageOperations.test.js +36 -37
- package/dist/utils/Operate/setValueInFormData.js +6 -7
- package/dist/utils/Operate/setValueInFormData.test.js +17 -17
- package/dist/utils/Operate/shouldRun.js +9 -10
- package/dist/utils/Operate/shouldRun.test.js +22 -28
- package/dist/utils/Validate/additional/conditionallyRequired.js +5 -7
- package/dist/utils/Validate/additional/conditionallyRequired.test.js +19 -19
- package/dist/utils/Validate/additional/index.js +8 -9
- package/dist/utils/Validate/additional/index.test.js +13 -13
- package/dist/utils/Validate/additional/mustBeAfter.js +4 -5
- package/dist/utils/Validate/additional/mustBeAfter.test.js +41 -41
- package/dist/utils/Validate/additional/mustBeBefore.js +4 -5
- package/dist/utils/Validate/additional/mustBeBefore.test.js +29 -29
- package/dist/utils/Validate/additional/mustBeEarlierDateTime.js +8 -14
- package/dist/utils/Validate/additional/mustBeEarlierDateTime.test.js +34 -38
- package/dist/utils/Validate/additional/mustBeGreaterThan.js +3 -4
- package/dist/utils/Validate/additional/mustBeGreaterThan.test.js +19 -19
- package/dist/utils/Validate/additional/mustBeInTheFuture.js +5 -6
- package/dist/utils/Validate/additional/mustBeInTheFuture.test.js +13 -13
- package/dist/utils/Validate/additional/mustBeInThePast.js +6 -7
- package/dist/utils/Validate/additional/mustBeInThePast.test.js +13 -13
- package/dist/utils/Validate/additional/mustBeLessThan.js +3 -4
- package/dist/utils/Validate/additional/mustBeLessThan.test.js +18 -18
- package/dist/utils/Validate/additional/mustBeLongerThan.js +2 -3
- package/dist/utils/Validate/additional/mustBeLongerThan.test.js +17 -17
- package/dist/utils/Validate/additional/mustBeNumbersOnly.js +3 -4
- package/dist/utils/Validate/additional/mustBeNumbersOnly.test.js +21 -21
- package/dist/utils/Validate/additional/mustBeShorterThan.js +2 -3
- package/dist/utils/Validate/additional/mustBeShorterThan.test.js +17 -17
- package/dist/utils/Validate/additional/mustEnterAtLeastOne.js +4 -7
- package/dist/utils/Validate/additional/mustEnterAtLeastOne.test.js +15 -17
- package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.js +2 -3
- package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.test.js +13 -13
- package/dist/utils/Validate/additional/mustSelectOnlyOne.js +4 -7
- package/dist/utils/Validate/additional/mustSelectOnlyOne.test.js +29 -27
- package/dist/utils/Validate/additional/utils.js +9 -25
- package/dist/utils/Validate/index.js +3 -4
- package/dist/utils/Validate/validateCollection.js +22 -29
- package/dist/utils/Validate/validateCollection.test.js +85 -77
- package/dist/utils/Validate/validateComponent.js +19 -19
- package/dist/utils/Validate/validateComponent.test.js +169 -147
- package/dist/utils/Validate/validateContainer.js +16 -22
- package/dist/utils/Validate/validateContainer.test.js +52 -48
- package/dist/utils/Validate/validateDate.js +14 -21
- package/dist/utils/Validate/validateDate.test.js +28 -29
- package/dist/utils/Validate/validateEmail.js +8 -11
- package/dist/utils/Validate/validateEmail.test.js +26 -26
- package/dist/utils/Validate/validateMultifile.js +6 -10
- package/dist/utils/Validate/validateMultifile.test.js +17 -18
- package/dist/utils/Validate/validatePage.js +20 -22
- package/dist/utils/Validate/validatePage.test.js +146 -143
- package/dist/utils/Validate/validateRegex.js +6 -10
- package/dist/utils/Validate/validateRegex.test.js +17 -17
- package/dist/utils/Validate/validateRequired.js +6 -9
- package/dist/utils/Validate/validateRequired.test.js +19 -19
- package/dist/utils/Validate/validateTextArea.js +6 -9
- package/dist/utils/Validate/validateTextArea.test.js +21 -21
- package/dist/utils/Validate/validateTime.js +8 -16
- package/dist/utils/Validate/validateTime.test.js +15 -15
- package/dist/utils/index.js +10 -12
- package/package.json +9 -6
|
@@ -2,117 +2,119 @@
|
|
|
2
2
|
|
|
3
3
|
var _models = require("../../models");
|
|
4
4
|
var _validateComponent = _interopRequireDefault(require("./validateComponent"));
|
|
5
|
-
function _interopRequireDefault(
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
additionalValidation: additionalValidation
|
|
19
|
-
};
|
|
20
|
-
};
|
|
21
|
-
it('should return no error 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.Component', () => {
|
|
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 no error when the component is null', () => {
|
|
22
18
|
expect((0, _validateComponent.default)(null, {})).toBeUndefined();
|
|
23
19
|
});
|
|
24
|
-
describe('when there is no form data',
|
|
25
|
-
it('should return no error when the component is not required and not an email type',
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
20
|
+
describe('when there is no form data', () => {
|
|
21
|
+
it('should return no error when the component is not required and not an email type', () => {
|
|
22
|
+
const ID = 'field';
|
|
23
|
+
const LABEL = 'Field';
|
|
24
|
+
const COMPONENT = setup(ID, _models.ComponentTypes.TEXT, LABEL, false);
|
|
29
25
|
expect((0, _validateComponent.default)(COMPONENT, null)).toBeUndefined();
|
|
30
26
|
});
|
|
31
|
-
it('should return a required error when the component is required and not an email type',
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
27
|
+
it('should return a required error when the component is required and not an email type', () => {
|
|
28
|
+
const ID = 'field';
|
|
29
|
+
const LABEL = 'Field';
|
|
30
|
+
const COMPONENT = setup(ID, _models.ComponentTypes.TEXT, LABEL, true);
|
|
35
31
|
expect((0, _validateComponent.default)(COMPONENT, null)).toEqual({
|
|
36
32
|
id: ID,
|
|
37
|
-
error:
|
|
33
|
+
error: `${LABEL} is required`
|
|
38
34
|
});
|
|
39
35
|
});
|
|
40
|
-
it('should return a required error when the component is required and of type email',
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
36
|
+
it('should return a required error when the component is required and of type email', () => {
|
|
37
|
+
const ID = 'field';
|
|
38
|
+
const LABEL = 'Field';
|
|
39
|
+
const COMPONENT = setup(ID, _models.ComponentTypes.EMAIL, LABEL, true);
|
|
44
40
|
expect((0, _validateComponent.default)(COMPONENT, null)).toEqual({
|
|
45
41
|
id: ID,
|
|
46
|
-
error:
|
|
42
|
+
error: `${LABEL} is required`
|
|
47
43
|
});
|
|
48
44
|
});
|
|
49
|
-
it('should return no error when the component is of type email but not required',
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
45
|
+
it('should return no error when the component is of type email but not required', () => {
|
|
46
|
+
const ID = 'field';
|
|
47
|
+
const LABEL = 'Field';
|
|
48
|
+
const COMPONENT = setup(ID, _models.ComponentTypes.EMAIL, LABEL, false);
|
|
53
49
|
expect((0, _validateComponent.default)(COMPONENT, null)).toBeUndefined();
|
|
54
50
|
});
|
|
55
51
|
});
|
|
56
|
-
describe('when the value is fully valid',
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
52
|
+
describe('when the value is fully valid', () => {
|
|
53
|
+
const ID = 'field';
|
|
54
|
+
const DATA = {
|
|
55
|
+
[ID]: 'alpha.bravo@digital.homeoffice.gov.uk'
|
|
56
|
+
};
|
|
57
|
+
it('should return no error when the component is not required and not an email type', () => {
|
|
58
|
+
const LABEL = 'Field';
|
|
59
|
+
const COMPONENT = setup(ID, _models.ComponentTypes.TEXT, LABEL, false);
|
|
62
60
|
expect((0, _validateComponent.default)(COMPONENT, DATA)).toBeUndefined();
|
|
63
61
|
});
|
|
64
|
-
it('should return no error when the component is required and not an email type',
|
|
65
|
-
|
|
66
|
-
|
|
62
|
+
it('should return no error when the component is required and not an email type', () => {
|
|
63
|
+
const LABEL = 'Field';
|
|
64
|
+
const COMPONENT = setup(ID, _models.ComponentTypes.TEXT, LABEL, true);
|
|
67
65
|
expect((0, _validateComponent.default)(COMPONENT, DATA)).toBeUndefined();
|
|
68
66
|
});
|
|
69
|
-
it('should return no error when the component is required and of type email',
|
|
70
|
-
|
|
71
|
-
|
|
67
|
+
it('should return no error when the component is required and of type email', () => {
|
|
68
|
+
const LABEL = 'Field';
|
|
69
|
+
const COMPONENT = setup(ID, _models.ComponentTypes.EMAIL, LABEL, true);
|
|
72
70
|
expect((0, _validateComponent.default)(COMPONENT, DATA)).toBeUndefined();
|
|
73
71
|
});
|
|
74
|
-
it('should return no error when the component is of type email but not required',
|
|
75
|
-
|
|
76
|
-
|
|
72
|
+
it('should return no error when the component is of type email but not required', () => {
|
|
73
|
+
const LABEL = 'Field';
|
|
74
|
+
const COMPONENT = setup(ID, _models.ComponentTypes.EMAIL, LABEL, false);
|
|
77
75
|
expect((0, _validateComponent.default)(COMPONENT, DATA)).toBeUndefined();
|
|
78
76
|
});
|
|
79
77
|
});
|
|
80
|
-
describe('when the value is an invalid email',
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
78
|
+
describe('when the value is an invalid email', () => {
|
|
79
|
+
const ID = 'field';
|
|
80
|
+
const DATA = {
|
|
81
|
+
[ID]: 'alpha.bravo@hotmail.com'
|
|
82
|
+
};
|
|
83
|
+
it('should return no error when the component is not required and not an email type', () => {
|
|
84
|
+
const LABEL = 'Field';
|
|
85
|
+
const COMPONENT = setup(ID, _models.ComponentTypes.TEXT, LABEL, false);
|
|
86
86
|
expect((0, _validateComponent.default)(COMPONENT, DATA)).toBeUndefined();
|
|
87
87
|
});
|
|
88
|
-
it('should return no error when the component is required and not an email type',
|
|
89
|
-
|
|
90
|
-
|
|
88
|
+
it('should return no error when the component is required and not an email type', () => {
|
|
89
|
+
const LABEL = 'Field';
|
|
90
|
+
const COMPONENT = setup(ID, _models.ComponentTypes.TEXT, LABEL, true);
|
|
91
91
|
expect((0, _validateComponent.default)(COMPONENT, DATA)).toBeUndefined();
|
|
92
92
|
});
|
|
93
|
-
it('should return no error when the component is required and of type email',
|
|
94
|
-
|
|
95
|
-
|
|
93
|
+
it('should return no error when the component is required and of type email', () => {
|
|
94
|
+
const LABEL = 'Field';
|
|
95
|
+
const COMPONENT = setup(ID, _models.ComponentTypes.EMAIL, LABEL, true);
|
|
96
96
|
expect((0, _validateComponent.default)(COMPONENT, DATA)).toEqual({
|
|
97
97
|
id: ID,
|
|
98
|
-
error:
|
|
98
|
+
error: `Enter ${LABEL.toLowerCase()} in the correct format, like jane.doe@homeoffice.gov.uk`
|
|
99
99
|
});
|
|
100
100
|
});
|
|
101
|
-
it('should return no error when the component is of type email but not required',
|
|
102
|
-
|
|
103
|
-
|
|
101
|
+
it('should return no error when the component is of type email but not required', () => {
|
|
102
|
+
const LABEL = 'Field';
|
|
103
|
+
const COMPONENT = setup(ID, _models.ComponentTypes.EMAIL, LABEL, false);
|
|
104
104
|
expect((0, _validateComponent.default)(COMPONENT, DATA)).toEqual({
|
|
105
105
|
id: ID,
|
|
106
|
-
error:
|
|
106
|
+
error: `Enter ${LABEL.toLowerCase()} in the correct format, like jane.doe@homeoffice.gov.uk`
|
|
107
107
|
});
|
|
108
108
|
});
|
|
109
109
|
});
|
|
110
|
-
describe('when the component is a Date Input',
|
|
111
|
-
|
|
112
|
-
it('should always reject invalid dates',
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
110
|
+
describe('when the component is a Date Input', () => {
|
|
111
|
+
const ID = 'field';
|
|
112
|
+
it('should always reject invalid dates', () => {
|
|
113
|
+
const LABEL = 'Field';
|
|
114
|
+
const COMPONENT = setup(ID, _models.ComponentTypes.DATE, LABEL, false);
|
|
115
|
+
const DATA = {
|
|
116
|
+
[ID]: '25-45-2033'
|
|
117
|
+
};
|
|
116
118
|
expect((0, _validateComponent.default)(COMPONENT, DATA)).toEqual({
|
|
117
119
|
error: 'Month must be between 1 and 12',
|
|
118
120
|
id: ID,
|
|
@@ -121,16 +123,18 @@ describe('utils.Validate.Component', function () {
|
|
|
121
123
|
}
|
|
122
124
|
});
|
|
123
125
|
});
|
|
124
|
-
it('should apply optional validators when specified',
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
126
|
+
it('should apply optional validators when specified', () => {
|
|
127
|
+
const LABEL = 'Field';
|
|
128
|
+
const DATA = {
|
|
129
|
+
[ID]: '25-3-3033'
|
|
130
|
+
};
|
|
131
|
+
const ADDITIONAL_VALIDATION = [{
|
|
128
132
|
function: 'mustBeBefore',
|
|
129
133
|
value: 3,
|
|
130
134
|
unit: 'day',
|
|
131
135
|
message: 'Date must be less than 3 days in the future'
|
|
132
136
|
}];
|
|
133
|
-
|
|
137
|
+
const COMPONENT = setup(ID, _models.ComponentTypes.DATE, LABEL, false, ADDITIONAL_VALIDATION);
|
|
134
138
|
expect((0, _validateComponent.default)(COMPONENT, DATA)).toEqual({
|
|
135
139
|
error: 'Date must be less than 3 days in the future',
|
|
136
140
|
id: ID,
|
|
@@ -142,12 +146,14 @@ describe('utils.Validate.Component', function () {
|
|
|
142
146
|
});
|
|
143
147
|
});
|
|
144
148
|
});
|
|
145
|
-
describe('when the component is a Time Input',
|
|
146
|
-
|
|
147
|
-
it('should always reject invalid time',
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
149
|
+
describe('when the component is a Time Input', () => {
|
|
150
|
+
const ID = 'field';
|
|
151
|
+
it('should always reject invalid time', () => {
|
|
152
|
+
const LABEL = 'Field';
|
|
153
|
+
const COMPONENT = setup(ID, _models.ComponentTypes.TIME, LABEL, false);
|
|
154
|
+
const DATA = {
|
|
155
|
+
[ID]: '25:45'
|
|
156
|
+
};
|
|
151
157
|
expect((0, _validateComponent.default)(COMPONENT, DATA)).toEqual({
|
|
152
158
|
error: 'Hour must be between 0 and 23',
|
|
153
159
|
id: ID,
|
|
@@ -157,38 +163,50 @@ describe('utils.Validate.Component', function () {
|
|
|
157
163
|
});
|
|
158
164
|
});
|
|
159
165
|
});
|
|
160
|
-
describe('when the component is a container',
|
|
161
|
-
it('should return an empty array when the container has only valid components',
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
166
|
+
describe('when the component is a container', () => {
|
|
167
|
+
it('should return an empty array when the container has only valid components', () => {
|
|
168
|
+
const EMAIL_ID = 'email';
|
|
169
|
+
const EMAIL_LABEL = 'Email';
|
|
170
|
+
const EMAIL = setup(EMAIL_ID, _models.ComponentTypes.EMAIL, EMAIL_LABEL, false);
|
|
171
|
+
const ID = 'container';
|
|
172
|
+
const LABEL = 'field';
|
|
173
|
+
const CONTAINER = setup(ID, _models.ComponentTypes.CONTAINER, LABEL, false);
|
|
168
174
|
CONTAINER.components = [EMAIL];
|
|
169
|
-
|
|
175
|
+
const DATA = {
|
|
176
|
+
[ID]: {
|
|
177
|
+
[EMAIL_ID]: 'alpha.bravo@digital.homeoffice.gov.uk'
|
|
178
|
+
}
|
|
179
|
+
};
|
|
170
180
|
expect((0, _validateComponent.default)(CONTAINER, DATA)).toEqual([]);
|
|
171
181
|
});
|
|
172
182
|
});
|
|
173
|
-
describe('when the component is a collection',
|
|
174
|
-
it('should return an empty array when the collection has only valid items',
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
183
|
+
describe('when the component is a collection', () => {
|
|
184
|
+
it('should return an empty array when the collection has only valid items', () => {
|
|
185
|
+
const EMAIL_ID = 'email';
|
|
186
|
+
const EMAIL_LABEL = 'Email';
|
|
187
|
+
const EMAIL = setup(EMAIL_ID, _models.ComponentTypes.EMAIL, EMAIL_LABEL, false);
|
|
188
|
+
const ID = 'collection';
|
|
189
|
+
const LABEL = 'field';
|
|
190
|
+
const COLLECTION = setup(ID, _models.ComponentTypes.COLLECTION, LABEL, false);
|
|
181
191
|
COLLECTION.item = [EMAIL];
|
|
182
|
-
|
|
192
|
+
const DATA = {
|
|
193
|
+
[ID]: [{
|
|
194
|
+
[EMAIL_ID]: 'alpha.bravo@homeoffice.gov.uk'
|
|
195
|
+
}, {
|
|
196
|
+
[EMAIL_ID]: 'charlie.delta@homeoffice.gov.uk'
|
|
197
|
+
}]
|
|
198
|
+
};
|
|
183
199
|
expect((0, _validateComponent.default)(COLLECTION, DATA)).toEqual([]);
|
|
184
200
|
});
|
|
185
201
|
});
|
|
186
|
-
describe('when the component has a nested component',
|
|
187
|
-
it('should return no error when the radio component contains nested components without errors',
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
202
|
+
describe('when the component has a nested component', () => {
|
|
203
|
+
it('should return no error when the radio component contains nested components without errors', () => {
|
|
204
|
+
const NESTED_ID = 'nestedId';
|
|
205
|
+
const NESTED_VALUE = 'nestedValue';
|
|
206
|
+
const FORMDATA = {
|
|
207
|
+
[NESTED_ID]: NESTED_VALUE
|
|
208
|
+
};
|
|
209
|
+
const COMPONENT = {
|
|
192
210
|
type: 'radios',
|
|
193
211
|
id: 'a',
|
|
194
212
|
data: {
|
|
@@ -204,10 +222,10 @@ describe('utils.Validate.Component', function () {
|
|
|
204
222
|
};
|
|
205
223
|
expect((0, _validateComponent.default)(COMPONENT, undefined, FORMDATA)).toBeUndefined();
|
|
206
224
|
});
|
|
207
|
-
it('should return an error when the radio component contains nested components with errors',
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
225
|
+
it('should return an error when the radio component contains nested components with errors', () => {
|
|
226
|
+
const NESTED_ID = 'nestedId';
|
|
227
|
+
const FORMDATA = {};
|
|
228
|
+
const COMPONENT = {
|
|
211
229
|
type: 'radios',
|
|
212
230
|
id: 'a',
|
|
213
231
|
data: {
|
|
@@ -222,13 +240,13 @@ describe('utils.Validate.Component', function () {
|
|
|
222
240
|
}
|
|
223
241
|
};
|
|
224
242
|
expect((0, _validateComponent.default)(COMPONENT, undefined, FORMDATA)).toEqual([{
|
|
225
|
-
id:
|
|
226
|
-
error:
|
|
243
|
+
id: `nestedId`,
|
|
244
|
+
error: `Field is required`
|
|
227
245
|
}]);
|
|
228
246
|
});
|
|
229
|
-
it('should return no error when a non selected radio component contains nested components with errors',
|
|
230
|
-
|
|
231
|
-
|
|
247
|
+
it('should return no error when a non selected radio component contains nested components with errors', () => {
|
|
248
|
+
const NESTED_ID = 'nestedId';
|
|
249
|
+
const COMPONENT = {
|
|
232
250
|
type: 'radios',
|
|
233
251
|
id: 'a',
|
|
234
252
|
data: {
|
|
@@ -245,11 +263,13 @@ describe('utils.Validate.Component', function () {
|
|
|
245
263
|
};
|
|
246
264
|
expect((0, _validateComponent.default)(COMPONENT, undefined, {})).toBeUndefined();
|
|
247
265
|
});
|
|
248
|
-
it('should return no error when the checkbox component contains nested components without errors',
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
266
|
+
it('should return no error when the checkbox component contains nested components without errors', () => {
|
|
267
|
+
const NESTED_ID = 'nestedId';
|
|
268
|
+
const NESTED_VALUE = 'nestedValue';
|
|
269
|
+
const FORMDATA = {
|
|
270
|
+
[NESTED_ID]: NESTED_VALUE
|
|
271
|
+
};
|
|
272
|
+
const COMPONENT = {
|
|
253
273
|
type: 'checkboxes',
|
|
254
274
|
id: 'a',
|
|
255
275
|
data: {
|
|
@@ -265,13 +285,13 @@ describe('utils.Validate.Component', function () {
|
|
|
265
285
|
};
|
|
266
286
|
expect((0, _validateComponent.default)(COMPONENT, undefined, FORMDATA)).toBeUndefined();
|
|
267
287
|
});
|
|
268
|
-
it('should return an error when the checkbox component contains nested components with errors',
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
288
|
+
it('should return an error when the checkbox component contains nested components with errors', () => {
|
|
289
|
+
const NESTED_ID = 'nestedId';
|
|
290
|
+
const OPTION_VALUE = 'optionValue';
|
|
291
|
+
const FORMDATA = {
|
|
272
292
|
'a': [OPTION_VALUE]
|
|
273
293
|
};
|
|
274
|
-
|
|
294
|
+
const COMPONENT = {
|
|
275
295
|
type: 'checkboxes',
|
|
276
296
|
id: 'a',
|
|
277
297
|
data: {
|
|
@@ -288,17 +308,18 @@ describe('utils.Validate.Component', function () {
|
|
|
288
308
|
};
|
|
289
309
|
expect((0, _validateComponent.default)(COMPONENT, undefined, FORMDATA)).toEqual([{
|
|
290
310
|
id: NESTED_ID,
|
|
291
|
-
error:
|
|
311
|
+
error: `Field is required`
|
|
292
312
|
}]);
|
|
293
313
|
});
|
|
294
|
-
it('should return no error when a non selected checkbox component contains nested components with errors',
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
'a': ['optionValueSelected']
|
|
300
|
-
|
|
301
|
-
|
|
314
|
+
it('should return no error when a non selected checkbox component contains nested components with errors', () => {
|
|
315
|
+
const NESTED_ID_NOT_SELECTED = 'nestedIdNotSelected';
|
|
316
|
+
const NESTED_ID_SELECTED = 'nestedIdSelected';
|
|
317
|
+
const NESTED_VALUE_SELECTED = 'nestedValueSelected';
|
|
318
|
+
const FORMDATA = {
|
|
319
|
+
'a': ['optionValueSelected'],
|
|
320
|
+
[NESTED_ID_SELECTED]: NESTED_VALUE_SELECTED
|
|
321
|
+
};
|
|
322
|
+
const COMPONENT = {
|
|
302
323
|
type: 'checkboxes',
|
|
303
324
|
id: 'a',
|
|
304
325
|
data: {
|
|
@@ -325,16 +346,17 @@ describe('utils.Validate.Component', function () {
|
|
|
325
346
|
};
|
|
326
347
|
expect((0, _validateComponent.default)(COMPONENT, undefined, FORMDATA)).toBeUndefined();
|
|
327
348
|
});
|
|
328
|
-
it('should return no error when all selected checkbox components contains nested components without errors',
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
349
|
+
it('should return no error when all selected checkbox components contains nested components without errors', () => {
|
|
350
|
+
const NESTED_ID_SELECTED_1 = 'nestedIdSelected1';
|
|
351
|
+
const NESTED_ID_SELECTED_2 = 'nestedIdSelected2';
|
|
352
|
+
const NESTED_VALUE_SELECTED_1 = 'nestedValueSelected1';
|
|
353
|
+
const NESTED_VALUE_SELECTED_2 = 'nestedValueSelected2';
|
|
354
|
+
const FORMDATA = {
|
|
355
|
+
'a': ['optionValueSelected1', 'optionValueSelected2'],
|
|
356
|
+
[NESTED_ID_SELECTED_1]: NESTED_VALUE_SELECTED_1,
|
|
357
|
+
[NESTED_ID_SELECTED_2]: NESTED_VALUE_SELECTED_2
|
|
358
|
+
};
|
|
359
|
+
const COMPONENT = {
|
|
338
360
|
type: 'checkboxes',
|
|
339
361
|
id: 'a',
|
|
340
362
|
data: {
|
|
@@ -6,13 +6,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _validateComponent = _interopRequireDefault(require("./validateComponent"));
|
|
8
8
|
var _additional = _interopRequireDefault(require("./additional"));
|
|
9
|
-
function _interopRequireDefault(
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
13
|
-
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
14
|
-
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
15
|
-
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
// Local imports
|
|
11
|
+
|
|
16
12
|
/**
|
|
17
13
|
* Validates all components within a container.
|
|
18
14
|
* @param {object} container The container to validate.
|
|
@@ -20,34 +16,32 @@ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input ==
|
|
|
20
16
|
* @param {object} formData The data at the top level of the form.
|
|
21
17
|
* @returns Errors for all components within the container.
|
|
22
18
|
*/
|
|
23
|
-
|
|
19
|
+
const validateContainer = (container, outerData, formData) => {
|
|
24
20
|
if (!container) {
|
|
25
21
|
return [];
|
|
26
22
|
}
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
const fd = formData || outerData;
|
|
24
|
+
const error = (0, _additional.default)(container, fd);
|
|
29
25
|
if (error) {
|
|
30
26
|
return {
|
|
31
27
|
id: container.id,
|
|
32
|
-
error
|
|
28
|
+
error
|
|
33
29
|
};
|
|
34
30
|
}
|
|
35
|
-
|
|
31
|
+
const errors = [];
|
|
36
32
|
if (Array.isArray(container.components)) {
|
|
37
|
-
|
|
38
|
-
container.components.forEach(
|
|
33
|
+
const containerData = outerData && container.fieldId ? outerData[container.fieldId] : outerData;
|
|
34
|
+
container.components.forEach(component => {
|
|
39
35
|
// It is possible that the container being passed in is a
|
|
40
36
|
// dummy container just for validation. In that scenario we want
|
|
41
37
|
// to ignore the full_path and just use the component's fieldId.
|
|
42
|
-
|
|
43
|
-
errors.push((0, _validateComponent.default)(
|
|
38
|
+
const fullPath = container.full_path || container.fieldId ? `${container.full_path || container.fieldId}.${component.fieldId}` : component.fieldId;
|
|
39
|
+
errors.push((0, _validateComponent.default)({
|
|
40
|
+
...component,
|
|
44
41
|
full_path: fullPath
|
|
45
|
-
}
|
|
42
|
+
}, containerData, fd));
|
|
46
43
|
});
|
|
47
44
|
}
|
|
48
|
-
return errors.flat(1).filter(
|
|
49
|
-
return !!e;
|
|
50
|
-
});
|
|
45
|
+
return errors.flat(1).filter(e => !!e);
|
|
51
46
|
};
|
|
52
|
-
var _default = validateContainer;
|
|
53
|
-
exports.default = _default;
|
|
47
|
+
var _default = exports.default = validateContainer;
|
|
@@ -2,71 +2,75 @@
|
|
|
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
|
-
id:
|
|
59
|
-
error:
|
|
62
|
+
id: `${ID}.${EMAIL_ID}`,
|
|
63
|
+
error: `Enter ${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
|