@ukhomeoffice/cop-react-form-renderer 5.0.0-alpha → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (277) hide show
  1. package/dist/components/CheckYourAnswers/Answer.js +18 -7
  2. package/dist/components/CheckYourAnswers/Answer.test.js +137 -0
  3. package/dist/components/CheckYourAnswers/CheckYourAnswers.js +70 -46
  4. package/dist/components/CheckYourAnswers/CheckYourAnswers.stories.mdx +410 -0
  5. package/dist/components/CheckYourAnswers/CheckYourAnswers.test.js +551 -0
  6. package/dist/components/CollectionPage/CollectionPage.js +15 -10
  7. package/dist/components/CollectionPage/CollectionPage.test.js +382 -0
  8. package/dist/components/FormComponent/Collection.js +91 -48
  9. package/dist/components/FormComponent/Collection.scss +2 -1
  10. package/dist/components/FormComponent/Collection.test.js +807 -0
  11. package/dist/components/FormComponent/Container.js +35 -16
  12. package/dist/components/FormComponent/Container.test.js +370 -0
  13. package/dist/components/FormComponent/FormComponent.js +39 -13
  14. package/dist/components/FormComponent/FormComponent.stories.mdx +184 -0
  15. package/dist/components/FormComponent/FormComponent.test.js +226 -0
  16. package/dist/components/FormComponent/helpers/addLabel.js +5 -4
  17. package/dist/components/FormComponent/helpers/getComponentFieldSet.js +16 -0
  18. package/dist/components/FormComponent/helpers/getComponentFieldSet.test.js +29 -0
  19. package/dist/components/FormComponent/helpers/index.js +8 -1
  20. package/dist/components/FormPage/FormPage.js +69 -30
  21. package/dist/components/FormPage/FormPage.stories.mdx +155 -0
  22. package/dist/components/FormPage/FormPage.test.js +330 -0
  23. package/dist/components/FormRenderer/FormRenderer.js +142 -228
  24. package/dist/components/FormRenderer/FormRenderer.stories.mdx +183 -0
  25. package/dist/components/FormRenderer/FormRenderer.test.js +968 -0
  26. package/dist/components/FormRenderer/handlers/index.js +1 -2
  27. package/dist/components/FormRenderer/handlers/navigate.js +3 -1
  28. package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.js +35 -14
  29. package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.test.js +88 -5
  30. package/dist/components/FormRenderer/helpers/getCYA.js +11 -2
  31. package/dist/components/FormRenderer/helpers/getNextPageId.js +13 -7
  32. package/dist/components/FormRenderer/helpers/getRelevantPages.js +10 -2
  33. package/dist/components/FormRenderer/helpers/getRelevantPages.test.js +1 -1
  34. package/dist/components/FormRenderer/helpers/getSubmissionStatus.js +2 -2
  35. package/dist/components/FormRenderer/helpers/getSubmissionStatus.test.js +6 -2
  36. package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.js +171 -51
  37. package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.test.js +307 -24
  38. package/dist/components/FormRenderer/helpers/index.js +1 -2
  39. package/dist/components/FormRenderer/onCYAAction.js +108 -0
  40. package/dist/components/FormRenderer/onCYAAction.test.js +583 -0
  41. package/dist/components/FormRenderer/onPageAction.js +145 -0
  42. package/dist/components/FormRenderer/onPageAction.test.js +678 -0
  43. package/dist/components/FormRenderer/onTaskAction.js +48 -0
  44. package/dist/components/FormRenderer/onTaskAction.test.js +217 -0
  45. package/dist/components/PageActions/ActionButton.js +0 -3
  46. package/dist/components/PageActions/ActionButton.test.js +93 -0
  47. package/dist/components/PageActions/PageActions.js +2 -2
  48. package/dist/components/PageActions/PageActions.stories.mdx +74 -0
  49. package/dist/components/PageActions/PageActions.test.js +132 -0
  50. package/dist/components/SummaryList/GroupAction.js +2 -2
  51. package/dist/components/SummaryList/GroupAction.test.js +80 -0
  52. package/dist/components/SummaryList/RowAction.js +2 -2
  53. package/dist/components/SummaryList/RowAction.test.js +80 -0
  54. package/dist/components/SummaryList/SummaryList.js +29 -12
  55. package/dist/components/SummaryList/SummaryList.scss +19 -0
  56. package/dist/components/SummaryList/SummaryList.stories.mdx +90 -0
  57. package/dist/components/SummaryList/SummaryList.test.js +400 -0
  58. package/dist/components/SummaryList/SummaryListHeadingRow.js +30 -0
  59. package/dist/components/SummaryList/SummaryListRow.js +5 -2
  60. package/dist/components/SummaryList/helpers/getGroupActionAttributes.js +2 -1
  61. package/dist/components/SummaryList/helpers/getRowActionAttributes.js +2 -1
  62. package/dist/components/TaskList/Task.js +3 -3
  63. package/dist/components/TaskList/Task.test.js +167 -0
  64. package/dist/components/TaskList/TaskList.js +73 -22
  65. package/dist/components/TaskList/TaskList.stories.mdx +164 -0
  66. package/dist/components/TaskList/TaskList.test.js +389 -0
  67. package/dist/components/TaskList/TaskState.js +2 -2
  68. package/dist/components/TaskList/TaskState.test.js +86 -0
  69. package/dist/components/index.js +14 -0
  70. package/dist/context/HooksContext/HooksContext.js +72 -8
  71. package/dist/context/HooksContext/HooksContext.test.js +44 -0
  72. package/dist/context/ValidationContext/ValidationContext.js +38 -28
  73. package/dist/context/ValidationContext/ValidationContext.test.js +84 -0
  74. package/dist/hooks/useAxios.js +10 -12
  75. package/dist/hooks/useGetRequest.js +48 -49
  76. package/dist/hooks/useRefData.js +7 -4
  77. package/dist/index.js +34 -1
  78. package/dist/json/addressDetails.json +149 -0
  79. package/dist/json/areYouACivilServant.json +7 -0
  80. package/dist/json/firstForm.json +94 -0
  81. package/dist/json/grade.json +108 -0
  82. package/dist/json/group.data.json +21 -0
  83. package/dist/json/group.json +402 -0
  84. package/dist/json/groupOfRow.json +137 -0
  85. package/dist/json/groupOfRowData.json +15 -0
  86. package/dist/json/port.json +346 -0
  87. package/dist/json/saveAndContinue.json +98 -0
  88. package/dist/json/sublocation.json +859 -0
  89. package/dist/json/taskList.json +265 -0
  90. package/dist/json/team.json +17351 -0
  91. package/dist/json/terminal.json +81 -0
  92. package/dist/json/userProfile.data.json +21 -0
  93. package/dist/json/userProfile.json +276 -0
  94. package/dist/models/ComponentTypes.js +8 -0
  95. package/dist/models/PageAction.js +4 -1
  96. package/dist/models/TaskStates.js +10 -2
  97. package/dist/models/index.js +16 -1
  98. package/dist/setupTests.js +46 -0
  99. package/dist/utils/CheckYourAnswers/getCYAAction.js +5 -5
  100. package/dist/utils/CheckYourAnswers/getCYAAction.test.js +121 -0
  101. package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.js +6 -2
  102. package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.test.js +71 -0
  103. package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.js +6 -2
  104. package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.test.js +55 -0
  105. package/dist/utils/CheckYourAnswers/getCYARow.js +14 -11
  106. package/dist/utils/CheckYourAnswers/getCYARow.test.js +291 -0
  107. package/dist/utils/CheckYourAnswers/getCYARowForGroup.js +4 -1
  108. package/dist/utils/CheckYourAnswers/getCYARowForGroup.test.js +70 -0
  109. package/dist/utils/CheckYourAnswers/getCYARowsForCollection.js +15 -10
  110. package/dist/utils/CheckYourAnswers/getCYARowsForCollection.test.js +288 -0
  111. package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.js +94 -36
  112. package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.test.js +414 -0
  113. package/dist/utils/CheckYourAnswers/getCYARowsForContainer.js +21 -7
  114. package/dist/utils/CheckYourAnswers/getCYARowsForContainer.test.js +486 -0
  115. package/dist/utils/CheckYourAnswers/getCYARowsForPage.js +11 -3
  116. package/dist/utils/CheckYourAnswers/getCYARowsForPage.test.js +346 -0
  117. package/dist/utils/CheckYourAnswers/showComponentCYA.js +19 -3
  118. package/dist/utils/CheckYourAnswers/showComponentCYA.test.js +143 -0
  119. package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.js +5 -1
  120. package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.test.js +40 -0
  121. package/dist/utils/CollectionPage/getCollectionPageActiveIndex.test.js +53 -0
  122. package/dist/utils/CollectionPage/mergeCollectionPages.js +25 -17
  123. package/dist/utils/CollectionPage/mergeCollectionPages.test.js +130 -0
  124. package/dist/utils/Component/addShowWhen.js +44 -0
  125. package/dist/utils/Component/addShowWhen.test.js +216 -0
  126. package/dist/utils/Component/applyToComponentTree.js +71 -0
  127. package/dist/utils/Component/applyToComponentTree.test.js +127 -0
  128. package/dist/utils/Component/cleanAttributes.js +8 -2
  129. package/dist/utils/Component/cleanAttributes.test.js +68 -0
  130. package/dist/utils/Component/elevateNestedComponents.js +4 -1
  131. package/dist/utils/Component/elevateNestedComponents.test.js +122 -0
  132. package/dist/utils/Component/getComponent.js +80 -11
  133. package/dist/utils/Component/getComponentTests/getComponent.autocomplete.test.js +4 -4
  134. package/dist/utils/Component/getComponentTests/getComponent.calculation.test.js +25 -24
  135. package/dist/utils/Component/getComponentTests/getComponent.checkboxes.test.js +66 -5
  136. package/dist/utils/Component/getComponentTests/getComponent.date.test.js +2 -2
  137. package/dist/utils/Component/getComponentTests/getComponent.details.test.js +9 -7
  138. package/dist/utils/Component/getComponentTests/getComponent.email.test.js +3 -3
  139. package/dist/utils/Component/getComponentTests/getComponent.file.test.js +3 -3
  140. package/dist/utils/Component/getComponentTests/getComponent.list.test.js +44 -0
  141. package/dist/utils/Component/getComponentTests/{getComponent.textarea.test.js → getComponent.multifile.test.js} +29 -21
  142. package/dist/utils/Component/getComponentTests/getComponent.nested.test.js +159 -83
  143. package/dist/utils/Component/getComponentTests/getComponent.paragraph.test.js +43 -0
  144. package/dist/utils/Component/getComponentTests/getComponent.phoneNumber.test.js +3 -3
  145. package/dist/utils/Component/getComponentTests/getComponent.radios.test.js +55 -5
  146. package/dist/utils/Component/getComponentTests/getComponent.select.test.js +3 -9
  147. package/dist/utils/Component/getComponentTests/getComponent.text.test.js +3 -3
  148. package/dist/utils/Component/getComponentTests/getComponent.textArea.test.js +109 -0
  149. package/dist/utils/Component/getComponentTests/getComponent.time.test.js +7 -7
  150. package/dist/utils/Component/getDefaultValue.js +4 -1
  151. package/dist/utils/Component/getDefaultValue.test.js +50 -0
  152. package/dist/utils/Component/index.js +2 -0
  153. package/dist/utils/Component/isEditable.js +2 -2
  154. package/dist/utils/Component/isEditable.test.js +43 -0
  155. package/dist/utils/Component/optionIsSelected.js +22 -0
  156. package/dist/utils/Component/optionIsSelected.test.js +42 -0
  157. package/dist/utils/Component/setupContainerComponentsPath.js +40 -0
  158. package/dist/utils/Component/setupContainerComponentsPath.test.js +78 -0
  159. package/dist/utils/Component/showComponent.test.js +156 -0
  160. package/dist/utils/Component/wrapInFormGroup.js +1 -1
  161. package/dist/utils/Condition/meetsAllConditions.js +1 -1
  162. package/dist/utils/Condition/meetsAllConditions.test.js +61 -0
  163. package/dist/utils/Condition/meetsCondition.js +74 -4
  164. package/dist/utils/Condition/meetsCondition.test.js +763 -0
  165. package/dist/utils/Condition/meetsOneCondition.js +1 -1
  166. package/dist/utils/Condition/meetsOneCondition.test.js +100 -0
  167. package/dist/utils/Condition/setupConditions.js +6 -3
  168. package/dist/utils/Condition/setupConditions.test.js +33 -0
  169. package/dist/utils/Container/getEditableComponents.test.js +135 -0
  170. package/dist/utils/Container/setupNesting.js +21 -2
  171. package/dist/utils/Container/setupNesting.test.js +145 -0
  172. package/dist/utils/Container/showContainer.test.js +178 -0
  173. package/dist/utils/Data/applyFormula.js +20 -11
  174. package/dist/utils/Data/applyFormula.test.js +263 -0
  175. package/dist/utils/Data/getAutocompleteSource.js +6 -2
  176. package/dist/utils/Data/getAutocompleteSource.test.js +352 -0
  177. package/dist/utils/Data/getDataPath.test.js +48 -0
  178. package/dist/utils/Data/getOptions.js +17 -3
  179. package/dist/utils/Data/getOptions.test.js +140 -0
  180. package/dist/utils/Data/getSourceData.js +2 -2
  181. package/dist/utils/Data/getSourceData.test.js +153 -0
  182. package/dist/utils/Data/refDataToOptions.js +4 -1
  183. package/dist/utils/Data/refDataToOptions.test.js +196 -0
  184. package/dist/utils/Data/setDataItem.test.js +110 -0
  185. package/dist/utils/Data/setupFormData.js +39 -16
  186. package/dist/utils/Data/setupFormData.test.js +410 -0
  187. package/dist/utils/Data/setupRefDataUrlForComponent.js +4 -1
  188. package/dist/utils/Data/setupRefDataUrlForComponent.test.js +131 -0
  189. package/dist/utils/FormPage/applyConditionalProperties.js +35 -0
  190. package/dist/utils/FormPage/applyConditionalProperties.test.js +61 -0
  191. package/dist/utils/FormPage/getFormPage.js +5 -2
  192. package/dist/utils/FormPage/getFormPage.test.js +206 -0
  193. package/dist/utils/FormPage/getFormPages.js +4 -1
  194. package/dist/utils/FormPage/getFormPages.test.js +97 -0
  195. package/dist/utils/FormPage/getPageActions.js +8 -4
  196. package/dist/utils/FormPage/getPageActions.test.js +114 -0
  197. package/dist/utils/FormPage/getParagraphFromText.test.js +27 -0
  198. package/dist/utils/FormPage/index.js +2 -0
  199. package/dist/utils/FormPage/showFormPage.js +2 -2
  200. package/dist/utils/FormPage/showFormPage.test.js +180 -0
  201. package/dist/utils/FormPage/showFormPageCYA.js +1 -0
  202. package/dist/utils/FormPage/showFormPageCYA.test.js +28 -0
  203. package/dist/utils/FormPage/useComponent.js +29 -14
  204. package/dist/utils/FormPage/useComponent.test.js +167 -0
  205. package/dist/utils/Format/formatData.test.js +45 -0
  206. package/dist/utils/Format/formatDataForComponent.js +2 -1
  207. package/dist/utils/Format/formatDataForComponent.test.js +142 -0
  208. package/dist/utils/Format/formatDataForForm.js +4 -1
  209. package/dist/utils/Format/formatDataForForm.test.js +81 -0
  210. package/dist/utils/Format/formatDataForPage.test.js +99 -0
  211. package/dist/utils/Hub/getFormHub.test.js +105 -0
  212. package/dist/utils/Meta/documents/getDocuments.test.js +4 -1
  213. package/dist/utils/Meta/documents/index.js +2 -2
  214. package/dist/utils/Meta/documents/setDocumentsForField.js +31 -0
  215. package/dist/utils/Meta/documents/setDocumentsForField.test.js +59 -0
  216. package/dist/utils/Operate/checkValueIsTruthy.test.js +42 -0
  217. package/dist/utils/Operate/getFirstOf.js +31 -0
  218. package/dist/utils/Operate/getFirstOf.test.js +86 -0
  219. package/dist/utils/Operate/getIndexOfMatchingValueIn.test.js +163 -0
  220. package/dist/utils/Operate/persistValueInFormData.js +2 -1
  221. package/dist/utils/Operate/persistValueInFormData.test.js +115 -0
  222. package/dist/utils/Operate/runPageOperations.js +3 -1
  223. package/dist/utils/Operate/runPageOperations.test.js +105 -0
  224. package/dist/utils/Operate/setValueInFormData.test.js +44 -0
  225. package/dist/utils/Operate/shouldRun.js +16 -13
  226. package/dist/utils/Operate/shouldRun.test.js +66 -0
  227. package/dist/utils/Validate/additional/conditionallyRequired.js +24 -0
  228. package/dist/utils/Validate/additional/conditionallyRequired.test.js +73 -0
  229. package/dist/utils/Validate/additional/index.js +13 -4
  230. package/dist/utils/Validate/additional/mustBeAfter.js +8 -6
  231. package/dist/utils/Validate/additional/mustBeAfter.test.js +15 -1
  232. package/dist/utils/Validate/additional/mustBeBefore.js +9 -5
  233. package/dist/utils/Validate/additional/mustBeBefore.test.js +14 -0
  234. package/dist/utils/Validate/additional/mustBeEarlierDateTime.js +1 -1
  235. package/dist/utils/Validate/additional/mustBeEarlierDateTime.test.js +6 -3
  236. package/dist/utils/Validate/additional/mustBeGreaterThan.js +22 -0
  237. package/dist/utils/Validate/additional/mustBeGreaterThan.test.js +56 -0
  238. package/dist/utils/Validate/additional/mustBeInTheFuture.js +1 -1
  239. package/dist/utils/Validate/additional/mustBeInThePast.js +5 -5
  240. package/dist/utils/Validate/additional/mustBeLessThan.js +7 -6
  241. package/dist/utils/Validate/additional/mustBeLessThan.test.js +11 -1
  242. package/dist/utils/Validate/additional/mustBeNumbersOnly.js +9 -5
  243. package/dist/utils/Validate/additional/mustBeNumbersOnly.test.js +10 -2
  244. package/dist/utils/Validate/additional/mustEnterAtLeastOne.js +1 -0
  245. package/dist/utils/Validate/additional/mustEnterAtLeastOne.test.js +4 -1
  246. package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.js +19 -0
  247. package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.test.js +36 -0
  248. package/dist/utils/Validate/additional/mustSelectOnlyOne.js +29 -0
  249. package/dist/utils/Validate/additional/mustSelectOnlyOne.test.js +52 -0
  250. package/dist/utils/Validate/additional/utils.js +18 -18
  251. package/dist/utils/Validate/index.js +6 -0
  252. package/dist/utils/Validate/validateCollection.js +20 -5
  253. package/dist/utils/Validate/validateCollection.test.js +125 -0
  254. package/dist/utils/Validate/validateComponent.js +36 -20
  255. package/dist/utils/Validate/validateComponent.test.js +365 -0
  256. package/dist/utils/Validate/validateContainer.js +9 -3
  257. package/dist/utils/Validate/validateContainer.test.js +75 -0
  258. package/dist/utils/Validate/validateDate.js +4 -3
  259. package/dist/utils/Validate/validateDate.test.js +114 -0
  260. package/dist/utils/Validate/validateEmail.js +14 -1
  261. package/dist/utils/Validate/validateEmail.test.js +74 -0
  262. package/dist/utils/Validate/validateMultifile.js +32 -0
  263. package/dist/utils/Validate/validateMultifile.test.js +47 -0
  264. package/dist/utils/Validate/validatePage.js +12 -6
  265. package/dist/utils/Validate/validatePage.test.js +472 -0
  266. package/dist/utils/Validate/validateRegex.js +2 -5
  267. package/dist/utils/Validate/validateRegex.test.js +42 -0
  268. package/dist/utils/Validate/validateRequired.js +2 -4
  269. package/dist/utils/Validate/validateRequired.test.js +63 -0
  270. package/dist/utils/Validate/validateTextArea.js +37 -0
  271. package/dist/utils/Validate/validateTextArea.test.js +42 -0
  272. package/dist/utils/Validate/validateTime.js +2 -2
  273. package/dist/utils/Validate/validateTime.test.js +59 -0
  274. package/dist/utils/index.js +4 -1
  275. package/package.json +35 -50
  276. package/dist/utils/Meta/documents/setDocumentForField.js +0 -29
  277. package/dist/utils/Meta/documents/setDocumentForField.test.js +0 -49
@@ -15,10 +15,7 @@ exports.default = void 0;
15
15
  * @param {array} customErrors The array of custom errors for the component.
16
16
  * @returns An error if the value doesn't match the regex pattern.
17
17
  */
18
- var validateRegex = function validateRegex(value) {
19
- var label = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
20
- var pattern = arguments.length > 2 ? arguments[2] : undefined;
21
- var customErrors = arguments.length > 3 ? arguments[3] : undefined;
18
+ var validateRegex = function validateRegex(value, label, pattern, customErrors) {
22
19
  if (!value) {
23
20
  return undefined;
24
21
  }
@@ -37,7 +34,7 @@ var validateRegex = function validateRegex(value) {
37
34
  }
38
35
  }
39
36
  }
40
- if (label === '') {
37
+ if (!label) {
41
38
  return 'Component failed regex validation';
42
39
  }
43
40
  return "".concat(label, " failed regex validation");
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ var _validateRegex = _interopRequireDefault(require("./validateRegex"));
4
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5
+ // Local imports
6
+
7
+ describe('utils', function () {
8
+ describe('Validate', function () {
9
+ describe('regex', function () {
10
+ var GOOD_VALUE = 'hello';
11
+ var BAD_VALUE = 'h3llo';
12
+ var LABEL = 'Component';
13
+ var PATTERN = '^[a-z]*$';
14
+ var CUSTOM_ERRORS = [{
15
+ "type": "pattern",
16
+ "message": "Regex validation failed for ".concat(LABEL)
17
+ }];
18
+ var DEFAULT_ERROR = [{
19
+ "type": "pattern"
20
+ }];
21
+
22
+ // Valid values
23
+ it('should return no error when the value matches the regex pattern', function () {
24
+ expect((0, _validateRegex.default)(GOOD_VALUE, LABEL, PATTERN, CUSTOM_ERRORS)).toBeUndefined();
25
+ });
26
+ it('should return no error when the value is an empty string', function () {
27
+ expect((0, _validateRegex.default)('', LABEL, PATTERN, CUSTOM_ERRORS)).toBeUndefined();
28
+ });
29
+
30
+ // Invalid values
31
+ it('should return a custom error when the value does not match the regex pattern and one is specified', function () {
32
+ expect((0, _validateRegex.default)(BAD_VALUE, LABEL, PATTERN, CUSTOM_ERRORS)).toEqual(CUSTOM_ERRORS[0].message);
33
+ });
34
+ it('should return an error using label when the value does not match the regex pattern and a custom error is not specified', function () {
35
+ expect((0, _validateRegex.default)(BAD_VALUE, LABEL, PATTERN, DEFAULT_ERROR)).toEqual("".concat(LABEL, " failed regex validation"));
36
+ });
37
+ it('should return a default error when the value does not match the regex pattern and both a custom error and label are not specified', function () {
38
+ expect((0, _validateRegex.default)(BAD_VALUE, '', PATTERN, DEFAULT_ERROR)).toEqual('Component failed regex validation');
39
+ });
40
+ });
41
+ });
42
+ });
@@ -11,9 +11,7 @@ exports.default = void 0;
11
11
  * @param {string} label The label to use in any error message.
12
12
  * @returns An error if the value is nullish.
13
13
  */
14
- var validateRequired = function validateRequired(value) {
15
- var label = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
16
- var customErrors = arguments.length > 2 ? arguments[2] : undefined;
14
+ var validateRequired = function validateRequired(value, label, customErrors) {
17
15
  var hasValue = false;
18
16
  if (!!value || value === false || value === 0) {
19
17
  hasValue = true;
@@ -32,7 +30,7 @@ var validateRequired = function validateRequired(value) {
32
30
  return result[0].message;
33
31
  }
34
32
  }
35
- var name = label ? label : 'Field';
33
+ var name = label || 'Field';
36
34
  return "".concat(name, " is required");
37
35
  }
38
36
  return undefined;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+
3
+ var _validateRequired = _interopRequireDefault(require("./validateRequired"));
4
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5
+ // Local imports
6
+
7
+ describe('utils', function () {
8
+ describe('Validate', function () {
9
+ describe('required', function () {
10
+ var LABEL = 'Component';
11
+ var ERROR = "".concat(LABEL, " is required");
12
+
13
+ // Valid values
14
+ it('should return no error when the value is set', function () {
15
+ expect((0, _validateRequired.default)('value', LABEL)).toBeUndefined();
16
+ });
17
+ it('should return no error when the value is an empty object', function () {
18
+ expect((0, _validateRequired.default)({}, LABEL)).toBeUndefined();
19
+ });
20
+ it('should return no error when the value is a non-empty array', function () {
21
+ expect((0, _validateRequired.default)(['bob'], LABEL)).toBeUndefined();
22
+ });
23
+ it('should return no error when the value is a boolean false', function () {
24
+ expect((0, _validateRequired.default)(false, LABEL)).toBeUndefined();
25
+ });
26
+ it('should return no error when the value is the number zero', function () {
27
+ expect((0, _validateRequired.default)(0, LABEL)).toBeUndefined();
28
+ });
29
+
30
+ // Invalid values
31
+ it('should return an error when the value is undefined', function () {
32
+ expect((0, _validateRequired.default)(undefined, LABEL)).toEqual(ERROR);
33
+ });
34
+ it('should return an error when the value is null', function () {
35
+ expect((0, _validateRequired.default)(null, LABEL)).toEqual(ERROR);
36
+ });
37
+ it('should return an error when the value is an empty string', function () {
38
+ expect((0, _validateRequired.default)('', LABEL)).toEqual(ERROR);
39
+ });
40
+ it('should return an error when the value is a string containing just spaces', function () {
41
+ expect((0, _validateRequired.default)(' ', LABEL)).toEqual(ERROR);
42
+ });
43
+ it('should return an error when the value is an empty array', function () {
44
+ expect((0, _validateRequired.default)([], LABEL)).toEqual(ERROR);
45
+ });
46
+ it('should use a default label when none is specified', function () {
47
+ expect((0, _validateRequired.default)(undefined, undefined)).toEqual('Field is required');
48
+ });
49
+ it('should use a custom error when one is provided', function () {
50
+ expect((0, _validateRequired.default)(undefined, undefined, [{
51
+ type: 'required',
52
+ message: 'custom error message'
53
+ }])).toEqual('custom error message');
54
+ });
55
+ it('should ignore a custom error when not of type required', function () {
56
+ expect((0, _validateRequired.default)(undefined, undefined, [{
57
+ type: 'genericError',
58
+ message: 'generic error message'
59
+ }])).toEqual('Field is required');
60
+ });
61
+ });
62
+ });
63
+ });
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ /**
8
+ * Validates a text area when showCharacterCount property has been set.
9
+ *
10
+ * @param {string} label The label to use in any error message.
11
+ * @param {*} value The value to validate.
12
+ * @param {string} showCharacterCount The flag to enable character count validation.
13
+ * @param {array} customErrors An array of custom errors for the component.
14
+ * @param {number} maxLength The maximum allowable number of characters (by default, this is 1000 characters).
15
+ * @returns An error if the value exceeds the maximum allowable number of characters.
16
+ */
17
+ var validateTextArea = function validateTextArea(label, value, showCharacterCount, customErrors) {
18
+ var maxLength = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1000;
19
+ if (!showCharacterCount) {
20
+ return undefined;
21
+ }
22
+ var hasError = value.length > maxLength;
23
+ if (hasError) {
24
+ if (Array.isArray(customErrors)) {
25
+ var result = customErrors.filter(function (error) {
26
+ return error.type === 'length';
27
+ });
28
+ if (result && result.length > 0 && result[0].message) {
29
+ return result[0].message;
30
+ }
31
+ }
32
+ return "".concat(label, " must be ").concat(maxLength, " characters or less");
33
+ }
34
+ return undefined;
35
+ };
36
+ var _default = validateTextArea;
37
+ exports.default = _default;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ var _validateTextArea = _interopRequireDefault(require("./validateTextArea"));
4
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5
+ describe('utils', function () {
6
+ describe('Validate', function () {
7
+ describe('TextArea', function () {
8
+ var MAX_LENGTH = 10;
9
+ var LABEL = 'This is a custom label';
10
+ var CUSTOM_ERROR = "The value must be ".concat(MAX_LENGTH, " characters or less");
11
+ var ERROR_MSG = "".concat(LABEL, " must be ").concat(MAX_LENGTH, " characters or less");
12
+ var CUSTOM_ERRORS = [{
13
+ type: 'length',
14
+ message: CUSTOM_ERROR
15
+ }];
16
+ it('should return no error when the character count flag is disabled', function () {
17
+ var VALUE = 'ALPHA BRAVO';
18
+ expect((0, _validateTextArea.default)(LABEL, VALUE, false, CUSTOM_ERRORS, MAX_LENGTH)).toBeUndefined();
19
+ });
20
+ it('should return no error when value length has not exceeded the maximum allowable character length', function () {
21
+ var VALUE = 'ALPHA BRA';
22
+ expect((0, _validateTextArea.default)(LABEL, VALUE, true, CUSTOM_ERRORS, MAX_LENGTH)).toBeUndefined();
23
+ });
24
+ it('should return no error when value length has not exceeded the default maximum allowable character length', function () {
25
+ var VALUE = 'ALPHA BRAVO';
26
+ expect((0, _validateTextArea.default)(LABEL, VALUE, true, undefined)).toBeUndefined();
27
+ });
28
+ it('should return an error when value length has exceeded the maximum allowable character length', function () {
29
+ var VALUE = 'ALPHA BRAVO';
30
+ var error = (0, _validateTextArea.default)(LABEL, VALUE, true, undefined, MAX_LENGTH);
31
+ expect(error).toBeDefined();
32
+ expect(error).toEqual(ERROR_MSG);
33
+ });
34
+ it('should return a custom error when one is provided', function () {
35
+ var VALUE = 'ALPHA BRAVO CHARLIE';
36
+ var error = (0, _validateTextArea.default)(LABEL, VALUE, true, CUSTOM_ERRORS, MAX_LENGTH);
37
+ expect(error).toBeDefined();
38
+ expect(error).toEqual(CUSTOM_ERROR);
39
+ });
40
+ });
41
+ });
42
+ });
@@ -8,8 +8,8 @@ var _utils = require("./additional/utils");
8
8
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
9
9
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
10
10
  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); }
11
- 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; }
12
- function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
11
+ 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; }
12
+ function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
13
13
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
14
14
  /**
15
15
  * Checks if a time passed is a valid time.
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+
3
+ var _validateTime = _interopRequireDefault(require("./validateTime"));
4
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5
+ describe('utils', function () {
6
+ describe('Validate', function () {
7
+ describe('time', function () {
8
+ test('should return no error when the value is an empty string', function () {
9
+ expect((0, _validateTime.default)('')).toEqual({
10
+ message: undefined,
11
+ propsInError: undefined
12
+ });
13
+ });
14
+ test('should return undefined if a time string is valid', function () {
15
+ var output = (0, _validateTime.default)('14:30');
16
+ expect(output).toEqual({
17
+ message: undefined,
18
+ propsInError: undefined
19
+ });
20
+ });
21
+ test('should return an error if no hour is given', function () {
22
+ var output = (0, _validateTime.default)(':30');
23
+ expect(output).toEqual({
24
+ message: 'Time must include a hour',
25
+ propsInError: {
26
+ hour: true
27
+ }
28
+ });
29
+ });
30
+ test('should return an error if the hour is not between 0 and 23', function () {
31
+ var output = (0, _validateTime.default)('35:30');
32
+ expect(output).toEqual({
33
+ message: 'Hour must be between 0 and 23',
34
+ propsInError: {
35
+ hour: true
36
+ }
37
+ });
38
+ });
39
+ test('should return an error if no minute is given', function () {
40
+ var output = (0, _validateTime.default)('14:');
41
+ expect(output).toEqual({
42
+ message: 'Time must include a minute',
43
+ propsInError: {
44
+ minute: true
45
+ }
46
+ });
47
+ });
48
+ test('should return an error if the minute is not between 0 and 59', function () {
49
+ var output = (0, _validateTime.default)('14:75');
50
+ expect(output).toEqual({
51
+ message: 'Minute must be between 0 and 59',
52
+ propsInError: {
53
+ minute: true
54
+ }
55
+ });
56
+ });
57
+ });
58
+ });
59
+ });
@@ -18,9 +18,12 @@ var _Meta = _interopRequireDefault(require("./Meta"));
18
18
  var _Operate = _interopRequireDefault(require("./Operate"));
19
19
  var _Validate = _interopRequireDefault(require("./Validate"));
20
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
21
22
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
22
23
  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; }
23
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
24
+ 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; }
25
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
26
+ 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); }
24
27
  var Utils = _objectSpread({
25
28
  CheckYourAnswers: _CheckYourAnswers.default,
26
29
  CollectionPage: _CollectionPage.default,
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@ukhomeoffice/cop-react-form-renderer",
3
- "version": "5.0.0-alpha",
3
+ "version": "5.0.0",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "clean": "rimraf dist",
7
- "test": "jest test",
8
- "test:coverage": "jest test --coverage --watchAll=false",
7
+ "test": "react-scripts test",
8
+ "test:coverage": "yarn test --coverage --watchAll=false",
9
9
  "lint": "eslint --ext .js,.jsx src",
10
10
  "storybook:start": "start-storybook --docs -s src/assets --no-manager-cache -p 6007",
11
11
  "storybook:build": "build-storybook --docs -s src/assets",
@@ -13,68 +13,53 @@
13
13
  "storybook": "yarn storybook:start",
14
14
  "deploy-storybook": "storybook-to-ghpages -e storybook-static",
15
15
  "compile": "yarn clean && cross-env NODE_ENV=production babel src --out-dir dist --copy-files && yarn post-compile",
16
- "post-compile": "yarn remove-tests && yarn remove-stories && yarn remove-assets",
17
- "remove-tests": "rimraf dist/*.test.* dist/**/*.test.* dist/**/**/*.test.* dist/setupTests.js",
18
- "remove-stories": "rimraf dist/*.stories.* dist/**/*.stories.* dist/**/**/*.stories.*",
19
- "remove-assets": "rimraf dist/json dist/assets"
16
+ "post-compile": "rimraf dist/*.test.* dist/**/*.test.* dist/**/*.stories.* dist/docs dist/assets"
20
17
  },
21
18
  "dependencies": {
22
- "@ukhomeoffice/cop-react-components": "3.0.0-charlie",
19
+ "@ukhomeoffice/cop-react-components": "^3.0.0",
23
20
  "axios": "^0.23.0",
24
21
  "dayjs": "^1.11.0",
25
22
  "govuk-frontend": "^4.3.1",
26
23
  "web-vitals": "^1.0.1"
27
24
  },
28
25
  "devDependencies": {
29
- "@babel/cli": "^7.19.3",
30
- "@babel/eslint-parser": "^7.19.1",
31
- "@babel/preset-env": "^7.19.4",
32
- "@babel/preset-react": "^7.18.6",
26
+ "@babel/cli": "^7.15.4",
27
+ "@babel/preset-env": "^7.15.6",
28
+ "@babel/preset-react": "^7.14.5",
33
29
  "@monaco-editor/react": "^4.3.1",
34
- "@storybook/addon-a11y": "^6.5.13",
35
- "@storybook/addon-actions": "^6.5.13",
36
- "@storybook/addon-docs": "^6.5.13",
37
- "@storybook/addon-essentials": "^6.5.13",
38
- "@storybook/addon-knobs": "^6.4.0",
39
- "@storybook/addon-links": "^6.5.13",
40
- "@storybook/builder-webpack5": "^6.5.13",
41
- "@storybook/manager-webpack5": "^6.5.13",
42
- "@storybook/node-logger": "^6.5.13",
43
- "@storybook/preset-create-react-app": "^4.1.2",
44
- "@storybook/react": "^6.5.13",
30
+ "@storybook/addon-a11y": "^6.3.8",
31
+ "@storybook/addon-actions": "^6.3.8",
32
+ "@storybook/addon-docs": "^6.3.8",
33
+ "@storybook/addon-essentials": "^6.3.8",
34
+ "@storybook/addon-knobs": "^6.3.1",
35
+ "@storybook/addon-links": "^6.3.8",
36
+ "@storybook/node-logger": "^6.3.8",
37
+ "@storybook/preset-create-react-app": "^3.2.0",
38
+ "@storybook/react": "^6.3.8",
45
39
  "@storybook/storybook-deployer": "^2.8.10",
46
- "@storybook/theming": "^6.5.13",
47
- "@testing-library/jest-dom": "^5.14.1",
48
- "@testing-library/react": "^12.1.2",
49
- "@testing-library/react-hooks": "^8.0.1",
50
- "@testing-library/user-event": "^13.5.0",
40
+ "@storybook/theming": "^6.3.8",
41
+ "@testing-library/jest-dom": "^5.11.4",
42
+ "@testing-library/react": "^11.1.0",
43
+ "@testing-library/react-hooks": "^7.0.2",
44
+ "@testing-library/user-event": "^12.1.10",
51
45
  "axios-mock-adapter": "^1.18.1",
52
- "babel-loader": "^8.2.3",
53
46
  "cross-env": "^7.0.3",
54
- "eslint": "^7.18.0",
55
- "eslint-config-airbnb": "^18.2.1",
56
- "eslint-plugin-babel": "^5.3.1",
57
- "eslint-plugin-cypress": "^2.11.2",
58
- "eslint-plugin-filenames": "^1.3.2",
59
- "eslint-plugin-import": "^2.22.1",
60
- "eslint-plugin-jest": "^24.1.3",
61
- "eslint-plugin-jsx-a11y": "^6.4.1",
62
- "eslint-plugin-react": "^7.22.0",
63
- "eslint-plugin-react-hooks": "^4.2.0",
64
47
  "html-react-parser": "^0.10.5",
65
- "jest": "^27.3.1",
66
- "sass": "^1.32.2",
67
- "react": "^17.0.1",
68
- "react-dom": "^17.0.1",
69
- "react-scripts": "^5.0.1",
70
- "react-test-renderer": "^17.0.2",
71
- "storybook-addon-mock": "^2.0.1",
72
- "webpack": "^5.74.0",
73
- "webpack-cli": "^4.10.0"
48
+ "node-sass": "^6.0.1",
49
+ "prop-types": "^15.8.1",
50
+ "react": "^16.13.1",
51
+ "react-dom": "^16.13.1",
52
+ "react-scripts": "4.0.3",
53
+ "storybook-addon-mock": "^2.0.1"
74
54
  },
75
55
  "peerDependencies": {
76
- "react": ">=17.0.1",
77
- "react-dom": ">=17.0.1"
56
+ "react": "^16.13.1",
57
+ "react-dom": "^16.13.1",
58
+ "react-scripts": "4.0.3"
59
+ },
60
+ "optionalDependencies": {
61
+ "babel-loader": "8.1.0",
62
+ "webpack": "4.44.2"
78
63
  },
79
64
  "main": "dist/index.js",
80
65
  "files": [
@@ -1,29 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _constants = require("../constants");
8
- var _getDocuments = _interopRequireDefault(require("./getDocuments"));
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
11
- 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; }
12
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
13
- var setDocumentForField = function setDocumentForField(document, formData, field, allowMultiple) {
14
- var documents = (0, _getDocuments.default)(formData);
15
- if (!allowMultiple) {
16
- documents = documents.filter(function (d) {
17
- return d.field !== field;
18
- });
19
- }
20
- if (document) {
21
- documents.push(_objectSpread(_objectSpread({}, document), {}, {
22
- field: field
23
- }));
24
- }
25
- var existing = formData ? formData[_constants.META_PROPERTY] : undefined;
26
- return _objectSpread(_objectSpread({}, existing), {}, _defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, documents));
27
- };
28
- var _default = setDocumentForField;
29
- exports.default = _default;
@@ -1,49 +0,0 @@
1
- "use strict";
2
-
3
- var _constants = require("../constants");
4
- var _setDocumentForField = _interopRequireDefault(require("./setDocumentForField"));
5
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
7
- describe('Utils.Meta.documents.add', function () {
8
- var ALPHA_DOCUMENT = {
9
- field: 'alpha',
10
- url: 'http://alpha-bravo.com/files/alpha'
11
- };
12
- var BRAVO_DOCUMENT = {
13
- field: 'bravo',
14
- url: 'http://alpha-bravo.com/files/bravo'
15
- };
16
- it('should return an appropriately set up object if formData is null', function () {
17
- expect((0, _setDocumentForField.default)(ALPHA_DOCUMENT, null, ALPHA_DOCUMENT.field)).toEqual(_defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT]));
18
- });
19
- it('should add a new document to the array', function () {
20
- var FORM_DATA = _defineProperty({}, _constants.META_PROPERTY, _defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT]));
21
- expect((0, _setDocumentForField.default)(BRAVO_DOCUMENT, FORM_DATA, BRAVO_DOCUMENT.field)).toEqual(_defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT, BRAVO_DOCUMENT]));
22
- });
23
- it('should replace an existing document with the same field', function () {
24
- var NEW_URL = 'http://replacement.com/files/alpha';
25
- var NEW_ALPHA = {
26
- field: ALPHA_DOCUMENT.field,
27
- url: NEW_URL
28
- };
29
- var FORM_DATA = _defineProperty({}, _constants.META_PROPERTY, _defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT]));
30
- expect((0, _setDocumentForField.default)(NEW_ALPHA, FORM_DATA, NEW_ALPHA.field)).toEqual(_defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [NEW_ALPHA]));
31
- });
32
- it('should add a document with the same field if allowMultiple is true', function () {
33
- var NEW_URL = 'http://replacement.com/files/alpha';
34
- var NEW_ALPHA = {
35
- field: ALPHA_DOCUMENT.field,
36
- url: NEW_URL
37
- };
38
- var FORM_DATA = _defineProperty({}, _constants.META_PROPERTY, _defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT]));
39
- expect((0, _setDocumentForField.default)(NEW_ALPHA, FORM_DATA, NEW_ALPHA.field, true)).toEqual(_defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT, NEW_ALPHA]));
40
- });
41
- it('should handle a null document being passed where a document with that field already exists', function () {
42
- var FORM_DATA = _defineProperty({}, _constants.META_PROPERTY, _defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT]));
43
- expect((0, _setDocumentForField.default)(null, FORM_DATA, ALPHA_DOCUMENT.field)).toEqual(_defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, []));
44
- });
45
- it('should handle a null document being passed where a document with that field does not already exist', function () {
46
- var FORM_DATA = _defineProperty({}, _constants.META_PROPERTY, _defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT]));
47
- expect((0, _setDocumentForField.default)(null, FORM_DATA, BRAVO_DOCUMENT.field)).toEqual(_defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT]));
48
- });
49
- });