@ukhomeoffice/cop-react-form-renderer 4.37.0 → 4.39.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.
@@ -144,6 +144,8 @@ var FormComponent = function FormComponent(_ref) {
144
144
  target: target
145
145
  })) {
146
146
  if (component.type === _models.ComponentTypes.FILE) {
147
+ changeMetaDocuments([target.value]);
148
+ } else if (component.type === _models.ComponentTypes.MULTI_FILE) {
147
149
  changeMetaDocuments(target.value);
148
150
  }
149
151
  }
@@ -18,6 +18,7 @@ var TYPE_HEADING = 'heading';
18
18
  var TYPE_HTML = 'html';
19
19
  var TYPE_INSET_TEXT = 'inset-text';
20
20
  var TYPE_LIST = 'list';
21
+ var TYPE_MULTI_FILE = 'multifile';
21
22
  var TYPE_PARAGRAPH = 'paragraph';
22
23
  var TYPE_PHONE_NUMBER = 'phone-number';
23
24
  var TYPE_RADIOS = 'radios';
@@ -41,6 +42,7 @@ var ComponentTypes = {
41
42
  HTML: TYPE_HTML,
42
43
  INSET_TEXT: TYPE_INSET_TEXT,
43
44
  LIST: TYPE_LIST,
45
+ MULTI_FILE: TYPE_MULTI_FILE,
44
46
  PARAGRAPH: TYPE_PARAGRAPH,
45
47
  PHONE_NUMBER: TYPE_PHONE_NUMBER,
46
48
  RADIOS: TYPE_RADIOS,
@@ -112,6 +112,11 @@ var getFileUpload = function getFileUpload(config) {
112
112
  return /*#__PURE__*/_react.default.createElement(_copReactComponents.FileUpload, attrs);
113
113
  };
114
114
 
115
+ var getMultiFileUpload = function getMultiFileUpload(config) {
116
+ var attrs = (0, _cleanAttributes.default)(config);
117
+ return /*#__PURE__*/_react.default.createElement(_copReactComponents.MultiFileUpload, attrs);
118
+ };
119
+
115
120
  var getHeading = function getHeading(config) {
116
121
  var attrs = (0, _cleanAttributes.default)(config);
117
122
  return /*#__PURE__*/_react.default.createElement(_copReactComponents.Heading, attrs, config.content);
@@ -247,6 +252,9 @@ var getComponentByType = function getComponentByType(config) {
247
252
  case _models.ComponentTypes.FILE:
248
253
  return getFileUpload(config);
249
254
 
255
+ case _models.ComponentTypes.MULTI_FILE:
256
+ return getMultiFileUpload(config);
257
+
250
258
  case _models.ComponentTypes.WARNING:
251
259
  return getWarningText(config);
252
260
 
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+
3
+ var _react = require("@testing-library/react");
4
+
5
+ var _models = require("../../../models");
6
+
7
+ var _getComponent = _interopRequireDefault(require("../getComponent"));
8
+
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+
11
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
12
+
13
+ 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."); }
14
+
15
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
16
+
17
+ 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; }
18
+
19
+ 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; }
20
+
21
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
22
+
23
+ describe('utils.Component.get', function () {
24
+ it('should return an appropriately rendered multi file component', function () {
25
+ var ID = 'test-id';
26
+ var FIELD_ID = 'field-id';
27
+ var LABEL = 'label';
28
+ var ON_CHANGE_CALLS = [];
29
+
30
+ var ON_CHANGE = function ON_CHANGE(e) {
31
+ ON_CHANGE_CALLS.push(e.target);
32
+ };
33
+
34
+ var COMPONENT = {
35
+ type: _models.ComponentTypes.MULTI_FILE,
36
+ id: ID,
37
+ fieldId: FIELD_ID,
38
+ label: LABEL,
39
+ onChange: ON_CHANGE,
40
+ 'data-testid': ID
41
+ };
42
+
43
+ var _render = (0, _react.render)((0, _getComponent.default)(COMPONENT)),
44
+ container = _render.container;
45
+
46
+ var _getAllByTestId = (0, _react.getAllByTestId)(container, ID),
47
+ _getAllByTestId2 = _slicedToArray(_getAllByTestId, 2),
48
+ formGroup = _getAllByTestId2[0],
49
+ wrapper = _getAllByTestId2[1];
50
+
51
+ var input = wrapper.querySelector('#dropzone').children[0];
52
+ expect(formGroup.tagName).toEqual('DIV');
53
+ expect(formGroup.classList).toContain('govuk-form-group');
54
+ var label = undefined;
55
+ formGroup.childNodes[0].childNodes.forEach(function (node) {
56
+ // Check if it's an element.
57
+ if (node instanceof Element && node.tagName === 'LEGEND') {
58
+ label = node.childNodes[0];
59
+ }
60
+ });
61
+ expect(label).toBeDefined();
62
+ expect(label.innerHTML).toContain(LABEL);
63
+ expect(label.getAttribute('for')).toEqual(ID);
64
+ expect(wrapper.tagName).toEqual('DIV');
65
+ expect(wrapper.classList).toContain('cop-multi-file-upload');
66
+ expect(wrapper.id).toEqual(ID);
67
+ var str = JSON.stringify({
68
+ alpha: 'bravo'
69
+ });
70
+ var blob = new Blob([str]);
71
+ var FILE = new File([blob], 'test.json', {
72
+ type: 'application/JSON'
73
+ });
74
+
75
+ _react.fireEvent.change(input, {
76
+ target: {
77
+ files: [FILE]
78
+ }
79
+ });
80
+
81
+ expect(ON_CHANGE_CALLS.length).toEqual(1);
82
+ expect(input.files.length).toEqual(1);
83
+ });
84
+ });
@@ -8,7 +8,7 @@ exports.default = exports.EDITABLE_TYPES = void 0;
8
8
  var _models = require("../../models");
9
9
 
10
10
  // Local imports
11
- var EDITABLE_TYPES = [_models.ComponentTypes.AUTOCOMPLETE, _models.ComponentTypes.CALCULATION, _models.ComponentTypes.CHECKBOXES, _models.ComponentTypes.DATE, _models.ComponentTypes.EMAIL, _models.ComponentTypes.FILE, _models.ComponentTypes.PHONE_NUMBER, _models.ComponentTypes.RADIOS, _models.ComponentTypes.SELECT, _models.ComponentTypes.TEXT, _models.ComponentTypes.TEXT_AREA, _models.ComponentTypes.TIME];
11
+ var EDITABLE_TYPES = [_models.ComponentTypes.AUTOCOMPLETE, _models.ComponentTypes.CALCULATION, _models.ComponentTypes.CHECKBOXES, _models.ComponentTypes.DATE, _models.ComponentTypes.EMAIL, _models.ComponentTypes.FILE, _models.ComponentTypes.MULTI_FILE, _models.ComponentTypes.PHONE_NUMBER, _models.ComponentTypes.RADIOS, _models.ComponentTypes.SELECT, _models.ComponentTypes.TEXT, _models.ComponentTypes.TEXT_AREA, _models.ComponentTypes.TIME];
12
12
  exports.EDITABLE_TYPES = EDITABLE_TYPES;
13
13
 
14
14
  var isEditable = function isEditable(options) {
@@ -7,7 +7,7 @@ exports.default = void 0;
7
7
 
8
8
  var _constants = require("../constants");
9
9
 
10
- var _setDocumentForField = _interopRequireDefault(require("./setDocumentForField"));
10
+ var _setDocumentsForField = _interopRequireDefault(require("./setDocumentsForField"));
11
11
 
12
12
  var _getDocuments = _interopRequireDefault(require("./getDocuments"));
13
13
 
@@ -15,7 +15,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
15
15
 
16
16
  // Local imports
17
17
  var documents = {
18
- setForField: _setDocumentForField.default,
18
+ setForField: _setDocumentsForField.default,
19
19
  get: _getDocuments.default,
20
20
  name: _constants.META_DOCUMENTS_PROPERTY
21
21
  };
@@ -17,24 +17,22 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
17
17
 
18
18
  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; }
19
19
 
20
- var setDocumentForField = function setDocumentForField(document, formData, field, allowMultiple) {
21
- var documents = (0, _getDocuments.default)(formData);
22
-
23
- if (!allowMultiple) {
24
- documents = documents.filter(function (d) {
25
- return d.field !== field;
20
+ var setDocumentsForField = function setDocumentsForField(documents, formData, field, allowMultiple) {
21
+ var changedDocuments = allowMultiple ? (0, _getDocuments.default)(formData) : (0, _getDocuments.default)(formData).filter(function (d) {
22
+ return d.field !== field;
23
+ });
24
+
25
+ if (Array.isArray(documents)) {
26
+ documents.forEach(function (document) {
27
+ changedDocuments.push(_objectSpread(_objectSpread({}, document), {}, {
28
+ field: field
29
+ }));
26
30
  });
27
31
  }
28
32
 
29
- if (document) {
30
- documents.push(_objectSpread(_objectSpread({}, document), {}, {
31
- field: field
32
- }));
33
- }
34
-
35
33
  var existing = formData ? formData[_constants.META_PROPERTY] : undefined;
36
- return _objectSpread(_objectSpread({}, existing), {}, _defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, documents));
34
+ return _objectSpread(_objectSpread({}, existing), {}, _defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, changedDocuments));
37
35
  };
38
36
 
39
- var _default = setDocumentForField;
37
+ var _default = setDocumentsForField;
40
38
  exports.default = _default;
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+
3
+ var _constants = require("../constants");
4
+
5
+ var _setDocumentsForField = _interopRequireDefault(require("./setDocumentsForField"));
6
+
7
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8
+
9
+ 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; }
10
+
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
+
13
+ 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; }
14
+
15
+ describe('Utils.Meta.documents.add', function () {
16
+ var ALPHA_DOCUMENT = {
17
+ field: 'alpha',
18
+ url: 'http://alpha-bravo.com/files/alpha'
19
+ };
20
+ var BRAVO_DOCUMENT = {
21
+ field: 'bravo',
22
+ url: 'http://alpha-bravo.com/files/bravo'
23
+ };
24
+ it('should return an appropriately set up object if formData is null', function () {
25
+ expect((0, _setDocumentsForField.default)([ALPHA_DOCUMENT], null, ALPHA_DOCUMENT.field)).toEqual(_defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT]));
26
+ });
27
+ it('should add a new document to the array', function () {
28
+ var FORM_DATA = _defineProperty({}, _constants.META_PROPERTY, _defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT]));
29
+
30
+ expect((0, _setDocumentsForField.default)([BRAVO_DOCUMENT], FORM_DATA, BRAVO_DOCUMENT.field)).toEqual(_defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT, BRAVO_DOCUMENT]));
31
+ });
32
+ it('should add multiple new documents to the array', function () {
33
+ var FORM_DATA = _defineProperty({}, _constants.META_PROPERTY, _defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, []));
34
+
35
+ var SECOND_DOCUMENT = _objectSpread({}, ALPHA_DOCUMENT);
36
+
37
+ expect((0, _setDocumentsForField.default)([ALPHA_DOCUMENT, SECOND_DOCUMENT], FORM_DATA, ALPHA_DOCUMENT.field)).toEqual(_defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT, SECOND_DOCUMENT]));
38
+ });
39
+ it('should replace an existing document with the same field', function () {
40
+ var NEW_URL = 'http://replacement.com/files/alpha';
41
+ var NEW_ALPHA = {
42
+ field: ALPHA_DOCUMENT.field,
43
+ url: NEW_URL
44
+ };
45
+
46
+ var FORM_DATA = _defineProperty({}, _constants.META_PROPERTY, _defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT]));
47
+
48
+ expect((0, _setDocumentsForField.default)([NEW_ALPHA], FORM_DATA, NEW_ALPHA.field)).toEqual(_defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [NEW_ALPHA]));
49
+ });
50
+ it('should add a document with the same field if allowMultiple is true', function () {
51
+ var NEW_URL = 'http://replacement.com/files/alpha';
52
+ var NEW_ALPHA = {
53
+ field: ALPHA_DOCUMENT.field,
54
+ url: NEW_URL
55
+ };
56
+
57
+ var FORM_DATA = _defineProperty({}, _constants.META_PROPERTY, _defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT]));
58
+
59
+ expect((0, _setDocumentsForField.default)([NEW_ALPHA], FORM_DATA, NEW_ALPHA.field, true)).toEqual(_defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT, NEW_ALPHA]));
60
+ });
61
+ it('should handle a null document being passed where a document with that field already exists', function () {
62
+ var FORM_DATA = _defineProperty({}, _constants.META_PROPERTY, _defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT]));
63
+
64
+ expect((0, _setDocumentsForField.default)(null, FORM_DATA, ALPHA_DOCUMENT.field)).toEqual(_defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, []));
65
+ });
66
+ it('should handle a null document being passed where a document with that field does not already exist', function () {
67
+ var FORM_DATA = _defineProperty({}, _constants.META_PROPERTY, _defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT]));
68
+
69
+ expect((0, _setDocumentsForField.default)(null, FORM_DATA, BRAVO_DOCUMENT.field)).toEqual(_defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT]));
70
+ });
71
+ });
@@ -11,6 +11,8 @@ var _validateDate = _interopRequireDefault(require("./validateDate"));
11
11
 
12
12
  var _validateEmail = _interopRequireDefault(require("./validateEmail"));
13
13
 
14
+ var _validateMultifile = _interopRequireDefault(require("./validateMultifile"));
15
+
14
16
  var _validatePage = _interopRequireDefault(require("./validatePage"));
15
17
 
16
18
  var _validateRegex = _interopRequireDefault(require("./validateRegex"));
@@ -26,6 +28,7 @@ var Validate = {
26
28
  component: _validateComponent.default,
27
29
  email: _validateEmail.default,
28
30
  date: _validateDate.default,
31
+ multifile: _validateMultifile.default,
29
32
  page: _validatePage.default,
30
33
  regex: _validateRegex.default,
31
34
  required: _validateRequired.default,
@@ -19,6 +19,8 @@ var _validateDate = _interopRequireDefault(require("./validateDate"));
19
19
 
20
20
  var _validateEmail = _interopRequireDefault(require("./validateEmail"));
21
21
 
22
+ var _validateMultifile = _interopRequireDefault(require("./validateMultifile"));
23
+
22
24
  var _validateRegex = _interopRequireDefault(require("./validateRegex"));
23
25
 
24
26
  var _validateRequired = _interopRequireDefault(require("./validateRequired"));
@@ -96,6 +98,10 @@ var validateComponent = function validateComponent(component, outerData, formDat
96
98
 
97
99
  break;
98
100
 
101
+ case _models.ComponentTypes.MULTI_FILE:
102
+ error = (0, _validateMultifile.default)(value, component.custom_errors);
103
+ break;
104
+
99
105
  default:
100
106
  break;
101
107
  }
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.DEFAULT_ERROR = void 0;
7
+ var DEFAULT_ERROR = 'Invalid files must be deleted';
8
+ exports.DEFAULT_ERROR = DEFAULT_ERROR;
9
+
10
+ var validateMultifile = function validateMultifile(value, customErrors) {
11
+ var inError = false;
12
+ value.every(function (entry) {
13
+ inError = entry.error;
14
+ return !inError;
15
+ });
16
+
17
+ if (inError) {
18
+ if (Array.isArray(customErrors)) {
19
+ var result = customErrors.filter(function (error) {
20
+ return error.type === 'invalidFile';
21
+ });
22
+
23
+ if (result && result.length > 0 && result[0].message) {
24
+ return result[0].message;
25
+ }
26
+ }
27
+
28
+ return DEFAULT_ERROR;
29
+ }
30
+
31
+ return undefined;
32
+ };
33
+
34
+ var _default = validateMultifile;
35
+ exports.default = _default;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+
3
+ 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); }
4
+
5
+ var _validateMultifile = _interopRequireWildcard(require("./validateMultifile"));
6
+
7
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
8
+
9
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
10
+
11
+ // Local imports
12
+ describe('utils', function () {
13
+ describe('Validate', function () {
14
+ describe('multifile', function () {
15
+ var ERROR_MSG = 'This is a custom error message';
16
+ var CUSTOM_ERRORS = [{
17
+ type: 'invalidFile',
18
+ message: ERROR_MSG
19
+ }]; // Valid values.
20
+
21
+ it('should return no error when value is an empty array', function () {
22
+ var VALUE = [];
23
+ expect((0, _validateMultifile.default)(VALUE, [])).toBeUndefined();
24
+ });
25
+ it('should return no error when value only contains valid files', function () {
26
+ var VALUE = [{}, {}];
27
+ expect((0, _validateMultifile.default)(VALUE, [])).toBeUndefined();
28
+ }); // Invalid values.
29
+
30
+ it('should return an error when valid contains invalid files', function () {
31
+ var VALUE = [{
32
+ error: 'This is an invalid file'
33
+ }];
34
+ expect((0, _validateMultifile.default)(VALUE, [])).toEqual(_validateMultifile.DEFAULT_ERROR);
35
+ });
36
+ it('should return a custom error when one is provided', function () {
37
+ var VALUE = [{
38
+ error: 'This is an invalid file'
39
+ }];
40
+ expect((0, _validateMultifile.default)(VALUE, CUSTOM_ERRORS)).toEqual(ERROR_MSG);
41
+ });
42
+ });
43
+ });
44
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ukhomeoffice/cop-react-form-renderer",
3
- "version": "4.37.0",
3
+ "version": "4.39.0",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "clean": "rimraf dist",
@@ -16,7 +16,7 @@
16
16
  "post-compile": "rimraf dist/*.test.* dist/**/*.test.* dist/**/*.stories.* dist/docs dist/assets"
17
17
  },
18
18
  "dependencies": {
19
- "@ukhomeoffice/cop-react-components": "2.7.1",
19
+ "@ukhomeoffice/cop-react-components": "2.8.0",
20
20
  "axios": "^0.23.0",
21
21
  "dayjs": "^1.11.0",
22
22
  "govuk-frontend": "^4.3.1",
@@ -1,60 +0,0 @@
1
- "use strict";
2
-
3
- var _constants = require("../constants");
4
-
5
- var _setDocumentForField = _interopRequireDefault(require("./setDocumentForField"));
6
-
7
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8
-
9
- 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; }
10
-
11
- describe('Utils.Meta.documents.add', function () {
12
- var ALPHA_DOCUMENT = {
13
- field: 'alpha',
14
- url: 'http://alpha-bravo.com/files/alpha'
15
- };
16
- var BRAVO_DOCUMENT = {
17
- field: 'bravo',
18
- url: 'http://alpha-bravo.com/files/bravo'
19
- };
20
- it('should return an appropriately set up object if formData is null', function () {
21
- expect((0, _setDocumentForField.default)(ALPHA_DOCUMENT, null, ALPHA_DOCUMENT.field)).toEqual(_defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT]));
22
- });
23
- it('should add a new document to the array', function () {
24
- var FORM_DATA = _defineProperty({}, _constants.META_PROPERTY, _defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT]));
25
-
26
- expect((0, _setDocumentForField.default)(BRAVO_DOCUMENT, FORM_DATA, BRAVO_DOCUMENT.field)).toEqual(_defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT, BRAVO_DOCUMENT]));
27
- });
28
- it('should replace an existing document with the same field', function () {
29
- var NEW_URL = 'http://replacement.com/files/alpha';
30
- var NEW_ALPHA = {
31
- field: ALPHA_DOCUMENT.field,
32
- url: NEW_URL
33
- };
34
-
35
- var FORM_DATA = _defineProperty({}, _constants.META_PROPERTY, _defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT]));
36
-
37
- expect((0, _setDocumentForField.default)(NEW_ALPHA, FORM_DATA, NEW_ALPHA.field)).toEqual(_defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [NEW_ALPHA]));
38
- });
39
- it('should add a document with the same field if allowMultiple is true', function () {
40
- var NEW_URL = 'http://replacement.com/files/alpha';
41
- var NEW_ALPHA = {
42
- field: ALPHA_DOCUMENT.field,
43
- url: NEW_URL
44
- };
45
-
46
- var FORM_DATA = _defineProperty({}, _constants.META_PROPERTY, _defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT]));
47
-
48
- expect((0, _setDocumentForField.default)(NEW_ALPHA, FORM_DATA, NEW_ALPHA.field, true)).toEqual(_defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT, NEW_ALPHA]));
49
- });
50
- it('should handle a null document being passed where a document with that field already exists', function () {
51
- var FORM_DATA = _defineProperty({}, _constants.META_PROPERTY, _defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT]));
52
-
53
- expect((0, _setDocumentForField.default)(null, FORM_DATA, ALPHA_DOCUMENT.field)).toEqual(_defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, []));
54
- });
55
- it('should handle a null document being passed where a document with that field does not already exist', function () {
56
- var FORM_DATA = _defineProperty({}, _constants.META_PROPERTY, _defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT]));
57
-
58
- expect((0, _setDocumentForField.default)(null, FORM_DATA, BRAVO_DOCUMENT.field)).toEqual(_defineProperty({}, _constants.META_DOCUMENTS_PROPERTY, [ALPHA_DOCUMENT]));
59
- });
60
- });