@ukhomeoffice/cop-react-form-renderer 1.0.0 → 2.2.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.
- package/LICENSE +21 -0
- package/README.md +12 -0
- package/dist/components/CheckYourAnswers/CheckYourAnswers.js +16 -5
- package/dist/components/CheckYourAnswers/CheckYourAnswers.stories.mdx +199 -79
- package/dist/components/CheckYourAnswers/CheckYourAnswers.test.js +44 -0
- package/dist/components/FormComponent/FormComponent.js +6 -1
- package/dist/components/FormComponent/FormComponent.test.js +67 -0
- package/dist/components/FormPage/FormPage.js +8 -2
- package/dist/components/FormPage/FormPage.test.js +2 -2
- package/dist/components/FormRenderer/FormRenderer.js +43 -15
- package/dist/components/FormRenderer/FormRenderer.stories.mdx +115 -49
- package/dist/components/FormRenderer/FormRenderer.test.js +40 -0
- package/dist/components/FormRenderer/handlers/getPageId.js +1 -10
- package/dist/components/FormRenderer/handlers/getPageId.test.js +5 -31
- package/dist/components/FormRenderer/handlers/handlers.test.js +2 -2
- package/dist/components/FormRenderer/helpers/getNextPageId.js +33 -26
- package/dist/components/FormRenderer/helpers/getNextPageId.test.js +89 -7
- package/dist/components/FormRenderer/helpers/getSubmissionStatus.js +27 -0
- package/dist/components/FormRenderer/helpers/getSubmissionStatus.test.js +209 -0
- package/dist/components/FormRenderer/helpers/index.js +4 -1
- package/dist/components/PageActions/PageActions.stories.mdx +1 -1
- package/dist/components/PageActions/PageActions.test.js +2 -2
- package/dist/components/SummaryList/RowAction.js +1 -1
- package/dist/components/SummaryList/RowAction.test.js +6 -6
- package/dist/components/SummaryList/SummaryList.js +8 -5
- package/dist/components/SummaryList/SummaryList.scss +10 -2
- package/dist/components/SummaryList/SummaryList.stories.mdx +64 -10
- package/dist/components/SummaryList/SummaryList.test.js +54 -0
- package/dist/components/SummaryList/helpers/getRowActionAttributes.js +2 -2
- package/dist/components/SummaryList/helpers/getRowActionAttributes.test.js +4 -4
- package/dist/hooks/useHooks.js +5 -1
- package/dist/index.js +8 -0
- package/dist/json/areYouACivilServant.json +7 -0
- package/dist/json/firstForm.json +94 -0
- package/dist/json/grade.json +108 -0
- package/dist/json/saveAndContinue.json +98 -0
- package/dist/json/team.json +17351 -0
- package/dist/json/userProfile.data.json +14 -0
- package/dist/json/userProfile.json +276 -0
- package/dist/models/ComponentTypes.js +4 -0
- package/dist/utils/CheckYourAnswers/getCYAAction.js +24 -3
- package/dist/utils/CheckYourAnswers/getCYAAction.test.js +62 -15
- package/dist/utils/CheckYourAnswers/getCYARow.js +8 -2
- package/dist/utils/CheckYourAnswers/getCYARowsForPage.js +11 -5
- package/dist/utils/Component/getComponent.js +42 -0
- package/dist/utils/Component/getComponentTests/getComponent.autocomplete.test.js +75 -0
- package/dist/utils/Component/getComponentTests/getComponent.checkboxes.test.js +129 -0
- package/dist/utils/Component/getComponentTests/getComponent.date.test.js +129 -0
- package/dist/utils/Component/getComponentTests/getComponent.email.test.js +80 -0
- package/dist/utils/Component/getComponentTests/getComponent.heading.test.js +33 -0
- package/dist/utils/Component/getComponentTests/getComponent.html.test.js +45 -0
- package/dist/utils/Component/getComponentTests/getComponent.insetText.test.js +31 -0
- package/dist/utils/Component/getComponentTests/getComponent.phoneNumber.test.js +80 -0
- package/dist/utils/Component/getComponentTests/getComponent.radios.test.js +125 -0
- package/dist/utils/Component/getComponentTests/getComponent.text.test.js +80 -0
- package/dist/utils/Component/getComponentTests/getComponent.textarea.test.js +76 -0
- package/dist/utils/Component/getComponentTests/getComponent.unknown.test.js +14 -0
- package/dist/utils/Component/isEditable.js +1 -1
- package/dist/utils/Data/refDataToOptions.js +4 -0
- package/dist/utils/Data/refDataToOptions.test.js +30 -0
- package/dist/utils/FormPage/getEditableComponents.js +28 -0
- package/dist/utils/FormPage/getEditableComponents.test.js +75 -0
- package/dist/utils/FormPage/getFormPage.js +5 -1
- package/dist/utils/FormPage/getPageActions.js +66 -0
- package/dist/utils/FormPage/getPageActions.test.js +89 -0
- package/dist/utils/FormPage/index.js +7 -1
- package/dist/utils/FormPage/showFormPage.js +81 -0
- package/dist/utils/FormPage/showFormPage.test.js +131 -0
- package/dist/utils/Validate/validateComponent.js +5 -3
- package/dist/utils/Validate/validateRequired.js +11 -0
- package/dist/utils/Validate/validateRequired.test.js +12 -0
- package/package.json +9 -5
- package/dist/utils/Component/getComponent.test.js +0 -361
|
@@ -0,0 +1,129 @@
|
|
|
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 checkboxes component', function () {
|
|
25
|
+
var ID = 'test-id';
|
|
26
|
+
var FIELD_ID = 'field-id';
|
|
27
|
+
var LABEL = 'label';
|
|
28
|
+
var OPTIONS = [{
|
|
29
|
+
value: 'a',
|
|
30
|
+
label: 'Alpha'
|
|
31
|
+
}, {
|
|
32
|
+
value: 'b',
|
|
33
|
+
label: 'Bravo'
|
|
34
|
+
}];
|
|
35
|
+
var ON_CHANGE_CALLS = [];
|
|
36
|
+
|
|
37
|
+
var ON_CHANGE = function ON_CHANGE(e) {
|
|
38
|
+
ON_CHANGE_CALLS.push(e.target);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
var COMPONENT = {
|
|
42
|
+
type: _models.ComponentTypes.CHECKBOXES,
|
|
43
|
+
id: ID,
|
|
44
|
+
fieldId: FIELD_ID,
|
|
45
|
+
label: LABEL,
|
|
46
|
+
data: {
|
|
47
|
+
options: OPTIONS
|
|
48
|
+
},
|
|
49
|
+
onChange: ON_CHANGE,
|
|
50
|
+
'data-testid': ID
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
var _render = (0, _react.render)((0, _getComponent.default)(COMPONENT)),
|
|
54
|
+
container = _render.container;
|
|
55
|
+
|
|
56
|
+
var _getAllByTestId = (0, _react.getAllByTestId)(container, ID),
|
|
57
|
+
_getAllByTestId2 = _slicedToArray(_getAllByTestId, 2),
|
|
58
|
+
formGroup = _getAllByTestId2[0],
|
|
59
|
+
checkboxes = _getAllByTestId2[1];
|
|
60
|
+
|
|
61
|
+
expect(formGroup.tagName).toEqual('DIV');
|
|
62
|
+
expect(formGroup.classList).toContain('govuk-form-group');
|
|
63
|
+
var label = undefined;
|
|
64
|
+
formGroup.childNodes.forEach(function (node) {
|
|
65
|
+
// Check if it's an element.
|
|
66
|
+
if (node instanceof Element) {
|
|
67
|
+
if (node.tagName === 'LABEL') {
|
|
68
|
+
label = node;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
expect(label).toBeDefined();
|
|
73
|
+
expect(label.innerHTML).toContain(LABEL);
|
|
74
|
+
expect(label.getAttribute('for')).toEqual(ID);
|
|
75
|
+
expect(checkboxes.tagName).toEqual('DIV');
|
|
76
|
+
expect(checkboxes.classList).toContain('govuk-checkboxes');
|
|
77
|
+
expect(checkboxes.childNodes.length).toEqual(OPTIONS.length);
|
|
78
|
+
var checkboxItems = [];
|
|
79
|
+
OPTIONS.forEach(function (_, index) {
|
|
80
|
+
var checkbox = checkboxes.childNodes[index];
|
|
81
|
+
expect(checkbox instanceof Element).toBeTruthy();
|
|
82
|
+
|
|
83
|
+
if (checkbox instanceof Element) {
|
|
84
|
+
checkboxItems.push(checkbox);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
expect(checkboxItems.length).toEqual(OPTIONS.length);
|
|
88
|
+
OPTIONS.forEach(function (option, index) {
|
|
89
|
+
var checkbox = checkboxItems[index];
|
|
90
|
+
expect(checkbox.tagName).toEqual('DIV');
|
|
91
|
+
expect(checkbox.classList).toContain('govuk-checkboxes__item');
|
|
92
|
+
|
|
93
|
+
var _checkbox$childNodes = _slicedToArray(checkbox.childNodes, 2),
|
|
94
|
+
input = _checkbox$childNodes[0],
|
|
95
|
+
label = _checkbox$childNodes[1];
|
|
96
|
+
|
|
97
|
+
expect(input.tagName).toEqual('INPUT');
|
|
98
|
+
expect(input.type).toEqual('checkbox');
|
|
99
|
+
expect(label.textContent).toEqual(option.label);
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
_react.fireEvent.click(checkboxItems[0].childNodes[0]); // alpha
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
expect(ON_CHANGE_CALLS.length).toEqual(2);
|
|
106
|
+
expect(ON_CHANGE_CALLS[1]).toMatchObject({
|
|
107
|
+
name: FIELD_ID,
|
|
108
|
+
value: [OPTIONS[0].value]
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
_react.fireEvent.click(checkboxItems[1].childNodes[0]); // beta
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
expect(ON_CHANGE_CALLS.length).toEqual(3);
|
|
115
|
+
expect(ON_CHANGE_CALLS[2]).toMatchObject({
|
|
116
|
+
name: FIELD_ID,
|
|
117
|
+
value: [OPTIONS[0].value, OPTIONS[1].value]
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
_react.fireEvent.click(checkboxItems[0].childNodes[0]); // alpha (unchecked this time)
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
expect(ON_CHANGE_CALLS.length).toEqual(4);
|
|
124
|
+
expect(ON_CHANGE_CALLS[3]).toMatchObject({
|
|
125
|
+
name: FIELD_ID,
|
|
126
|
+
value: [OPTIONS[1].value]
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
});
|
|
@@ -0,0 +1,129 @@
|
|
|
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 date 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.DATE,
|
|
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
|
+
dateinput = _getAllByTestId2[1];
|
|
50
|
+
|
|
51
|
+
expect(formGroup.tagName).toEqual('DIV');
|
|
52
|
+
expect(formGroup.classList).toContain('govuk-form-group');
|
|
53
|
+
var label = formGroup.childNodes[0];
|
|
54
|
+
expect(label.innerHTML).toContain(LABEL);
|
|
55
|
+
expect(label.getAttribute('for')).toEqual(ID);
|
|
56
|
+
expect(dateinput.tagName).toEqual('DIV');
|
|
57
|
+
expect(dateinput.classList).toContain('govuk-date-input');
|
|
58
|
+
expect(dateinput.id).toEqual(ID);
|
|
59
|
+
var dayitem = dateinput.childNodes[0];
|
|
60
|
+
expect(dayitem.tagName).toEqual('DIV');
|
|
61
|
+
expect(dayitem.classList).toContain('govuk-date-input__item');
|
|
62
|
+
var daylabel = dayitem.childNodes[0];
|
|
63
|
+
expect(daylabel.tagName).toEqual('LABEL');
|
|
64
|
+
expect(daylabel.classList).toContain('govuk-label');
|
|
65
|
+
expect(daylabel.textContent).toEqual('Day');
|
|
66
|
+
var dayinput = dayitem.childNodes[1];
|
|
67
|
+
expect(dayinput.tagName).toEqual('INPUT');
|
|
68
|
+
expect(dayinput.id).toEqual("".concat(ID, "-day"));
|
|
69
|
+
var monthitem = dateinput.childNodes[1];
|
|
70
|
+
expect(monthitem.tagName).toEqual('DIV');
|
|
71
|
+
expect(monthitem.classList).toContain('govuk-date-input__item');
|
|
72
|
+
var monthlabel = monthitem.childNodes[0];
|
|
73
|
+
expect(monthlabel.tagName).toEqual('LABEL');
|
|
74
|
+
expect(monthlabel.classList).toContain('govuk-label');
|
|
75
|
+
expect(monthlabel.textContent).toEqual('Month');
|
|
76
|
+
var monthinput = monthitem.childNodes[1];
|
|
77
|
+
expect(monthinput.tagName).toEqual('INPUT');
|
|
78
|
+
expect(monthinput.id).toEqual("".concat(ID, "-month"));
|
|
79
|
+
var yearitem = dateinput.childNodes[2];
|
|
80
|
+
expect(yearitem.tagName).toEqual('DIV');
|
|
81
|
+
expect(yearitem.classList).toContain('govuk-date-input__item');
|
|
82
|
+
var yearlabel = yearitem.childNodes[0];
|
|
83
|
+
expect(yearlabel.tagName).toEqual('LABEL');
|
|
84
|
+
expect(yearlabel.classList).toContain('govuk-label');
|
|
85
|
+
expect(yearlabel.textContent).toEqual('Year');
|
|
86
|
+
var yearinput = yearitem.childNodes[1];
|
|
87
|
+
expect(yearinput.tagName).toEqual('INPUT');
|
|
88
|
+
expect(yearinput.id).toEqual("".concat(ID, "-year")); // Add something to the day and make sure it fires.
|
|
89
|
+
|
|
90
|
+
_react.fireEvent.change(dayinput, {
|
|
91
|
+
target: {
|
|
92
|
+
name: "".concat(FIELD_ID, "-day"),
|
|
93
|
+
value: '5'
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
expect(ON_CHANGE_CALLS.length).toEqual(2);
|
|
98
|
+
expect(ON_CHANGE_CALLS[1]).toMatchObject({
|
|
99
|
+
name: FIELD_ID,
|
|
100
|
+
value: '5--'
|
|
101
|
+
}); // And now the month...
|
|
102
|
+
|
|
103
|
+
_react.fireEvent.change(monthinput, {
|
|
104
|
+
target: {
|
|
105
|
+
name: "".concat(FIELD_ID, "-month"),
|
|
106
|
+
value: '11'
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
expect(ON_CHANGE_CALLS.length).toEqual(3);
|
|
111
|
+
expect(ON_CHANGE_CALLS[2]).toMatchObject({
|
|
112
|
+
name: FIELD_ID,
|
|
113
|
+
value: '5-11-'
|
|
114
|
+
}); // And finally the year.
|
|
115
|
+
|
|
116
|
+
_react.fireEvent.change(yearinput, {
|
|
117
|
+
target: {
|
|
118
|
+
name: "".concat(FIELD_ID, "-year"),
|
|
119
|
+
value: '2022'
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
expect(ON_CHANGE_CALLS.length).toEqual(4);
|
|
124
|
+
expect(ON_CHANGE_CALLS[3]).toMatchObject({
|
|
125
|
+
name: FIELD_ID,
|
|
126
|
+
value: '5-11-2022'
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
});
|
|
@@ -0,0 +1,80 @@
|
|
|
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 email 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.EMAIL,
|
|
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
|
+
input = _getAllByTestId2[1];
|
|
50
|
+
|
|
51
|
+
expect(formGroup.tagName).toEqual('DIV');
|
|
52
|
+
expect(formGroup.classList).toContain('govuk-form-group');
|
|
53
|
+
var label = undefined;
|
|
54
|
+
formGroup.childNodes.forEach(function (node) {
|
|
55
|
+
// Check if it's an element.
|
|
56
|
+
if (node instanceof Element && node.tagName === 'LABEL') {
|
|
57
|
+
label = node;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
expect(label).toBeDefined();
|
|
61
|
+
expect(label.innerHTML).toContain(LABEL);
|
|
62
|
+
expect(label.getAttribute('for')).toEqual(ID);
|
|
63
|
+
expect(input.tagName).toEqual('INPUT');
|
|
64
|
+
expect(input.classList).toContain('govuk-input');
|
|
65
|
+
expect(input.id).toEqual(ID);
|
|
66
|
+
|
|
67
|
+
_react.fireEvent.change(input, {
|
|
68
|
+
target: {
|
|
69
|
+
name: FIELD_ID,
|
|
70
|
+
value: 'a.b@homeoffice.gov.uk'
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
expect(ON_CHANGE_CALLS.length).toEqual(1);
|
|
75
|
+
expect(ON_CHANGE_CALLS[0]).toMatchObject({
|
|
76
|
+
name: FIELD_ID,
|
|
77
|
+
value: 'a.b@homeoffice.gov.uk'
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
});
|
|
@@ -0,0 +1,33 @@
|
|
|
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
|
+
// Global imports
|
|
12
|
+
// Local imports
|
|
13
|
+
describe('utils.Component.get', function () {
|
|
14
|
+
it('should return an appropriately rendered heading component', function () {
|
|
15
|
+
var ID = 'test-id';
|
|
16
|
+
var SIZE = 'm';
|
|
17
|
+
var CONTENT = 'Heading text';
|
|
18
|
+
var COMPONENT = {
|
|
19
|
+
type: _models.ComponentTypes.HEADING,
|
|
20
|
+
size: SIZE,
|
|
21
|
+
content: CONTENT,
|
|
22
|
+
'data-testid': ID
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
var _render = (0, _react.render)((0, _getComponent.default)(COMPONENT)),
|
|
26
|
+
container = _render.container;
|
|
27
|
+
|
|
28
|
+
var heading = (0, _react.getByTestId)(container, ID);
|
|
29
|
+
expect(heading.innerHTML).toContain(CONTENT);
|
|
30
|
+
expect(heading.tagName).toEqual('H2');
|
|
31
|
+
expect(heading.classList).toContain("govuk-heading-".concat(SIZE));
|
|
32
|
+
});
|
|
33
|
+
});
|
|
@@ -0,0 +1,45 @@
|
|
|
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
|
+
// Global imports
|
|
12
|
+
// Local imports
|
|
13
|
+
describe('utils.Component.get', function () {
|
|
14
|
+
it('should return a p tag by default for an HTML component', function () {
|
|
15
|
+
var ID = 'test-id';
|
|
16
|
+
var CONTENT = 'HTML content';
|
|
17
|
+
var COMPONENT = {
|
|
18
|
+
type: _models.ComponentTypes.HTML,
|
|
19
|
+
content: CONTENT,
|
|
20
|
+
'data-testid': ID
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
var _render = (0, _react.render)((0, _getComponent.default)(COMPONENT)),
|
|
24
|
+
container = _render.container;
|
|
25
|
+
|
|
26
|
+
var p = (0, _react.getByTestId)(container, ID);
|
|
27
|
+
expect(p.innerHTML).toContain(CONTENT);
|
|
28
|
+
expect(p.tagName).toEqual('P');
|
|
29
|
+
});
|
|
30
|
+
it('should return an appropriate tag for an HTML component', function () {
|
|
31
|
+
var ID = 'test-id';
|
|
32
|
+
var TAG_NAME = 'hr';
|
|
33
|
+
var COMPONENT = {
|
|
34
|
+
type: _models.ComponentTypes.HTML,
|
|
35
|
+
tagName: TAG_NAME,
|
|
36
|
+
'data-testid': ID
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
var _render2 = (0, _react.render)((0, _getComponent.default)(COMPONENT)),
|
|
40
|
+
container = _render2.container;
|
|
41
|
+
|
|
42
|
+
var hr = (0, _react.getByTestId)(container, ID);
|
|
43
|
+
expect(hr.tagName).toEqual('HR');
|
|
44
|
+
});
|
|
45
|
+
});
|
|
@@ -0,0 +1,31 @@
|
|
|
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
|
+
// Global imports
|
|
12
|
+
// Local imports
|
|
13
|
+
describe('utils.Component.get', function () {
|
|
14
|
+
it('should return an appropriately rendered inset-text component', function () {
|
|
15
|
+
var ID = 'test-id';
|
|
16
|
+
var CONTENT = 'Inset text';
|
|
17
|
+
var COMPONENT = {
|
|
18
|
+
type: _models.ComponentTypes.INSET_TEXT,
|
|
19
|
+
content: CONTENT,
|
|
20
|
+
'data-testid': ID
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
var _render = (0, _react.render)((0, _getComponent.default)(COMPONENT)),
|
|
24
|
+
container = _render.container;
|
|
25
|
+
|
|
26
|
+
var insetText = (0, _react.getByTestId)(container, ID);
|
|
27
|
+
expect(insetText.innerHTML).toContain(CONTENT);
|
|
28
|
+
expect(insetText.tagName).toEqual('DIV');
|
|
29
|
+
expect(insetText.classList).toContain('govuk-inset-text');
|
|
30
|
+
});
|
|
31
|
+
});
|
|
@@ -0,0 +1,80 @@
|
|
|
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 phone-number 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.PHONE_NUMBER,
|
|
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
|
+
input = _getAllByTestId2[1];
|
|
50
|
+
|
|
51
|
+
expect(formGroup.tagName).toEqual('DIV');
|
|
52
|
+
expect(formGroup.classList).toContain('govuk-form-group');
|
|
53
|
+
var label = undefined;
|
|
54
|
+
formGroup.childNodes.forEach(function (node) {
|
|
55
|
+
// Check if it's an element.
|
|
56
|
+
if (node instanceof Element && node.tagName === 'LABEL') {
|
|
57
|
+
label = node;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
expect(label).toBeDefined();
|
|
61
|
+
expect(label.innerHTML).toContain(LABEL);
|
|
62
|
+
expect(label.getAttribute('for')).toEqual(ID);
|
|
63
|
+
expect(input.tagName).toEqual('INPUT');
|
|
64
|
+
expect(input.classList).toContain('govuk-input');
|
|
65
|
+
expect(input.id).toEqual(ID);
|
|
66
|
+
|
|
67
|
+
_react.fireEvent.change(input, {
|
|
68
|
+
target: {
|
|
69
|
+
name: FIELD_ID,
|
|
70
|
+
value: '07777'
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
expect(ON_CHANGE_CALLS.length).toEqual(1);
|
|
75
|
+
expect(ON_CHANGE_CALLS[0]).toMatchObject({
|
|
76
|
+
name: FIELD_ID,
|
|
77
|
+
value: '07777'
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
});
|
|
@@ -0,0 +1,125 @@
|
|
|
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 radios component', function () {
|
|
25
|
+
var ID = 'test-id';
|
|
26
|
+
var FIELD_ID = 'field-id';
|
|
27
|
+
var LABEL = 'label';
|
|
28
|
+
var OPTIONS = [{
|
|
29
|
+
value: 'a',
|
|
30
|
+
label: 'Alpha'
|
|
31
|
+
}, {
|
|
32
|
+
value: 'b',
|
|
33
|
+
label: 'Bravo'
|
|
34
|
+
}];
|
|
35
|
+
var ON_CHANGE_CALLS = [];
|
|
36
|
+
|
|
37
|
+
var ON_CHANGE = function ON_CHANGE(e) {
|
|
38
|
+
ON_CHANGE_CALLS.push(e.target);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
var COMPONENT = {
|
|
42
|
+
type: _models.ComponentTypes.RADIOS,
|
|
43
|
+
id: ID,
|
|
44
|
+
fieldId: FIELD_ID,
|
|
45
|
+
label: LABEL,
|
|
46
|
+
data: {
|
|
47
|
+
options: OPTIONS
|
|
48
|
+
},
|
|
49
|
+
onChange: ON_CHANGE,
|
|
50
|
+
'data-testid': ID
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
var _render = (0, _react.render)((0, _getComponent.default)(COMPONENT)),
|
|
54
|
+
container = _render.container;
|
|
55
|
+
|
|
56
|
+
var _getAllByTestId = (0, _react.getAllByTestId)(container, ID),
|
|
57
|
+
_getAllByTestId2 = _slicedToArray(_getAllByTestId, 2),
|
|
58
|
+
formGroup = _getAllByTestId2[0],
|
|
59
|
+
radios = _getAllByTestId2[1];
|
|
60
|
+
|
|
61
|
+
expect(formGroup.tagName).toEqual('DIV');
|
|
62
|
+
expect(formGroup.classList).toContain('govuk-form-group');
|
|
63
|
+
var label = undefined;
|
|
64
|
+
formGroup.childNodes.forEach(function (node) {
|
|
65
|
+
// Check if it's an element.
|
|
66
|
+
if (node instanceof Element) {
|
|
67
|
+
if (node.tagName === 'LABEL') {
|
|
68
|
+
label = node;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
expect(label).toBeDefined();
|
|
73
|
+
expect(label.innerHTML).toContain(LABEL);
|
|
74
|
+
expect(label.getAttribute('for')).toEqual(ID);
|
|
75
|
+
expect(radios.tagName).toEqual('DIV');
|
|
76
|
+
expect(radios.classList).toContain('govuk-radios');
|
|
77
|
+
expect(radios.childNodes.length).toEqual(OPTIONS.length);
|
|
78
|
+
var radioItems = [];
|
|
79
|
+
OPTIONS.forEach(function (_, index) {
|
|
80
|
+
var radio = radios.childNodes[index];
|
|
81
|
+
expect(radio instanceof Element).toBeTruthy();
|
|
82
|
+
|
|
83
|
+
if (radio instanceof Element) {
|
|
84
|
+
radioItems.push(radio);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
expect(radioItems.length).toEqual(OPTIONS.length);
|
|
88
|
+
OPTIONS.forEach(function (option, index) {
|
|
89
|
+
var radio = radioItems[index];
|
|
90
|
+
expect(radio.tagName).toEqual('DIV');
|
|
91
|
+
expect(radio.classList).toContain('govuk-radios__item');
|
|
92
|
+
|
|
93
|
+
var _radio$childNodes = _slicedToArray(radio.childNodes, 2),
|
|
94
|
+
input = _radio$childNodes[0],
|
|
95
|
+
label = _radio$childNodes[1];
|
|
96
|
+
|
|
97
|
+
expect(input.tagName).toEqual('INPUT');
|
|
98
|
+
expect(input.type).toEqual('radio');
|
|
99
|
+
expect(label.textContent).toEqual(option.label);
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
_react.fireEvent.click(radioItems[0].childNodes[0]); // alpha
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
expect(ON_CHANGE_CALLS.length).toEqual(1);
|
|
106
|
+
expect(ON_CHANGE_CALLS[0]).toMatchObject({
|
|
107
|
+
name: FIELD_ID,
|
|
108
|
+
value: OPTIONS[0].value
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
_react.fireEvent.click(radioItems[1].childNodes[0]); // bravo
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
expect(ON_CHANGE_CALLS.length).toEqual(2);
|
|
115
|
+
expect(ON_CHANGE_CALLS[1]).toMatchObject({
|
|
116
|
+
name: FIELD_ID,
|
|
117
|
+
value: OPTIONS[1].value
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
_react.fireEvent.click(radioItems[1].childNodes[0]); // bravo (already selected, above)
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
expect(ON_CHANGE_CALLS.length).toEqual(2); // No change, so no new event should have fired.
|
|
124
|
+
});
|
|
125
|
+
});
|