@ukhomeoffice/cop-react-form-renderer 1.0.0-alpha → 1.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.
- package/dist/components/CheckYourAnswers/CheckYourAnswers.js +3 -3
- package/dist/components/CheckYourAnswers/CheckYourAnswers.stories.mdx +59 -10
- package/dist/components/CheckYourAnswers/CheckYourAnswers.test.js +4 -4
- package/dist/components/FormComponent/FormComponent.stories.mdx +12 -12
- package/dist/components/FormPage/FormPage.stories.mdx +6 -6
- package/dist/components/FormPage/FormPage.test.js +1 -1
- package/dist/components/FormRenderer/FormRenderer.js +7 -2
- package/dist/components/FormRenderer/FormRenderer.stories.mdx +3 -3
- package/dist/components/FormRenderer/FormRenderer.test.js +4 -4
- package/dist/components/PageActions/ActionButton.test.js +1 -1
- package/dist/components/PageActions/PageActions.test.js +3 -3
- package/dist/components/index.js +8 -0
- package/dist/models/ComponentTypes.js +3 -1
- package/dist/models/PageAction.js +9 -7
- package/dist/utils/Component/getComponent.js +8 -0
- package/dist/utils/Component/getComponent.test.js +32 -0
- package/dist/utils/Component/isEditable.js +1 -1
- package/dist/utils/Data/setupFormData.test.js +6 -6
- package/dist/utils/Data/setupRefDataUrlForComponent.test.js +4 -4
- package/dist/utils/FormPage/getFormPage.js +1 -1
- package/dist/utils/FormPage/getFormPage.test.js +3 -3
- package/dist/utils/FormPage/getFormPages.test.js +3 -3
- package/dist/utils/Hub/getFormHub.test.js +2 -2
- package/package.json +9 -8
- package/dist/index.test.js +0 -18
|
@@ -13,8 +13,6 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
|
13
13
|
|
|
14
14
|
var _react = _interopRequireWildcard(require("react"));
|
|
15
15
|
|
|
16
|
-
var _models = require("../../models");
|
|
17
|
-
|
|
18
16
|
var _utils = _interopRequireDefault(require("../../utils"));
|
|
19
17
|
|
|
20
18
|
var _PageActions = _interopRequireDefault(require("../PageActions"));
|
|
@@ -59,6 +57,7 @@ exports.DEFAULT_MARGIN_BOTTOM = DEFAULT_MARGIN_BOTTOM;
|
|
|
59
57
|
var CheckYourAnswers = function CheckYourAnswers(_ref) {
|
|
60
58
|
var title = _ref.title,
|
|
61
59
|
_pages = _ref.pages,
|
|
60
|
+
actions = _ref.actions,
|
|
62
61
|
_onAction = _ref.onAction,
|
|
63
62
|
onRowAction = _ref.onRowAction,
|
|
64
63
|
hide_page_titles = _ref.hide_page_titles,
|
|
@@ -124,7 +123,7 @@ var CheckYourAnswers = function CheckYourAnswers(_ref) {
|
|
|
124
123
|
rows: page.rows
|
|
125
124
|
}));
|
|
126
125
|
}), !hide_actions && /*#__PURE__*/_react.default.createElement(_PageActions.default, {
|
|
127
|
-
actions:
|
|
126
|
+
actions: actions,
|
|
128
127
|
onAction: function onAction(action) {
|
|
129
128
|
return _onAction(action, onError);
|
|
130
129
|
}
|
|
@@ -134,6 +133,7 @@ var CheckYourAnswers = function CheckYourAnswers(_ref) {
|
|
|
134
133
|
CheckYourAnswers.propTypes = {
|
|
135
134
|
title: _propTypes.default.string.isRequired,
|
|
136
135
|
pages: _propTypes.default.arrayOf(_propTypes.default.object).isRequired,
|
|
136
|
+
actions: _propTypes.default.arrayOf(_propTypes.default.object),
|
|
137
137
|
onAction: _propTypes.default.func.isRequired,
|
|
138
138
|
onRowAction: _propTypes.default.func.isRequired,
|
|
139
139
|
hide_page_titles: _propTypes.default.bool,
|
|
@@ -13,6 +13,7 @@ import GRADE from '../../json/grade.json';
|
|
|
13
13
|
import TEAMS from '../../json/team.json';
|
|
14
14
|
import USER_PROFILE_DATA from '../../json/userProfile.data.json';
|
|
15
15
|
import USER_PROFILE from '../../json/userProfile.json';
|
|
16
|
+
import FIRST_FORM from '../../json/firstForm.json';
|
|
16
17
|
|
|
17
18
|
<Meta title="Components/Check your answers" id="D-CheckYourAnswers" component={ CheckYourAnswers } decorators={[withMock]} />
|
|
18
19
|
|
|
@@ -24,19 +25,19 @@ Renders the **Check your answers** screen for a form.
|
|
|
24
25
|
<Story name="Default" parameters={{
|
|
25
26
|
mockData: [
|
|
26
27
|
{
|
|
27
|
-
url: `${USER_PROFILE_DATA.
|
|
28
|
+
url: `${USER_PROFILE_DATA.urls.refData}/areYouACivilServant`,
|
|
28
29
|
method: 'GET',
|
|
29
30
|
status: 200,
|
|
30
31
|
response: CIVIL_SERVANT
|
|
31
32
|
},
|
|
32
33
|
{
|
|
33
|
-
url: `${USER_PROFILE_DATA.
|
|
34
|
+
url: `${USER_PROFILE_DATA.urls.refData}/grade`,
|
|
34
35
|
method: 'GET',
|
|
35
36
|
status: 200,
|
|
36
37
|
response: GRADE
|
|
37
38
|
},
|
|
38
39
|
{
|
|
39
|
-
url: `${USER_PROFILE_DATA.
|
|
40
|
+
url: `${USER_PROFILE_DATA.urls.refData}/team`,
|
|
40
41
|
method: 'GET',
|
|
41
42
|
status: 200,
|
|
42
43
|
response: TEAMS
|
|
@@ -44,13 +45,16 @@ Renders the **Check your answers** screen for a form.
|
|
|
44
45
|
]
|
|
45
46
|
}}>
|
|
46
47
|
{() => {
|
|
47
|
-
const DATA = Utils.Data.setupForm(USER_PROFILE.pages, USER_PROFILE.components, USER_PROFILE_DATA)
|
|
48
|
+
const DATA = Utils.Data.setupForm(USER_PROFILE.pages, USER_PROFILE.components, USER_PROFILE_DATA);
|
|
48
49
|
const PAGES = Utils.FormPage.getAll(USER_PROFILE.pages, USER_PROFILE.components, { ...DATA });
|
|
49
50
|
const ON_ACTION = (action, patch, onError) => {
|
|
50
51
|
console.log('action invoked', action, patch);
|
|
51
52
|
};
|
|
53
|
+
const ON_ROW_ACTION = (page) => {
|
|
54
|
+
console.log('row action invoked', page);
|
|
55
|
+
};
|
|
52
56
|
return (
|
|
53
|
-
<CheckYourAnswers pages={PAGES} onAction={ON_ACTION} />
|
|
57
|
+
<CheckYourAnswers pages={PAGES} onAction={ON_ACTION} onRowAction={ON_ROW_ACTION} />
|
|
54
58
|
);
|
|
55
59
|
}}
|
|
56
60
|
</Story>
|
|
@@ -67,19 +71,19 @@ Renders the **Check your answers** screen for a form.
|
|
|
67
71
|
<Story name="No page titles" parameters={{
|
|
68
72
|
mockData: [
|
|
69
73
|
{
|
|
70
|
-
url: `${USER_PROFILE_DATA.
|
|
74
|
+
url: `${USER_PROFILE_DATA.urls.refData}/areYouACivilServant`,
|
|
71
75
|
method: 'GET',
|
|
72
76
|
status: 200,
|
|
73
77
|
response: CIVIL_SERVANT
|
|
74
78
|
},
|
|
75
79
|
{
|
|
76
|
-
url: `${USER_PROFILE_DATA.
|
|
80
|
+
url: `${USER_PROFILE_DATA.urls.refData}/grade`,
|
|
77
81
|
method: 'GET',
|
|
78
82
|
status: 200,
|
|
79
83
|
response: GRADE
|
|
80
84
|
},
|
|
81
85
|
{
|
|
82
|
-
url: `${USER_PROFILE_DATA.
|
|
86
|
+
url: `${USER_PROFILE_DATA.urls.refData}/team`,
|
|
83
87
|
method: 'GET',
|
|
84
88
|
status: 200,
|
|
85
89
|
response: TEAMS
|
|
@@ -87,13 +91,58 @@ Renders the **Check your answers** screen for a form.
|
|
|
87
91
|
]
|
|
88
92
|
}}>
|
|
89
93
|
{() => {
|
|
90
|
-
const DATA = Utils.Data.setupForm(USER_PROFILE.pages, USER_PROFILE.components, USER_PROFILE_DATA)
|
|
94
|
+
const DATA = Utils.Data.setupForm(USER_PROFILE.pages, USER_PROFILE.components, USER_PROFILE_DATA);
|
|
91
95
|
const PAGES = Utils.FormPage.getAll(USER_PROFILE.pages, USER_PROFILE.components, { ...DATA });
|
|
92
96
|
const ON_ACTION = (action, patch, onError) => {
|
|
93
97
|
console.log('action invoked', action, patch);
|
|
94
98
|
};
|
|
99
|
+
const ON_ROW_ACTION = (page) => {
|
|
100
|
+
console.log('row action invoked', page);
|
|
101
|
+
};
|
|
102
|
+
return (
|
|
103
|
+
<CheckYourAnswers pages={PAGES} hide_page_titles={true} onAction={ON_ACTION} onRowAction={ON_ROW_ACTION} />
|
|
104
|
+
);
|
|
105
|
+
}}
|
|
106
|
+
</Story>
|
|
107
|
+
</Canvas>
|
|
108
|
+
|
|
109
|
+
### With actions
|
|
110
|
+
|
|
111
|
+
<Canvas>
|
|
112
|
+
<Story name="With actions" parameters={{
|
|
113
|
+
mockData: [
|
|
114
|
+
{
|
|
115
|
+
url: `${USER_PROFILE_DATA.urls.refData}/areYouACivilServant`,
|
|
116
|
+
method: 'GET',
|
|
117
|
+
status: 200,
|
|
118
|
+
response: CIVIL_SERVANT
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
url: `${USER_PROFILE_DATA.urls.refData}/grade`,
|
|
122
|
+
method: 'GET',
|
|
123
|
+
status: 200,
|
|
124
|
+
response: GRADE
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
url: `${USER_PROFILE_DATA.urls.refData}/team`,
|
|
128
|
+
method: 'GET',
|
|
129
|
+
status: 200,
|
|
130
|
+
response: TEAMS
|
|
131
|
+
}
|
|
132
|
+
]
|
|
133
|
+
}}>
|
|
134
|
+
{() => {
|
|
135
|
+
const DATA = { firstName: 'John', surname: 'Smith', age: 41 };
|
|
136
|
+
const PAGES = Utils.FormPage.getAll(FIRST_FORM.pages, FIRST_FORM.components, { ...DATA });
|
|
137
|
+
const ACTIONS = FIRST_FORM.cya.actions;
|
|
138
|
+
const ON_ACTION = (action, patch, onError) => {
|
|
139
|
+
console.log('action invoked', action, patch);
|
|
140
|
+
};
|
|
141
|
+
const ON_ROW_ACTION = (page) => {
|
|
142
|
+
console.log('row action invoked', page);
|
|
143
|
+
};
|
|
95
144
|
return (
|
|
96
|
-
<CheckYourAnswers pages={PAGES} hide_page_titles={true} onAction={ON_ACTION} />
|
|
145
|
+
<CheckYourAnswers pages={PAGES} hide_page_titles={true} actions={ACTIONS} onAction={ON_ACTION} onRowAction={ON_ROW_ACTION} />
|
|
97
146
|
);
|
|
98
147
|
}}
|
|
99
148
|
</Story>
|
|
@@ -80,7 +80,7 @@ describe('components', function () {
|
|
|
80
80
|
var container = null;
|
|
81
81
|
|
|
82
82
|
var refDataUrl = function refDataUrl(suffix) {
|
|
83
|
-
return "".concat(_userProfileData.default.
|
|
83
|
+
return "".concat(_userProfileData.default.urls.refData, "/").concat(suffix);
|
|
84
84
|
};
|
|
85
85
|
|
|
86
86
|
beforeEach(function () {
|
|
@@ -89,9 +89,9 @@ describe('components', function () {
|
|
|
89
89
|
container = document.createElement('div');
|
|
90
90
|
document.body.appendChild(container);
|
|
91
91
|
mockAxios.reset();
|
|
92
|
-
mockAxios.onGet(refDataUrl('
|
|
93
|
-
mockAxios.onGet(refDataUrl('
|
|
94
|
-
mockAxios.onGet(refDataUrl('
|
|
92
|
+
mockAxios.onGet(refDataUrl('areYouACivilServant')).reply(200, _areYouACivilServant.default);
|
|
93
|
+
mockAxios.onGet(refDataUrl('grade')).reply(200, _grade.default);
|
|
94
|
+
mockAxios.onGet(refDataUrl('team')).reply(200, _team.default);
|
|
95
95
|
});
|
|
96
96
|
afterEach(function () {
|
|
97
97
|
(0, _reactDom.unmountComponentAtNode)(container);
|
|
@@ -24,19 +24,19 @@ on the basis of a <Link href="/?path=/docs/f-json-component">JSON</Link> configu
|
|
|
24
24
|
<Story name="Default" parameters={{
|
|
25
25
|
mockData: [
|
|
26
26
|
{
|
|
27
|
-
url: `${USER_PROFILE_DATA.
|
|
27
|
+
url: `${USER_PROFILE_DATA.urls.refData}/areYouACivilServant`,
|
|
28
28
|
method: 'GET',
|
|
29
29
|
status: 200,
|
|
30
30
|
response: CIVIL_SERVANT
|
|
31
31
|
},
|
|
32
32
|
{
|
|
33
|
-
url: `${USER_PROFILE_DATA.
|
|
33
|
+
url: `${USER_PROFILE_DATA.urls.refData}/grade`,
|
|
34
34
|
method: 'GET',
|
|
35
35
|
status: 200,
|
|
36
36
|
response: GRADE
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
|
-
url: `${USER_PROFILE_DATA.
|
|
39
|
+
url: `${USER_PROFILE_DATA.urls.refData}/team`,
|
|
40
40
|
method: 'GET',
|
|
41
41
|
status: 200,
|
|
42
42
|
response: TEAMS
|
|
@@ -47,7 +47,7 @@ on the basis of a <Link href="/?path=/docs/f-json-component">JSON</Link> configu
|
|
|
47
47
|
const COMPONENT = {
|
|
48
48
|
...USER_PROFILE.components.find(c => c.id === 'areYouACivilServant'),
|
|
49
49
|
data: {
|
|
50
|
-
url: `${USER_PROFILE_DATA.
|
|
50
|
+
url: `${USER_PROFILE_DATA.urls.refData}/areYouACivilServant`
|
|
51
51
|
}
|
|
52
52
|
};
|
|
53
53
|
const ON_CHANGE = ({ target }) => {
|
|
@@ -71,19 +71,19 @@ on the basis of a <Link href="/?path=/docs/f-json-component">JSON</Link> configu
|
|
|
71
71
|
<Story name="Autocomplete" parameters={{
|
|
72
72
|
mockData: [
|
|
73
73
|
{
|
|
74
|
-
url: `${USER_PROFILE_DATA.
|
|
74
|
+
url: `${USER_PROFILE_DATA.urls.refData}/areYouACivilServant`,
|
|
75
75
|
method: 'GET',
|
|
76
76
|
status: 200,
|
|
77
77
|
response: CIVIL_SERVANT
|
|
78
78
|
},
|
|
79
79
|
{
|
|
80
|
-
url: `${USER_PROFILE_DATA.
|
|
80
|
+
url: `${USER_PROFILE_DATA.urls.refData}/grade`,
|
|
81
81
|
method: 'GET',
|
|
82
82
|
status: 200,
|
|
83
83
|
response: GRADE
|
|
84
84
|
},
|
|
85
85
|
{
|
|
86
|
-
url: `${USER_PROFILE_DATA.
|
|
86
|
+
url: `${USER_PROFILE_DATA.urls.refData}/team`,
|
|
87
87
|
method: 'GET',
|
|
88
88
|
status: 200,
|
|
89
89
|
response: TEAMS
|
|
@@ -94,7 +94,7 @@ on the basis of a <Link href="/?path=/docs/f-json-component">JSON</Link> configu
|
|
|
94
94
|
const COMPONENT = {
|
|
95
95
|
...USER_PROFILE.components.find(c => c.id === 'team'),
|
|
96
96
|
data: {
|
|
97
|
-
url: `${USER_PROFILE_DATA.
|
|
97
|
+
url: `${USER_PROFILE_DATA.urls.refData}/team`
|
|
98
98
|
}
|
|
99
99
|
};
|
|
100
100
|
const ON_CHANGE = ({ target }) => {
|
|
@@ -128,19 +128,19 @@ on the basis of a <Link href="/?path=/docs/f-json-component">JSON</Link> configu
|
|
|
128
128
|
<Story name="Unwrapped autocomplete" parameters={{
|
|
129
129
|
mockData: [
|
|
130
130
|
{
|
|
131
|
-
url: `${USER_PROFILE_DATA.
|
|
131
|
+
url: `${USER_PROFILE_DATA.urls.refData}/areYouACivilServant`,
|
|
132
132
|
method: 'GET',
|
|
133
133
|
status: 200,
|
|
134
134
|
response: CIVIL_SERVANT
|
|
135
135
|
},
|
|
136
136
|
{
|
|
137
|
-
url: `${USER_PROFILE_DATA.
|
|
137
|
+
url: `${USER_PROFILE_DATA.urls.refData}/grade`,
|
|
138
138
|
method: 'GET',
|
|
139
139
|
status: 200,
|
|
140
140
|
response: GRADE
|
|
141
141
|
},
|
|
142
142
|
{
|
|
143
|
-
url: `${USER_PROFILE_DATA.
|
|
143
|
+
url: `${USER_PROFILE_DATA.urls.refData}/team`,
|
|
144
144
|
method: 'GET',
|
|
145
145
|
status: 200,
|
|
146
146
|
response: TEAMS
|
|
@@ -153,7 +153,7 @@ on the basis of a <Link href="/?path=/docs/f-json-component">JSON</Link> configu
|
|
|
153
153
|
id: 'team2',
|
|
154
154
|
fieldId: 'team2',
|
|
155
155
|
data: {
|
|
156
|
-
url: `${USER_PROFILE_DATA.
|
|
156
|
+
url: `${USER_PROFILE_DATA.urls.refData}/team`
|
|
157
157
|
}
|
|
158
158
|
};
|
|
159
159
|
const ON_CHANGE = ({ target }) => {
|
|
@@ -25,19 +25,19 @@ on the basis of a <Link href="/?path=/docs/f-json-page">JSON</Link> configuratio
|
|
|
25
25
|
<Story name="Default" parameters={{
|
|
26
26
|
mockData: [
|
|
27
27
|
{
|
|
28
|
-
url: `${USER_PROFILE_DATA.
|
|
28
|
+
url: `${USER_PROFILE_DATA.urls.refData}/areYouACivilServant`,
|
|
29
29
|
method: 'GET',
|
|
30
30
|
status: 200,
|
|
31
31
|
response: CIVIL_SERVANT
|
|
32
32
|
},
|
|
33
33
|
{
|
|
34
|
-
url: `${USER_PROFILE_DATA.
|
|
34
|
+
url: `${USER_PROFILE_DATA.urls.refData}/grade`,
|
|
35
35
|
method: 'GET',
|
|
36
36
|
status: 200,
|
|
37
37
|
response: GRADE
|
|
38
38
|
},
|
|
39
39
|
{
|
|
40
|
-
url: `${USER_PROFILE_DATA.
|
|
40
|
+
url: `${USER_PROFILE_DATA.urls.refData}/team`,
|
|
41
41
|
method: 'GET',
|
|
42
42
|
status: 200,
|
|
43
43
|
response: TEAMS
|
|
@@ -68,19 +68,19 @@ on the basis of a <Link href="/?path=/docs/f-json-page">JSON</Link> configuratio
|
|
|
68
68
|
<Story name="With autocomplete" parameters={{
|
|
69
69
|
mockData: [
|
|
70
70
|
{
|
|
71
|
-
url: `${USER_PROFILE_DATA.
|
|
71
|
+
url: `${USER_PROFILE_DATA.urls.refData}/areYouACivilServant`,
|
|
72
72
|
method: 'GET',
|
|
73
73
|
status: 200,
|
|
74
74
|
response: CIVIL_SERVANT
|
|
75
75
|
},
|
|
76
76
|
{
|
|
77
|
-
url: `${USER_PROFILE_DATA.
|
|
77
|
+
url: `${USER_PROFILE_DATA.urls.refData}/grade`,
|
|
78
78
|
method: 'GET',
|
|
79
79
|
status: 200,
|
|
80
80
|
response: GRADE
|
|
81
81
|
},
|
|
82
82
|
{
|
|
83
|
-
url: `${USER_PROFILE_DATA.
|
|
83
|
+
url: `${USER_PROFILE_DATA.urls.refData}/team`,
|
|
84
84
|
method: 'GET',
|
|
85
85
|
status: 200,
|
|
86
86
|
response: TEAMS
|
|
@@ -140,7 +140,7 @@ var FormRenderer = function FormRenderer(_ref) {
|
|
|
140
140
|
// Check to see whether the action is able to proceed, which in
|
|
141
141
|
// in the case of a submission will validate the fields in the page.
|
|
142
142
|
if (_helpers.default.canActionProceed(action, formState.page, onError)) {
|
|
143
|
-
if (action.type ===
|
|
143
|
+
if (action.type === _models.PageAction.TYPES.NAVIGATE) {
|
|
144
144
|
_handlers.default.navigate(action, pageId, onPageChange);
|
|
145
145
|
} else {
|
|
146
146
|
// Submit.
|
|
@@ -154,7 +154,12 @@ var FormRenderer = function FormRenderer(_ref) {
|
|
|
154
154
|
} // Now submit the data to the backend...
|
|
155
155
|
|
|
156
156
|
|
|
157
|
-
hooks.onSubmit(action.type, submissionData, function () {
|
|
157
|
+
hooks.onSubmit(action.type, submissionData, function (response) {
|
|
158
|
+
// The backend response may well contain data we need so apply it.
|
|
159
|
+
setData(function (prev) {
|
|
160
|
+
return _objectSpread(_objectSpread({}, prev), response);
|
|
161
|
+
});
|
|
162
|
+
|
|
158
163
|
var nextPageId = _helpers.default.getNextPageId(type, pages, pageId, action);
|
|
159
164
|
|
|
160
165
|
onPageChange(nextPageId);
|
|
@@ -27,19 +27,19 @@ on the basis of a <Link href="/?path=/docs/f-json-form">JSON</Link> that describ
|
|
|
27
27
|
<Story name="Default" parameters={{
|
|
28
28
|
mockData: [
|
|
29
29
|
{
|
|
30
|
-
url: `${USER_PROFILE_DATA.
|
|
30
|
+
url: `${USER_PROFILE_DATA.urls.refData}/areYouACivilServant`,
|
|
31
31
|
method: 'GET',
|
|
32
32
|
status: 200,
|
|
33
33
|
response: CIVIL_SERVANT
|
|
34
34
|
},
|
|
35
35
|
{
|
|
36
|
-
url: `${USER_PROFILE_DATA.
|
|
36
|
+
url: `${USER_PROFILE_DATA.urls.refData}/grade`,
|
|
37
37
|
method: 'GET',
|
|
38
38
|
status: 200,
|
|
39
39
|
response: GRADE
|
|
40
40
|
},
|
|
41
41
|
{
|
|
42
|
-
url: `${USER_PROFILE_DATA.
|
|
42
|
+
url: `${USER_PROFILE_DATA.urls.refData}/team`,
|
|
43
43
|
method: 'GET',
|
|
44
44
|
status: 200,
|
|
45
45
|
response: TEAMS
|
|
@@ -60,16 +60,16 @@ describe('components', function () {
|
|
|
60
60
|
var container = null;
|
|
61
61
|
|
|
62
62
|
var refDataUrl = function refDataUrl(suffix) {
|
|
63
|
-
return "".concat(_userProfileData.default.
|
|
63
|
+
return "".concat(_userProfileData.default.urls.refData, "/").concat(suffix);
|
|
64
64
|
};
|
|
65
65
|
|
|
66
66
|
beforeEach(function () {
|
|
67
67
|
container = document.createElement('div');
|
|
68
68
|
document.body.appendChild(container);
|
|
69
69
|
mockAxios.reset();
|
|
70
|
-
mockAxios.onGet(refDataUrl('
|
|
71
|
-
mockAxios.onGet(refDataUrl('
|
|
72
|
-
mockAxios.onGet(refDataUrl('
|
|
70
|
+
mockAxios.onGet(refDataUrl('areYouACivilServant')).reply(200, _areYouACivilServant.default);
|
|
71
|
+
mockAxios.onGet(refDataUrl('grade')).reply(200, _grade.default);
|
|
72
|
+
mockAxios.onGet(refDataUrl('team')).reply(200, _team.default);
|
|
73
73
|
});
|
|
74
74
|
afterEach(function () {
|
|
75
75
|
(0, _reactDom.unmountComponentAtNode)(container);
|
|
@@ -59,7 +59,7 @@ describe('components', function () {
|
|
|
59
59
|
while (1) {
|
|
60
60
|
switch (_context2.prev = _context2.next) {
|
|
61
61
|
case 0:
|
|
62
|
-
ACTION =
|
|
62
|
+
ACTION = _models.PageAction.TYPES.SUBMIT;
|
|
63
63
|
_render2 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_ActionButton.default, {
|
|
64
64
|
action: ACTION,
|
|
65
65
|
onAction: ON_ACTION
|
|
@@ -55,7 +55,7 @@ describe('components', function () {
|
|
|
55
55
|
while (1) {
|
|
56
56
|
switch (_context2.prev = _context2.next) {
|
|
57
57
|
case 0:
|
|
58
|
-
ACTIONS = [
|
|
58
|
+
ACTIONS = [_models.PageAction.TYPES.SUBMIT];
|
|
59
59
|
_render2 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_PageActions.default, {
|
|
60
60
|
actions: ACTIONS,
|
|
61
61
|
onAction: ON_ACTION
|
|
@@ -120,11 +120,11 @@ describe('components', function () {
|
|
|
120
120
|
switch (_context4.prev = _context4.next) {
|
|
121
121
|
case 0:
|
|
122
122
|
NAVIGATE = {
|
|
123
|
-
type:
|
|
123
|
+
type: _models.PageAction.TYPES.NAVIGATE,
|
|
124
124
|
url: '/alpha',
|
|
125
125
|
label: 'Alpha'
|
|
126
126
|
};
|
|
127
|
-
ACTIONS = [NAVIGATE,
|
|
127
|
+
ACTIONS = [NAVIGATE, _models.PageAction.TYPES.SUBMIT];
|
|
128
128
|
_render4 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_PageActions.default, {
|
|
129
129
|
actions: ACTIONS,
|
|
130
130
|
onAction: ON_ACTION
|
package/dist/components/index.js
CHANGED
|
@@ -27,6 +27,12 @@ Object.defineProperty(exports, "FormRenderer", {
|
|
|
27
27
|
return _FormRenderer.default;
|
|
28
28
|
}
|
|
29
29
|
});
|
|
30
|
+
Object.defineProperty(exports, "SummaryList", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
get: function get() {
|
|
33
|
+
return _SummaryList.default;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
30
36
|
|
|
31
37
|
var _CheckYourAnswers = _interopRequireDefault(require("./CheckYourAnswers"));
|
|
32
38
|
|
|
@@ -36,4 +42,6 @@ var _FormPage = _interopRequireDefault(require("./FormPage"));
|
|
|
36
42
|
|
|
37
43
|
var _FormRenderer = _interopRequireDefault(require("./FormRenderer"));
|
|
38
44
|
|
|
45
|
+
var _SummaryList = _interopRequireDefault(require("./SummaryList"));
|
|
46
|
+
|
|
39
47
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -12,6 +12,7 @@ var TYPE_INSET_TEXT = 'inset-text';
|
|
|
12
12
|
var TYPE_PHONE_NUMBER = 'phone-number';
|
|
13
13
|
var TYPE_RADIOS = 'radios';
|
|
14
14
|
var TYPE_TEXT = 'text';
|
|
15
|
+
var TYPE_TEXT_AREA = 'textarea';
|
|
15
16
|
var ComponentTypes = {
|
|
16
17
|
AUTOCOMPLETE: TYPE_AUTOCOMPLETE,
|
|
17
18
|
EMAIL: TYPE_EMAIL,
|
|
@@ -20,7 +21,8 @@ var ComponentTypes = {
|
|
|
20
21
|
INSET_TEXT: TYPE_INSET_TEXT,
|
|
21
22
|
PHONE_NUMBER: TYPE_PHONE_NUMBER,
|
|
22
23
|
RADIOS: TYPE_RADIOS,
|
|
23
|
-
TEXT: TYPE_TEXT
|
|
24
|
+
TEXT: TYPE_TEXT,
|
|
25
|
+
TEXT_AREA: TYPE_TEXT_AREA
|
|
24
26
|
};
|
|
25
27
|
var _default = ComponentTypes;
|
|
26
28
|
exports.default = _default;
|
|
@@ -9,19 +9,18 @@ var _DefaultPageActions;
|
|
|
9
9
|
|
|
10
10
|
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; }
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var TYPE_NAVIGATE = 'navigate';
|
|
13
13
|
var TYPE_SAVE_AND_CONTINUE = 'saveAndContinue';
|
|
14
14
|
var TYPE_SAVE_AND_RETURN = 'saveAndReturn';
|
|
15
|
+
var TYPE_SUBMIT = 'submit';
|
|
15
16
|
var PageActionTypes = {
|
|
16
|
-
|
|
17
|
+
NAVIGATE: TYPE_NAVIGATE,
|
|
17
18
|
SAVE_AND_CONTINUE: TYPE_SAVE_AND_CONTINUE,
|
|
18
|
-
SAVE_AND_RETURN: TYPE_SAVE_AND_RETURN
|
|
19
|
+
SAVE_AND_RETURN: TYPE_SAVE_AND_RETURN,
|
|
20
|
+
SUBMIT: TYPE_SUBMIT
|
|
19
21
|
};
|
|
20
22
|
exports.PageActionTypes = PageActionTypes;
|
|
21
|
-
var DefaultPageActions = (_DefaultPageActions = {}, _defineProperty(_DefaultPageActions,
|
|
22
|
-
type: TYPE_SUBMIT,
|
|
23
|
-
validate: true
|
|
24
|
-
}), _defineProperty(_DefaultPageActions, TYPE_SAVE_AND_CONTINUE, {
|
|
23
|
+
var DefaultPageActions = (_DefaultPageActions = {}, _defineProperty(_DefaultPageActions, TYPE_NAVIGATE, undefined), _defineProperty(_DefaultPageActions, TYPE_SAVE_AND_CONTINUE, {
|
|
25
24
|
type: TYPE_SAVE_AND_CONTINUE,
|
|
26
25
|
validate: true,
|
|
27
26
|
label: 'Save and continue'
|
|
@@ -30,6 +29,9 @@ var DefaultPageActions = (_DefaultPageActions = {}, _defineProperty(_DefaultPage
|
|
|
30
29
|
validate: false,
|
|
31
30
|
label: 'Save and return later',
|
|
32
31
|
classModifiers: 'secondary'
|
|
32
|
+
}), _defineProperty(_DefaultPageActions, TYPE_SUBMIT, {
|
|
33
|
+
type: TYPE_SUBMIT,
|
|
34
|
+
validate: true
|
|
33
35
|
}), _DefaultPageActions);
|
|
34
36
|
exports.DefaultPageActions = DefaultPageActions;
|
|
35
37
|
var PageAction = {
|
|
@@ -67,6 +67,11 @@ var getRadios = function getRadios(config) {
|
|
|
67
67
|
}));
|
|
68
68
|
};
|
|
69
69
|
|
|
70
|
+
var getTextArea = function getTextArea(config) {
|
|
71
|
+
var attrs = (0, _cleanAttributes.default)(config);
|
|
72
|
+
return /*#__PURE__*/_react.default.createElement(_copReactComponents.TextArea, attrs);
|
|
73
|
+
};
|
|
74
|
+
|
|
70
75
|
var getTextInput = function getTextInput(config) {
|
|
71
76
|
var attrs = (0, _cleanAttributes.default)(config);
|
|
72
77
|
return /*#__PURE__*/_react.default.createElement(_copReactComponents.TextInput, attrs);
|
|
@@ -88,6 +93,9 @@ var getComponentByType = function getComponentByType(config) {
|
|
|
88
93
|
case _models.ComponentTypes.PHONE_NUMBER:
|
|
89
94
|
return getTextInput(config);
|
|
90
95
|
|
|
96
|
+
case _models.ComponentTypes.TEXT_AREA:
|
|
97
|
+
return getTextArea(config);
|
|
98
|
+
|
|
91
99
|
case _models.ComponentTypes.AUTOCOMPLETE:
|
|
92
100
|
return getAutocomplete(config);
|
|
93
101
|
|
|
@@ -325,5 +325,37 @@ describe('utils', function () {
|
|
|
325
325
|
});
|
|
326
326
|
});
|
|
327
327
|
});
|
|
328
|
+
it('should return an appropriately rendered textarea component', function () {
|
|
329
|
+
var ID = 'test-id';
|
|
330
|
+
var FIELD_ID = 'field-id';
|
|
331
|
+
var LABEL = 'label';
|
|
332
|
+
var ROWS = 13;
|
|
333
|
+
var COMPONENT = {
|
|
334
|
+
type: _models.ComponentTypes.TEXT_AREA,
|
|
335
|
+
id: ID,
|
|
336
|
+
fieldId: FIELD_ID,
|
|
337
|
+
label: LABEL,
|
|
338
|
+
rows: ROWS,
|
|
339
|
+
'data-testid': ID
|
|
340
|
+
};
|
|
341
|
+
|
|
342
|
+
var _render10 = (0, _react.render)((0, _getComponent.default)(COMPONENT)),
|
|
343
|
+
container = _render10.container;
|
|
344
|
+
|
|
345
|
+
var _getAllByTestId9 = (0, _react.getAllByTestId)(container, ID),
|
|
346
|
+
_getAllByTestId10 = _slicedToArray(_getAllByTestId9, 2),
|
|
347
|
+
formGroup = _getAllByTestId10[0],
|
|
348
|
+
textarea = _getAllByTestId10[1];
|
|
349
|
+
|
|
350
|
+
expect(formGroup.tagName).toEqual('DIV');
|
|
351
|
+
expect(formGroup.classList).toContain('govuk-form-group');
|
|
352
|
+
var label = formGroup.childNodes[0];
|
|
353
|
+
expect(label.innerHTML).toContain(LABEL);
|
|
354
|
+
expect(label.getAttribute('for')).toEqual(ID);
|
|
355
|
+
expect(textarea.tagName).toEqual('TEXTAREA');
|
|
356
|
+
expect(textarea.classList).toContain('govuk-textarea');
|
|
357
|
+
expect(textarea.getAttribute('rows')).toEqual("".concat(ROWS));
|
|
358
|
+
expect(textarea.id).toEqual(ID);
|
|
359
|
+
});
|
|
328
360
|
});
|
|
329
361
|
});
|
|
@@ -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.EMAIL, _models.ComponentTypes.PHONE_NUMBER, _models.ComponentTypes.RADIOS, _models.ComponentTypes.TEXT];
|
|
11
|
+
var EDITABLE_TYPES = [_models.ComponentTypes.AUTOCOMPLETE, _models.ComponentTypes.EMAIL, _models.ComponentTypes.PHONE_NUMBER, _models.ComponentTypes.RADIOS, _models.ComponentTypes.TEXT, _models.ComponentTypes.TEXT_AREA];
|
|
12
12
|
exports.EDITABLE_TYPES = EDITABLE_TYPES;
|
|
13
13
|
|
|
14
14
|
var isEditable = function isEditable(options) {
|
|
@@ -203,12 +203,12 @@ describe('utils', function () {
|
|
|
203
203
|
// and data calculated for the fields, based on that source data.
|
|
204
204
|
|
|
205
205
|
expect(RESULT).toEqual(_objectSpread(_objectSpread({}, _userProfileData.default), {}, {
|
|
206
|
-
firstName: _userProfileData.default.
|
|
207
|
-
surname: _userProfileData.default.
|
|
208
|
-
team: _userProfileData.default.
|
|
209
|
-
staffGradeId: _userProfileData.default.
|
|
210
|
-
linemanagerEmail: _userProfileData.default.
|
|
211
|
-
delegateEmails: _userProfileData.default.
|
|
206
|
+
firstName: _userProfileData.default.currentUser.givenName,
|
|
207
|
+
surname: _userProfileData.default.currentUser.familyName,
|
|
208
|
+
team: _userProfileData.default.userDetails.defaultteam,
|
|
209
|
+
staffGradeId: _userProfileData.default.userDetails.gradeid,
|
|
210
|
+
linemanagerEmail: _userProfileData.default.userDetails.linemanagerEmail,
|
|
211
|
+
delegateEmails: _userProfileData.default.userDetails.delegateEmails
|
|
212
212
|
}));
|
|
213
213
|
});
|
|
214
214
|
});
|
|
@@ -9,7 +9,7 @@ describe('utils', function () {
|
|
|
9
9
|
describe('Data', function () {
|
|
10
10
|
describe('setupRefDataUrlForComponent', function () {
|
|
11
11
|
var DATA = {
|
|
12
|
-
|
|
12
|
+
urls: {
|
|
13
13
|
refData: '/ref-data'
|
|
14
14
|
}
|
|
15
15
|
};
|
|
@@ -39,13 +39,13 @@ describe('utils', function () {
|
|
|
39
39
|
id: 'component',
|
|
40
40
|
// eslint-disable-next-line no-template-curly-in-string
|
|
41
41
|
data: {
|
|
42
|
-
url: '${
|
|
42
|
+
url: '${urls.refData}/v1/teams'
|
|
43
43
|
}
|
|
44
44
|
};
|
|
45
45
|
expect((0, _setupRefDataUrlForComponent.default)(COMPONENT, DATA)).toEqual({
|
|
46
46
|
id: COMPONENT.id,
|
|
47
47
|
data: {
|
|
48
|
-
url: "".concat(DATA.
|
|
48
|
+
url: "".concat(DATA.urls.refData, "/v1/teams")
|
|
49
49
|
}
|
|
50
50
|
});
|
|
51
51
|
});
|
|
@@ -68,7 +68,7 @@ describe('utils', function () {
|
|
|
68
68
|
id: 'component',
|
|
69
69
|
// eslint-disable-next-line no-template-curly-in-string
|
|
70
70
|
data: {
|
|
71
|
-
url: '${
|
|
71
|
+
url: '${urls.referenceData}/v1/teams'
|
|
72
72
|
}
|
|
73
73
|
};
|
|
74
74
|
expect((0, _setupRefDataUrlForComponent.default)(COMPONENT, DATA)).toEqual({
|
|
@@ -44,7 +44,7 @@ var getFormPage = function getFormPage(pageOptions, formComponents, formData) {
|
|
|
44
44
|
ret = _objectSpread({}, componentOptions);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
return formData && formData.
|
|
47
|
+
return formData && formData.urls ? _Data.default.refData.setupUrl(ret, formData) : ret;
|
|
48
48
|
});
|
|
49
49
|
return _objectSpread(_objectSpread({}, pageOptions), {}, {
|
|
50
50
|
formData: formData,
|
|
@@ -30,11 +30,11 @@ describe('utils', function () {
|
|
|
30
30
|
label: 'Charlie',
|
|
31
31
|
type: 'radios',
|
|
32
32
|
data: {
|
|
33
|
-
url: '${
|
|
33
|
+
url: '${urls.refData}/v3/charlies'
|
|
34
34
|
}
|
|
35
35
|
}];
|
|
36
36
|
var FORM_DATA = {
|
|
37
|
-
|
|
37
|
+
urls: {
|
|
38
38
|
refData: 'https://ho.gov.uk/ref-data/'
|
|
39
39
|
}
|
|
40
40
|
};
|
|
@@ -137,7 +137,7 @@ describe('utils', function () {
|
|
|
137
137
|
}, C), {}, {
|
|
138
138
|
cya_label: C.label,
|
|
139
139
|
data: {
|
|
140
|
-
url: "".concat(FORM_DATA.
|
|
140
|
+
url: "".concat(FORM_DATA.urls.refData, "/v3/charlies")
|
|
141
141
|
}
|
|
142
142
|
})],
|
|
143
143
|
formData: FORM_DATA
|
|
@@ -30,11 +30,11 @@ describe('utils', function () {
|
|
|
30
30
|
label: 'Charlie',
|
|
31
31
|
type: 'radios',
|
|
32
32
|
data: {
|
|
33
|
-
url: '${
|
|
33
|
+
url: '${urls.refData}/v3/charlies'
|
|
34
34
|
}
|
|
35
35
|
}];
|
|
36
36
|
var FORM_DATA = {
|
|
37
|
-
|
|
37
|
+
urls: {
|
|
38
38
|
refData: 'https://ho.gov.uk/ref-data/'
|
|
39
39
|
}
|
|
40
40
|
};
|
|
@@ -84,7 +84,7 @@ describe('utils', function () {
|
|
|
84
84
|
}, C), {}, {
|
|
85
85
|
cya_label: C.label,
|
|
86
86
|
data: {
|
|
87
|
-
url: "".concat(FORM_DATA.
|
|
87
|
+
url: "".concat(FORM_DATA.urls.refData, "/v3/charlies")
|
|
88
88
|
}
|
|
89
89
|
})],
|
|
90
90
|
formData: FORM_DATA
|
|
@@ -32,11 +32,11 @@ describe('utils', function () {
|
|
|
32
32
|
label: 'Charlie',
|
|
33
33
|
type: 'radios',
|
|
34
34
|
data: {
|
|
35
|
-
url: '${
|
|
35
|
+
url: '${urls.refData}/v3/charlies'
|
|
36
36
|
}
|
|
37
37
|
}];
|
|
38
38
|
var FORM_DATA = {
|
|
39
|
-
|
|
39
|
+
urls: {
|
|
40
40
|
refData: 'https://ho.gov.uk/ref-data/'
|
|
41
41
|
}
|
|
42
42
|
};
|
package/package.json
CHANGED
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ukhomeoffice/cop-react-form-renderer",
|
|
3
|
-
"version": "1.0.0
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"scripts": {
|
|
6
6
|
"clean": "rimraf dist",
|
|
7
7
|
"test": "react-scripts test",
|
|
8
|
+
"test:coverage": "yarn test --coverage --watchAll=false",
|
|
8
9
|
"lint": "eslint --ext .js,.jsx src",
|
|
9
|
-
"storybook:start": "start-storybook --docs --no-manager-cache -p 6007",
|
|
10
|
+
"storybook:start": "start-storybook --docs -s src/assets --no-manager-cache -p 6007",
|
|
10
11
|
"storybook:build": "build-storybook --docs -s src/assets",
|
|
11
12
|
"storybook:deploy": "yarn deploy-storybook",
|
|
12
13
|
"storybook": "yarn storybook:start",
|
|
13
14
|
"deploy-storybook": "storybook-to-ghpages -e storybook-static",
|
|
14
15
|
"compile": "yarn clean && cross-env NODE_ENV=production babel src --out-dir dist --copy-files && yarn post-compile",
|
|
15
|
-
"post-compile": "rimraf dist/**/*.test.* dist/**/*.stories.* dist/json dist/assets"
|
|
16
|
+
"post-compile": "rimraf dist/*.test.* dist/**/*.test.* dist/**/*.stories.* dist/docs dist/json dist/assets"
|
|
16
17
|
},
|
|
17
18
|
"dependencies": {
|
|
18
|
-
"@ukhomeoffice/cop-react-components": "^0.
|
|
19
|
+
"@ukhomeoffice/cop-react-components": "^0.7.0",
|
|
19
20
|
"axios": "^0.21.1",
|
|
20
21
|
"govuk-frontend": "^3.13.0",
|
|
21
22
|
"web-vitals": "^1.0.1"
|
|
@@ -44,14 +45,14 @@
|
|
|
44
45
|
"cross-env": "^7.0.3",
|
|
45
46
|
"html-react-parser": "^0.10.5",
|
|
46
47
|
"node-sass": "^6.0.1",
|
|
47
|
-
"react": "^
|
|
48
|
-
"react-dom": "^
|
|
48
|
+
"react": "^16.13.1",
|
|
49
|
+
"react-dom": "^16.13.1",
|
|
49
50
|
"react-scripts": "4.0.3",
|
|
50
51
|
"storybook-addon-mock": "^2.0.1"
|
|
51
52
|
},
|
|
52
53
|
"peerDependencies": {
|
|
53
|
-
"react": "^
|
|
54
|
-
"react-dom": "^
|
|
54
|
+
"react": "^16.13.1",
|
|
55
|
+
"react-dom": "^16.13.1",
|
|
55
56
|
"react-scripts": "4.0.3"
|
|
56
57
|
},
|
|
57
58
|
"optionalDependencies": {
|
package/dist/index.test.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
4
|
-
|
|
5
|
-
var _ = _interopRequireWildcard(require("."));
|
|
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
|
-
it('should have exported everything appropriately', function () {
|
|
13
|
-
expect(_.default).toBeDefined();
|
|
14
|
-
expect(_.FormTypes).toBeDefined();
|
|
15
|
-
expect(_.HubFormats).toBeDefined();
|
|
16
|
-
expect(_.intercepts).toBeDefined();
|
|
17
|
-
expect(_.Utils).toBeDefined();
|
|
18
|
-
});
|