@pie-lib/config-ui 12.2.0-next.2 → 12.2.0-next.21
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/CHANGELOG.md +80 -28
- package/LICENSE.md +5 -0
- package/lib/alert-dialog.js +1 -1
- package/lib/checkbox.js +1 -1
- package/lib/choice-configuration/feedback-menu.js +1 -1
- package/lib/choice-configuration/index.js +1 -1
- package/lib/choice-utils.js +1 -1
- package/lib/feedback-config/feedback-selector.js +1 -1
- package/lib/feedback-config/group.js +1 -1
- package/lib/feedback-config/index.js +1 -1
- package/lib/form-section.js +1 -1
- package/lib/help.js +1 -1
- package/lib/index.js +1 -1
- package/lib/input.js +1 -1
- package/lib/inputs.js +1 -1
- package/lib/langs.js +1 -1
- package/lib/layout/config-layout.js +1 -1
- package/lib/layout/index.js +1 -1
- package/lib/layout/layout-contents.js +1 -1
- package/lib/layout/settings-box.js +1 -1
- package/lib/mui-box/index.js +1 -1
- package/lib/number-text-field-custom.js +1 -1
- package/lib/number-text-field.js +2 -2
- package/lib/number-text-field.js.map +1 -1
- package/lib/radio-with-label.js +1 -1
- package/lib/settings/display-size.js +1 -1
- package/lib/settings/index.js +1 -1
- package/lib/settings/panel.js +1 -1
- package/lib/settings/settings-radio-label.js +1 -1
- package/lib/settings/toggle.js +1 -1
- package/lib/tabs/index.js +1 -1
- package/lib/tags-input/index.js +1 -1
- package/lib/two-choice.js +1 -1
- package/lib/with-stateful-model.js +1 -1
- package/package.json +5 -5
- package/src/number-text-field.jsx +1 -1
- package/lib/__tests__/alert-dialog.test.js +0 -262
- package/lib/__tests__/checkbox.test.js +0 -227
- package/lib/__tests__/choice-utils.test.js +0 -14
- package/lib/__tests__/form-section.test.js +0 -252
- package/lib/__tests__/help.test.js +0 -270
- package/lib/__tests__/input.test.js +0 -268
- package/lib/__tests__/langs.test.js +0 -541
- package/lib/__tests__/number-text-field-custom.test.js +0 -362
- package/lib/__tests__/number-text-field.test.js +0 -421
- package/lib/__tests__/radio-with-label.test.js +0 -233
- package/lib/__tests__/settings-panel.test.js +0 -184
- package/lib/__tests__/settings.test.js +0 -653
- package/lib/__tests__/tabs.test.js +0 -211
- package/lib/__tests__/two-choice.test.js +0 -124
- package/lib/__tests__/with-stateful-model.test.js +0 -221
- package/lib/choice-configuration/__tests__/feedback-menu.test.js +0 -287
- package/lib/choice-configuration/__tests__/index.test.js +0 -253
- package/lib/feedback-config/__tests__/feedback-config.test.js +0 -201
- package/lib/feedback-config/__tests__/feedback-selector.test.js +0 -177
- package/lib/layout/__tests__/config.layout.test.js +0 -70
- package/lib/layout/__tests__/layout-content.test.js +0 -6
- package/lib/tags-input/__tests__/index.test.js +0 -183
|
@@ -1,221 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
5
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
6
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
7
|
-
var _react = _interopRequireDefault(require("react"));
|
|
8
|
-
var _react2 = require("@testing-library/react");
|
|
9
|
-
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
10
|
-
var _withStatefulModel = _interopRequireDefault(require("../with-stateful-model"));
|
|
11
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
12
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
13
|
-
var MockComponent = function MockComponent(_ref) {
|
|
14
|
-
var model = _ref.model,
|
|
15
|
-
onChange = _ref.onChange;
|
|
16
|
-
return /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("div", {
|
|
17
|
-
"data-testid": "model-value"
|
|
18
|
-
}, JSON.stringify(model)), /*#__PURE__*/_react["default"].createElement("button", {
|
|
19
|
-
onClick: function onClick() {
|
|
20
|
-
return onChange(_objectSpread(_objectSpread({}, model), {}, {
|
|
21
|
-
updated: true
|
|
22
|
-
}));
|
|
23
|
-
}
|
|
24
|
-
}, "Update Model"));
|
|
25
|
-
};
|
|
26
|
-
describe('withStatefulModel', function () {
|
|
27
|
-
it('wraps component and passes model and onChange', function () {
|
|
28
|
-
var WrappedComponent = (0, _withStatefulModel["default"])(MockComponent);
|
|
29
|
-
var model = {
|
|
30
|
-
name: 'test'
|
|
31
|
-
};
|
|
32
|
-
var onChange = jest.fn();
|
|
33
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(WrappedComponent, {
|
|
34
|
-
model: model,
|
|
35
|
-
onChange: onChange
|
|
36
|
-
}));
|
|
37
|
-
expect(_react2.screen.getByTestId('model-value')).toBeInTheDocument();
|
|
38
|
-
expect(_react2.screen.getByText(JSON.stringify(model))).toBeInTheDocument();
|
|
39
|
-
});
|
|
40
|
-
it('manages local state with initial model prop', function () {
|
|
41
|
-
var WrappedComponent = (0, _withStatefulModel["default"])(MockComponent);
|
|
42
|
-
var model = {
|
|
43
|
-
id: 1,
|
|
44
|
-
name: 'test'
|
|
45
|
-
};
|
|
46
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(WrappedComponent, {
|
|
47
|
-
model: model,
|
|
48
|
-
onChange: jest.fn()
|
|
49
|
-
}));
|
|
50
|
-
expect(_react2.screen.getByText(JSON.stringify(model))).toBeInTheDocument();
|
|
51
|
-
});
|
|
52
|
-
it('calls onChange with updated model when component calls onChange', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
53
|
-
var user, WrappedComponent, model, onChange, updateButton;
|
|
54
|
-
return _regenerator["default"].wrap(function (_context) {
|
|
55
|
-
while (1) switch (_context.prev = _context.next) {
|
|
56
|
-
case 0:
|
|
57
|
-
user = _userEvent["default"].setup();
|
|
58
|
-
WrappedComponent = (0, _withStatefulModel["default"])(MockComponent);
|
|
59
|
-
model = {
|
|
60
|
-
name: 'test'
|
|
61
|
-
};
|
|
62
|
-
onChange = jest.fn();
|
|
63
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(WrappedComponent, {
|
|
64
|
-
model: model,
|
|
65
|
-
onChange: onChange
|
|
66
|
-
}));
|
|
67
|
-
updateButton = _react2.screen.getByRole('button', {
|
|
68
|
-
name: /Update Model/i
|
|
69
|
-
});
|
|
70
|
-
_context.next = 1;
|
|
71
|
-
return user.click(updateButton);
|
|
72
|
-
case 1:
|
|
73
|
-
expect(onChange).toHaveBeenCalled();
|
|
74
|
-
expect(onChange).toHaveBeenCalledWith(expect.objectContaining({
|
|
75
|
-
updated: true
|
|
76
|
-
}));
|
|
77
|
-
case 2:
|
|
78
|
-
case "end":
|
|
79
|
-
return _context.stop();
|
|
80
|
-
}
|
|
81
|
-
}, _callee);
|
|
82
|
-
})));
|
|
83
|
-
it('updates internal state when model prop changes', function () {
|
|
84
|
-
var WrappedComponent = (0, _withStatefulModel["default"])(MockComponent);
|
|
85
|
-
var initialModel = {
|
|
86
|
-
name: 'initial'
|
|
87
|
-
};
|
|
88
|
-
var updatedModel = {
|
|
89
|
-
name: 'updated'
|
|
90
|
-
};
|
|
91
|
-
var onChange = jest.fn();
|
|
92
|
-
var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(WrappedComponent, {
|
|
93
|
-
model: initialModel,
|
|
94
|
-
onChange: onChange
|
|
95
|
-
})),
|
|
96
|
-
rerender = _render.rerender;
|
|
97
|
-
expect(_react2.screen.getByText(JSON.stringify(initialModel))).toBeInTheDocument();
|
|
98
|
-
rerender(/*#__PURE__*/_react["default"].createElement(WrappedComponent, {
|
|
99
|
-
model: updatedModel,
|
|
100
|
-
onChange: onChange
|
|
101
|
-
}));
|
|
102
|
-
expect(_react2.screen.getByText(JSON.stringify(updatedModel))).toBeInTheDocument();
|
|
103
|
-
});
|
|
104
|
-
it('maintains state across multiple onChange calls', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
105
|
-
var user, WrappedComponent, model, onChange, updateButton;
|
|
106
|
-
return _regenerator["default"].wrap(function (_context2) {
|
|
107
|
-
while (1) switch (_context2.prev = _context2.next) {
|
|
108
|
-
case 0:
|
|
109
|
-
user = _userEvent["default"].setup();
|
|
110
|
-
WrappedComponent = (0, _withStatefulModel["default"])(MockComponent);
|
|
111
|
-
model = {
|
|
112
|
-
count: 0
|
|
113
|
-
};
|
|
114
|
-
onChange = jest.fn();
|
|
115
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(WrappedComponent, {
|
|
116
|
-
model: model,
|
|
117
|
-
onChange: onChange
|
|
118
|
-
}));
|
|
119
|
-
updateButton = _react2.screen.getByRole('button', {
|
|
120
|
-
name: /Update Model/i
|
|
121
|
-
});
|
|
122
|
-
_context2.next = 1;
|
|
123
|
-
return user.click(updateButton);
|
|
124
|
-
case 1:
|
|
125
|
-
expect(onChange).toHaveBeenCalledTimes(1);
|
|
126
|
-
_context2.next = 2;
|
|
127
|
-
return user.click(updateButton);
|
|
128
|
-
case 2:
|
|
129
|
-
expect(onChange).toHaveBeenCalledTimes(2);
|
|
130
|
-
case 3:
|
|
131
|
-
case "end":
|
|
132
|
-
return _context2.stop();
|
|
133
|
-
}
|
|
134
|
-
}, _callee2);
|
|
135
|
-
})));
|
|
136
|
-
it('passes updated model state to onChange callback', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
137
|
-
var user, WrappedComponent, model, onChange, updateButton, lastCall;
|
|
138
|
-
return _regenerator["default"].wrap(function (_context3) {
|
|
139
|
-
while (1) switch (_context3.prev = _context3.next) {
|
|
140
|
-
case 0:
|
|
141
|
-
user = _userEvent["default"].setup();
|
|
142
|
-
WrappedComponent = (0, _withStatefulModel["default"])(MockComponent);
|
|
143
|
-
model = {
|
|
144
|
-
value: 'original'
|
|
145
|
-
};
|
|
146
|
-
onChange = jest.fn();
|
|
147
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(WrappedComponent, {
|
|
148
|
-
model: model,
|
|
149
|
-
onChange: onChange
|
|
150
|
-
}));
|
|
151
|
-
updateButton = _react2.screen.getByRole('button', {
|
|
152
|
-
name: /Update Model/i
|
|
153
|
-
});
|
|
154
|
-
_context3.next = 1;
|
|
155
|
-
return user.click(updateButton);
|
|
156
|
-
case 1:
|
|
157
|
-
lastCall = onChange.mock.calls[onChange.mock.calls.length - 1];
|
|
158
|
-
expect(lastCall[0]).toHaveProperty('updated', true);
|
|
159
|
-
expect(lastCall[0]).toHaveProperty('value', 'original');
|
|
160
|
-
case 2:
|
|
161
|
-
case "end":
|
|
162
|
-
return _context3.stop();
|
|
163
|
-
}
|
|
164
|
-
}, _callee3);
|
|
165
|
-
})));
|
|
166
|
-
it('handles empty model object', function () {
|
|
167
|
-
var WrappedComponent = (0, _withStatefulModel["default"])(MockComponent);
|
|
168
|
-
var model = {};
|
|
169
|
-
var onChange = jest.fn();
|
|
170
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(WrappedComponent, {
|
|
171
|
-
model: model,
|
|
172
|
-
onChange: onChange
|
|
173
|
-
}));
|
|
174
|
-
expect(_react2.screen.getByText(JSON.stringify(model))).toBeInTheDocument();
|
|
175
|
-
});
|
|
176
|
-
it('handles model with nested properties', function () {
|
|
177
|
-
var WrappedComponent = (0, _withStatefulModel["default"])(MockComponent);
|
|
178
|
-
var model = {
|
|
179
|
-
user: {
|
|
180
|
-
name: 'John',
|
|
181
|
-
age: 30
|
|
182
|
-
},
|
|
183
|
-
settings: {
|
|
184
|
-
theme: 'dark'
|
|
185
|
-
}
|
|
186
|
-
};
|
|
187
|
-
var onChange = jest.fn();
|
|
188
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(WrappedComponent, {
|
|
189
|
-
model: model,
|
|
190
|
-
onChange: onChange
|
|
191
|
-
}));
|
|
192
|
-
expect(_react2.screen.getByText(JSON.stringify(model))).toBeInTheDocument();
|
|
193
|
-
});
|
|
194
|
-
it('requires model and onChange props', function () {
|
|
195
|
-
var WrappedComponent = (0, _withStatefulModel["default"])(MockComponent);
|
|
196
|
-
var consoleSpy = jest.spyOn(console, 'error').mockImplementation();
|
|
197
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(WrappedComponent, {
|
|
198
|
-
model: {
|
|
199
|
-
test: 'data'
|
|
200
|
-
},
|
|
201
|
-
onChange: jest.fn()
|
|
202
|
-
}));
|
|
203
|
-
expect(_react2.screen.getByTestId('model-value')).toBeInTheDocument();
|
|
204
|
-
consoleSpy.mockRestore();
|
|
205
|
-
});
|
|
206
|
-
it('renders wrapped component with correct props structure', function () {
|
|
207
|
-
var WrappedComponent = (0, _withStatefulModel["default"])(MockComponent);
|
|
208
|
-
var model = {
|
|
209
|
-
id: 1
|
|
210
|
-
};
|
|
211
|
-
var onChange = jest.fn();
|
|
212
|
-
var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(WrappedComponent, {
|
|
213
|
-
model: model,
|
|
214
|
-
onChange: onChange
|
|
215
|
-
})),
|
|
216
|
-
container = _render2.container;
|
|
217
|
-
expect(container.querySelector('[data-testid="model-value"]')).toBeInTheDocument();
|
|
218
|
-
expect(container.querySelector('button')).toBeInTheDocument();
|
|
219
|
-
});
|
|
220
|
-
});
|
|
221
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfdXNlckV2ZW50IiwiX3dpdGhTdGF0ZWZ1bE1vZGVsIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJNb2NrQ29tcG9uZW50IiwiX3JlZiIsIm1vZGVsIiwib25DaGFuZ2UiLCJjcmVhdGVFbGVtZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsIm9uQ2xpY2siLCJ1cGRhdGVkIiwiZGVzY3JpYmUiLCJpdCIsIldyYXBwZWRDb21wb25lbnQiLCJ3aXRoU3RhdGVmdWxNb2RlbCIsIm5hbWUiLCJqZXN0IiwiZm4iLCJyZW5kZXIiLCJleHBlY3QiLCJzY3JlZW4iLCJnZXRCeVRlc3RJZCIsInRvQmVJblRoZURvY3VtZW50IiwiZ2V0QnlUZXh0IiwiaWQiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsInVzZXIiLCJ1cGRhdGVCdXR0b24iLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInVzZXJFdmVudCIsInNldHVwIiwiZ2V0QnlSb2xlIiwiY2xpY2siLCJ0b0hhdmVCZWVuQ2FsbGVkIiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJvYmplY3RDb250YWluaW5nIiwic3RvcCIsImluaXRpYWxNb2RlbCIsInVwZGF0ZWRNb2RlbCIsIl9yZW5kZXIiLCJyZXJlbmRlciIsIl9jYWxsZWUyIiwiX2NvbnRleHQyIiwiY291bnQiLCJ0b0hhdmVCZWVuQ2FsbGVkVGltZXMiLCJfY2FsbGVlMyIsImxhc3RDYWxsIiwiX2NvbnRleHQzIiwidmFsdWUiLCJtb2NrIiwiY2FsbHMiLCJ0b0hhdmVQcm9wZXJ0eSIsImFnZSIsInNldHRpbmdzIiwidGhlbWUiLCJjb25zb2xlU3B5Iiwic3B5T24iLCJjb25zb2xlIiwibW9ja0ltcGxlbWVudGF0aW9uIiwidGVzdCIsIm1vY2tSZXN0b3JlIiwiX3JlbmRlcjIiLCJjb250YWluZXIiLCJxdWVyeVNlbGVjdG9yIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy93aXRoLXN0YXRlZnVsLW1vZGVsLnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXIsIHNjcmVlbiB9IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvcmVhY3QnO1xuaW1wb3J0IHVzZXJFdmVudCBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3VzZXItZXZlbnQnO1xuaW1wb3J0IHdpdGhTdGF0ZWZ1bE1vZGVsIGZyb20gJy4uL3dpdGgtc3RhdGVmdWwtbW9kZWwnO1xuXG5jb25zdCBNb2NrQ29tcG9uZW50ID0gKHsgbW9kZWwsIG9uQ2hhbmdlIH0pID0+IChcbiAgPGRpdj5cbiAgICA8ZGl2IGRhdGEtdGVzdGlkPVwibW9kZWwtdmFsdWVcIj57SlNPTi5zdHJpbmdpZnkobW9kZWwpfTwvZGl2PlxuICAgIDxidXR0b24gb25DbGljaz17KCkgPT4gb25DaGFuZ2UoeyAuLi5tb2RlbCwgdXBkYXRlZDogdHJ1ZSB9KX0+VXBkYXRlIE1vZGVsPC9idXR0b24+XG4gIDwvZGl2PlxuKTtcblxuZGVzY3JpYmUoJ3dpdGhTdGF0ZWZ1bE1vZGVsJywgKCkgPT4ge1xuICBpdCgnd3JhcHMgY29tcG9uZW50IGFuZCBwYXNzZXMgbW9kZWwgYW5kIG9uQ2hhbmdlJywgKCkgPT4ge1xuICAgIGNvbnN0IFdyYXBwZWRDb21wb25lbnQgPSB3aXRoU3RhdGVmdWxNb2RlbChNb2NrQ29tcG9uZW50KTtcbiAgICBjb25zdCBtb2RlbCA9IHsgbmFtZTogJ3Rlc3QnIH07XG4gICAgY29uc3Qgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG5cbiAgICByZW5kZXIoPFdyYXBwZWRDb21wb25lbnQgbW9kZWw9e21vZGVsfSBvbkNoYW5nZT17b25DaGFuZ2V9IC8+KTtcblxuICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXN0SWQoJ21vZGVsLXZhbHVlJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoSlNPTi5zdHJpbmdpZnkobW9kZWwpKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgfSk7XG5cbiAgaXQoJ21hbmFnZXMgbG9jYWwgc3RhdGUgd2l0aCBpbml0aWFsIG1vZGVsIHByb3AnLCAoKSA9PiB7XG4gICAgY29uc3QgV3JhcHBlZENvbXBvbmVudCA9IHdpdGhTdGF0ZWZ1bE1vZGVsKE1vY2tDb21wb25lbnQpO1xuICAgIGNvbnN0IG1vZGVsID0geyBpZDogMSwgbmFtZTogJ3Rlc3QnIH07XG5cbiAgICByZW5kZXIoPFdyYXBwZWRDb21wb25lbnQgbW9kZWw9e21vZGVsfSBvbkNoYW5nZT17amVzdC5mbigpfSAvPik7XG5cbiAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dChKU09OLnN0cmluZ2lmeShtb2RlbCkpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICB9KTtcblxuICBpdCgnY2FsbHMgb25DaGFuZ2Ugd2l0aCB1cGRhdGVkIG1vZGVsIHdoZW4gY29tcG9uZW50IGNhbGxzIG9uQ2hhbmdlJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHVzZXIgPSB1c2VyRXZlbnQuc2V0dXAoKTtcbiAgICBjb25zdCBXcmFwcGVkQ29tcG9uZW50ID0gd2l0aFN0YXRlZnVsTW9kZWwoTW9ja0NvbXBvbmVudCk7XG4gICAgY29uc3QgbW9kZWwgPSB7IG5hbWU6ICd0ZXN0JyB9O1xuICAgIGNvbnN0IG9uQ2hhbmdlID0gamVzdC5mbigpO1xuXG4gICAgcmVuZGVyKDxXcmFwcGVkQ29tcG9uZW50IG1vZGVsPXttb2RlbH0gb25DaGFuZ2U9e29uQ2hhbmdlfSAvPik7XG5cbiAgICBjb25zdCB1cGRhdGVCdXR0b24gPSBzY3JlZW4uZ2V0QnlSb2xlKCdidXR0b24nLCB7IG5hbWU6IC9VcGRhdGUgTW9kZWwvaSB9KTtcbiAgICBhd2FpdCB1c2VyLmNsaWNrKHVwZGF0ZUJ1dHRvbik7XG5cbiAgICBleHBlY3Qob25DaGFuZ2UpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICBleHBlY3Qob25DaGFuZ2UpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5vYmplY3RDb250YWluaW5nKHsgdXBkYXRlZDogdHJ1ZSB9KSk7XG4gIH0pO1xuXG4gIGl0KCd1cGRhdGVzIGludGVybmFsIHN0YXRlIHdoZW4gbW9kZWwgcHJvcCBjaGFuZ2VzJywgKCkgPT4ge1xuICAgIGNvbnN0IFdyYXBwZWRDb21wb25lbnQgPSB3aXRoU3RhdGVmdWxNb2RlbChNb2NrQ29tcG9uZW50KTtcbiAgICBjb25zdCBpbml0aWFsTW9kZWwgPSB7IG5hbWU6ICdpbml0aWFsJyB9O1xuICAgIGNvbnN0IHVwZGF0ZWRNb2RlbCA9IHsgbmFtZTogJ3VwZGF0ZWQnIH07XG4gICAgY29uc3Qgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG5cbiAgICBjb25zdCB7IHJlcmVuZGVyIH0gPSByZW5kZXIoPFdyYXBwZWRDb21wb25lbnQgbW9kZWw9e2luaXRpYWxNb2RlbH0gb25DaGFuZ2U9e29uQ2hhbmdlfSAvPik7XG5cbiAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dChKU09OLnN0cmluZ2lmeShpbml0aWFsTW9kZWwpKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcblxuICAgIHJlcmVuZGVyKDxXcmFwcGVkQ29tcG9uZW50IG1vZGVsPXt1cGRhdGVkTW9kZWx9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gLz4pO1xuXG4gICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoSlNPTi5zdHJpbmdpZnkodXBkYXRlZE1vZGVsKSkpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gIH0pO1xuXG4gIGl0KCdtYWludGFpbnMgc3RhdGUgYWNyb3NzIG11bHRpcGxlIG9uQ2hhbmdlIGNhbGxzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHVzZXIgPSB1c2VyRXZlbnQuc2V0dXAoKTtcbiAgICBjb25zdCBXcmFwcGVkQ29tcG9uZW50ID0gd2l0aFN0YXRlZnVsTW9kZWwoTW9ja0NvbXBvbmVudCk7XG4gICAgY29uc3QgbW9kZWwgPSB7IGNvdW50OiAwIH07XG4gICAgY29uc3Qgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG5cbiAgICByZW5kZXIoPFdyYXBwZWRDb21wb25lbnQgbW9kZWw9e21vZGVsfSBvbkNoYW5nZT17b25DaGFuZ2V9IC8+KTtcblxuICAgIGNvbnN0IHVwZGF0ZUJ1dHRvbiA9IHNjcmVlbi5nZXRCeVJvbGUoJ2J1dHRvbicsIHsgbmFtZTogL1VwZGF0ZSBNb2RlbC9pIH0pO1xuXG4gICAgYXdhaXQgdXNlci5jbGljayh1cGRhdGVCdXR0b24pO1xuICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXG4gICAgYXdhaXQgdXNlci5jbGljayh1cGRhdGVCdXR0b24pO1xuICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuICB9KTtcblxuICBpdCgncGFzc2VzIHVwZGF0ZWQgbW9kZWwgc3RhdGUgdG8gb25DaGFuZ2UgY2FsbGJhY2snLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdXNlciA9IHVzZXJFdmVudC5zZXR1cCgpO1xuICAgIGNvbnN0IFdyYXBwZWRDb21wb25lbnQgPSB3aXRoU3RhdGVmdWxNb2RlbChNb2NrQ29tcG9uZW50KTtcbiAgICBjb25zdCBtb2RlbCA9IHsgdmFsdWU6ICdvcmlnaW5hbCcgfTtcbiAgICBjb25zdCBvbkNoYW5nZSA9IGplc3QuZm4oKTtcblxuICAgIHJlbmRlcig8V3JhcHBlZENvbXBvbmVudCBtb2RlbD17bW9kZWx9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gLz4pO1xuXG4gICAgY29uc3QgdXBkYXRlQnV0dG9uID0gc2NyZWVuLmdldEJ5Um9sZSgnYnV0dG9uJywgeyBuYW1lOiAvVXBkYXRlIE1vZGVsL2kgfSk7XG4gICAgYXdhaXQgdXNlci5jbGljayh1cGRhdGVCdXR0b24pO1xuXG4gICAgY29uc3QgbGFzdENhbGwgPSBvbkNoYW5nZS5tb2NrLmNhbGxzW29uQ2hhbmdlLm1vY2suY2FsbHMubGVuZ3RoIC0gMV07XG4gICAgZXhwZWN0KGxhc3RDYWxsWzBdKS50b0hhdmVQcm9wZXJ0eSgndXBkYXRlZCcsIHRydWUpO1xuICAgIGV4cGVjdChsYXN0Q2FsbFswXSkudG9IYXZlUHJvcGVydHkoJ3ZhbHVlJywgJ29yaWdpbmFsJyk7XG4gIH0pO1xuXG4gIGl0KCdoYW5kbGVzIGVtcHR5IG1vZGVsIG9iamVjdCcsICgpID0+IHtcbiAgICBjb25zdCBXcmFwcGVkQ29tcG9uZW50ID0gd2l0aFN0YXRlZnVsTW9kZWwoTW9ja0NvbXBvbmVudCk7XG4gICAgY29uc3QgbW9kZWwgPSB7fTtcbiAgICBjb25zdCBvbkNoYW5nZSA9IGplc3QuZm4oKTtcblxuICAgIHJlbmRlcig8V3JhcHBlZENvbXBvbmVudCBtb2RlbD17bW9kZWx9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gLz4pO1xuXG4gICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoSlNPTi5zdHJpbmdpZnkobW9kZWwpKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgfSk7XG5cbiAgaXQoJ2hhbmRsZXMgbW9kZWwgd2l0aCBuZXN0ZWQgcHJvcGVydGllcycsICgpID0+IHtcbiAgICBjb25zdCBXcmFwcGVkQ29tcG9uZW50ID0gd2l0aFN0YXRlZnVsTW9kZWwoTW9ja0NvbXBvbmVudCk7XG4gICAgY29uc3QgbW9kZWwgPSB7IHVzZXI6IHsgbmFtZTogJ0pvaG4nLCBhZ2U6IDMwIH0sIHNldHRpbmdzOiB7IHRoZW1lOiAnZGFyaycgfSB9O1xuICAgIGNvbnN0IG9uQ2hhbmdlID0gamVzdC5mbigpO1xuXG4gICAgcmVuZGVyKDxXcmFwcGVkQ29tcG9uZW50IG1vZGVsPXttb2RlbH0gb25DaGFuZ2U9e29uQ2hhbmdlfSAvPik7XG5cbiAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dChKU09OLnN0cmluZ2lmeShtb2RlbCkpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICB9KTtcblxuICBpdCgncmVxdWlyZXMgbW9kZWwgYW5kIG9uQ2hhbmdlIHByb3BzJywgKCkgPT4ge1xuICAgIGNvbnN0IFdyYXBwZWRDb21wb25lbnQgPSB3aXRoU3RhdGVmdWxNb2RlbChNb2NrQ29tcG9uZW50KTtcblxuICAgIGNvbnN0IGNvbnNvbGVTcHkgPSBqZXN0LnNweU9uKGNvbnNvbGUsICdlcnJvcicpLm1vY2tJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgcmVuZGVyKDxXcmFwcGVkQ29tcG9uZW50IG1vZGVsPXt7IHRlc3Q6ICdkYXRhJyB9fSBvbkNoYW5nZT17amVzdC5mbigpfSAvPik7XG5cbiAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGVzdElkKCdtb2RlbC12YWx1ZScpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuXG4gICAgY29uc29sZVNweS5tb2NrUmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgncmVuZGVycyB3cmFwcGVkIGNvbXBvbmVudCB3aXRoIGNvcnJlY3QgcHJvcHMgc3RydWN0dXJlJywgKCkgPT4ge1xuICAgIGNvbnN0IFdyYXBwZWRDb21wb25lbnQgPSB3aXRoU3RhdGVmdWxNb2RlbChNb2NrQ29tcG9uZW50KTtcbiAgICBjb25zdCBtb2RlbCA9IHsgaWQ6IDEgfTtcbiAgICBjb25zdCBvbkNoYW5nZSA9IGplc3QuZm4oKTtcblxuICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPFdyYXBwZWRDb21wb25lbnQgbW9kZWw9e21vZGVsfSBvbkNoYW5nZT17b25DaGFuZ2V9IC8+KTtcblxuICAgIGV4cGVjdChjb250YWluZXIucXVlcnlTZWxlY3RvcignW2RhdGEtdGVzdGlkPVwibW9kZWwtdmFsdWVcIl0nKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICBleHBlY3QoY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxVQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxrQkFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQXVELFNBQUFJLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENBQUFMLENBQUEsR0FBQUMsQ0FBQSxLQUFBSyxDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBTixDQUFBLFdBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFRLFVBQUEsT0FBQVAsQ0FBQSxDQUFBUSxJQUFBLENBQUFDLEtBQUEsQ0FBQVQsQ0FBQSxFQUFBSSxDQUFBLFlBQUFKLENBQUE7QUFBQSxTQUFBVSxjQUFBWixDQUFBLGFBQUFDLENBQUEsTUFBQUEsQ0FBQSxHQUFBWSxTQUFBLENBQUFDLE1BQUEsRUFBQWIsQ0FBQSxVQUFBQyxDQUFBLFdBQUFXLFNBQUEsQ0FBQVosQ0FBQSxJQUFBWSxTQUFBLENBQUFaLENBQUEsUUFBQUEsQ0FBQSxPQUFBRixPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FBQSxPQUFBYSxPQUFBLFdBQUFkLENBQUEsUUFBQWUsZ0JBQUEsYUFBQWhCLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLENBQUFELENBQUEsU0FBQUUsTUFBQSxDQUFBYyx5QkFBQSxH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
|
|
@@ -1,287 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
5
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
6
|
-
var _react = _interopRequireDefault(require("react"));
|
|
7
|
-
var _react2 = require("@testing-library/react");
|
|
8
|
-
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
9
|
-
var _feedbackMenu = _interopRequireDefault(require("../feedback-menu"));
|
|
10
|
-
describe('feedback-menu', function () {
|
|
11
|
-
var onChange = jest.fn();
|
|
12
|
-
beforeEach(function () {
|
|
13
|
-
onChange.mockClear();
|
|
14
|
-
});
|
|
15
|
-
describe('rendering', function () {
|
|
16
|
-
it('renders feedback menu with default options', function () {
|
|
17
|
-
var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_feedbackMenu["default"], {
|
|
18
|
-
onChange: onChange,
|
|
19
|
-
classes: {}
|
|
20
|
-
})),
|
|
21
|
-
container = _render.container;
|
|
22
|
-
expect(container.firstChild).toBeInTheDocument();
|
|
23
|
-
});
|
|
24
|
-
it('renders menu with feedback type selector', function () {
|
|
25
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_feedbackMenu["default"], {
|
|
26
|
-
onChange: onChange,
|
|
27
|
-
value: {
|
|
28
|
-
type: 'default'
|
|
29
|
-
},
|
|
30
|
-
classes: {}
|
|
31
|
-
}));
|
|
32
|
-
// Menu button should be in the document
|
|
33
|
-
expect(_react2.screen.getByRole('button')).toBeInTheDocument();
|
|
34
|
-
});
|
|
35
|
-
it('renders with no feedback type', function () {
|
|
36
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_feedbackMenu["default"], {
|
|
37
|
-
onChange: onChange,
|
|
38
|
-
value: {
|
|
39
|
-
type: 'none'
|
|
40
|
-
},
|
|
41
|
-
classes: {}
|
|
42
|
-
}));
|
|
43
|
-
expect(_react2.screen.getByRole('button')).toBeInTheDocument();
|
|
44
|
-
});
|
|
45
|
-
it('renders with custom feedback type', function () {
|
|
46
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_feedbackMenu["default"], {
|
|
47
|
-
onChange: onChange,
|
|
48
|
-
value: {
|
|
49
|
-
type: 'custom'
|
|
50
|
-
},
|
|
51
|
-
classes: {}
|
|
52
|
-
}));
|
|
53
|
-
expect(_react2.screen.getByRole('button')).toBeInTheDocument();
|
|
54
|
-
});
|
|
55
|
-
it('renders feedback icon button', function () {
|
|
56
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_feedbackMenu["default"], {
|
|
57
|
-
onChange: onChange,
|
|
58
|
-
classes: {}
|
|
59
|
-
}));
|
|
60
|
-
var button = _react2.screen.getByRole('button');
|
|
61
|
-
expect(button).toBeInTheDocument();
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
describe('user interactions', function () {
|
|
65
|
-
it('opens menu when button is clicked', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
66
|
-
var user, button;
|
|
67
|
-
return _regenerator["default"].wrap(function (_context) {
|
|
68
|
-
while (1) switch (_context.prev = _context.next) {
|
|
69
|
-
case 0:
|
|
70
|
-
user = _userEvent["default"].setup();
|
|
71
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_feedbackMenu["default"], {
|
|
72
|
-
onChange: onChange,
|
|
73
|
-
value: {
|
|
74
|
-
type: 'default'
|
|
75
|
-
},
|
|
76
|
-
classes: {}
|
|
77
|
-
}));
|
|
78
|
-
button = _react2.screen.getByRole('button');
|
|
79
|
-
_context.next = 1;
|
|
80
|
-
return user.click(button);
|
|
81
|
-
case 1:
|
|
82
|
-
// Menu items should appear
|
|
83
|
-
expect(_react2.screen.getByText('No Feedback')).toBeInTheDocument();
|
|
84
|
-
expect(_react2.screen.getByText('Default')).toBeInTheDocument();
|
|
85
|
-
expect(_react2.screen.getByText('Custom')).toBeInTheDocument();
|
|
86
|
-
case 2:
|
|
87
|
-
case "end":
|
|
88
|
-
return _context.stop();
|
|
89
|
-
}
|
|
90
|
-
}, _callee);
|
|
91
|
-
})));
|
|
92
|
-
it('calls onChange with "none" when No Feedback is selected', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
93
|
-
var user, button, noFeedbackOption;
|
|
94
|
-
return _regenerator["default"].wrap(function (_context2) {
|
|
95
|
-
while (1) switch (_context2.prev = _context2.next) {
|
|
96
|
-
case 0:
|
|
97
|
-
user = _userEvent["default"].setup();
|
|
98
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_feedbackMenu["default"], {
|
|
99
|
-
onChange: onChange,
|
|
100
|
-
value: {
|
|
101
|
-
type: 'default'
|
|
102
|
-
},
|
|
103
|
-
classes: {}
|
|
104
|
-
}));
|
|
105
|
-
button = _react2.screen.getByRole('button');
|
|
106
|
-
_context2.next = 1;
|
|
107
|
-
return user.click(button);
|
|
108
|
-
case 1:
|
|
109
|
-
noFeedbackOption = _react2.screen.getByText('No Feedback');
|
|
110
|
-
_context2.next = 2;
|
|
111
|
-
return user.click(noFeedbackOption);
|
|
112
|
-
case 2:
|
|
113
|
-
expect(onChange).toHaveBeenCalledWith('none');
|
|
114
|
-
case 3:
|
|
115
|
-
case "end":
|
|
116
|
-
return _context2.stop();
|
|
117
|
-
}
|
|
118
|
-
}, _callee2);
|
|
119
|
-
})));
|
|
120
|
-
it('calls onChange with "default" when Default is selected', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
121
|
-
var user, button, defaultOption;
|
|
122
|
-
return _regenerator["default"].wrap(function (_context3) {
|
|
123
|
-
while (1) switch (_context3.prev = _context3.next) {
|
|
124
|
-
case 0:
|
|
125
|
-
user = _userEvent["default"].setup();
|
|
126
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_feedbackMenu["default"], {
|
|
127
|
-
onChange: onChange,
|
|
128
|
-
value: {
|
|
129
|
-
type: 'none'
|
|
130
|
-
},
|
|
131
|
-
classes: {}
|
|
132
|
-
}));
|
|
133
|
-
button = _react2.screen.getByRole('button');
|
|
134
|
-
_context3.next = 1;
|
|
135
|
-
return user.click(button);
|
|
136
|
-
case 1:
|
|
137
|
-
defaultOption = _react2.screen.getByText('Default');
|
|
138
|
-
_context3.next = 2;
|
|
139
|
-
return user.click(defaultOption);
|
|
140
|
-
case 2:
|
|
141
|
-
expect(onChange).toHaveBeenCalledWith('default');
|
|
142
|
-
case 3:
|
|
143
|
-
case "end":
|
|
144
|
-
return _context3.stop();
|
|
145
|
-
}
|
|
146
|
-
}, _callee3);
|
|
147
|
-
})));
|
|
148
|
-
it('calls onChange with "custom" when Custom is selected', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4() {
|
|
149
|
-
var user, button, customOption;
|
|
150
|
-
return _regenerator["default"].wrap(function (_context4) {
|
|
151
|
-
while (1) switch (_context4.prev = _context4.next) {
|
|
152
|
-
case 0:
|
|
153
|
-
user = _userEvent["default"].setup();
|
|
154
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_feedbackMenu["default"], {
|
|
155
|
-
onChange: onChange,
|
|
156
|
-
value: {
|
|
157
|
-
type: 'none'
|
|
158
|
-
},
|
|
159
|
-
classes: {}
|
|
160
|
-
}));
|
|
161
|
-
button = _react2.screen.getByRole('button');
|
|
162
|
-
_context4.next = 1;
|
|
163
|
-
return user.click(button);
|
|
164
|
-
case 1:
|
|
165
|
-
customOption = _react2.screen.getByText('Custom');
|
|
166
|
-
_context4.next = 2;
|
|
167
|
-
return user.click(customOption);
|
|
168
|
-
case 2:
|
|
169
|
-
expect(onChange).toHaveBeenCalledWith('custom');
|
|
170
|
-
case 3:
|
|
171
|
-
case "end":
|
|
172
|
-
return _context4.stop();
|
|
173
|
-
}
|
|
174
|
-
}, _callee4);
|
|
175
|
-
})));
|
|
176
|
-
it('closes menu after selection', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee5() {
|
|
177
|
-
var user, button, noFeedbackOption;
|
|
178
|
-
return _regenerator["default"].wrap(function (_context5) {
|
|
179
|
-
while (1) switch (_context5.prev = _context5.next) {
|
|
180
|
-
case 0:
|
|
181
|
-
user = _userEvent["default"].setup();
|
|
182
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_feedbackMenu["default"], {
|
|
183
|
-
onChange: onChange,
|
|
184
|
-
value: {
|
|
185
|
-
type: 'default'
|
|
186
|
-
},
|
|
187
|
-
classes: {}
|
|
188
|
-
}));
|
|
189
|
-
button = _react2.screen.getByRole('button');
|
|
190
|
-
_context5.next = 1;
|
|
191
|
-
return user.click(button);
|
|
192
|
-
case 1:
|
|
193
|
-
expect(_react2.screen.getByText('No Feedback')).toBeInTheDocument();
|
|
194
|
-
noFeedbackOption = _react2.screen.getByText('No Feedback');
|
|
195
|
-
_context5.next = 2;
|
|
196
|
-
return user.click(noFeedbackOption);
|
|
197
|
-
case 2:
|
|
198
|
-
// Menu should close after selection
|
|
199
|
-
expect(onChange).toHaveBeenCalledWith('none');
|
|
200
|
-
case 3:
|
|
201
|
-
case "end":
|
|
202
|
-
return _context5.stop();
|
|
203
|
-
}
|
|
204
|
-
}, _callee5);
|
|
205
|
-
})));
|
|
206
|
-
});
|
|
207
|
-
describe('feedback type indicators', function () {
|
|
208
|
-
it('shows correct icon color for default feedback', function () {
|
|
209
|
-
var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_feedbackMenu["default"], {
|
|
210
|
-
onChange: onChange,
|
|
211
|
-
value: {
|
|
212
|
-
type: 'default'
|
|
213
|
-
},
|
|
214
|
-
classes: {}
|
|
215
|
-
})),
|
|
216
|
-
container = _render2.container;
|
|
217
|
-
// Icon should be present with primary color
|
|
218
|
-
expect(container.querySelector('svg')).toBeInTheDocument();
|
|
219
|
-
});
|
|
220
|
-
it('shows correct icon color for custom feedback', function () {
|
|
221
|
-
var _render3 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_feedbackMenu["default"], {
|
|
222
|
-
onChange: onChange,
|
|
223
|
-
value: {
|
|
224
|
-
type: 'custom'
|
|
225
|
-
},
|
|
226
|
-
classes: {}
|
|
227
|
-
})),
|
|
228
|
-
container = _render3.container;
|
|
229
|
-
// Icon should be present with primary color
|
|
230
|
-
expect(container.querySelector('svg')).toBeInTheDocument();
|
|
231
|
-
});
|
|
232
|
-
it('shows correct icon color for disabled feedback', function () {
|
|
233
|
-
var _render4 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_feedbackMenu["default"], {
|
|
234
|
-
onChange: onChange,
|
|
235
|
-
value: {
|
|
236
|
-
type: 'none'
|
|
237
|
-
},
|
|
238
|
-
classes: {}
|
|
239
|
-
})),
|
|
240
|
-
container = _render4.container;
|
|
241
|
-
// Icon should be present with disabled color
|
|
242
|
-
expect(container.querySelector('svg')).toBeInTheDocument();
|
|
243
|
-
});
|
|
244
|
-
});
|
|
245
|
-
describe('aria labels', function () {
|
|
246
|
-
it('has aria-label on button for default feedback', function () {
|
|
247
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_feedbackMenu["default"], {
|
|
248
|
-
onChange: onChange,
|
|
249
|
-
value: {
|
|
250
|
-
type: 'default'
|
|
251
|
-
},
|
|
252
|
-
classes: {}
|
|
253
|
-
}));
|
|
254
|
-
var button = _react2.screen.getByRole('button', {
|
|
255
|
-
name: /Default Feedback/i
|
|
256
|
-
});
|
|
257
|
-
expect(button).toBeInTheDocument();
|
|
258
|
-
});
|
|
259
|
-
it('has aria-label on button for custom feedback', function () {
|
|
260
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_feedbackMenu["default"], {
|
|
261
|
-
onChange: onChange,
|
|
262
|
-
value: {
|
|
263
|
-
type: 'custom'
|
|
264
|
-
},
|
|
265
|
-
classes: {}
|
|
266
|
-
}));
|
|
267
|
-
var button = _react2.screen.getByRole('button', {
|
|
268
|
-
name: /Custom Feedback/i
|
|
269
|
-
});
|
|
270
|
-
expect(button).toBeInTheDocument();
|
|
271
|
-
});
|
|
272
|
-
it('has aria-label on button for disabled feedback', function () {
|
|
273
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_feedbackMenu["default"], {
|
|
274
|
-
onChange: onChange,
|
|
275
|
-
value: {
|
|
276
|
-
type: 'none'
|
|
277
|
-
},
|
|
278
|
-
classes: {}
|
|
279
|
-
}));
|
|
280
|
-
var button = _react2.screen.getByRole('button', {
|
|
281
|
-
name: /Feedback disabled/i
|
|
282
|
-
});
|
|
283
|
-
expect(button).toBeInTheDocument();
|
|
284
|
-
});
|
|
285
|
-
});
|
|
286
|
-
});
|
|
287
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfdXNlckV2ZW50IiwiX2ZlZWRiYWNrTWVudSIsImRlc2NyaWJlIiwib25DaGFuZ2UiLCJqZXN0IiwiZm4iLCJiZWZvcmVFYWNoIiwibW9ja0NsZWFyIiwiaXQiLCJfcmVuZGVyIiwicmVuZGVyIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzZXMiLCJjb250YWluZXIiLCJleHBlY3QiLCJmaXJzdENoaWxkIiwidG9CZUluVGhlRG9jdW1lbnQiLCJ2YWx1ZSIsInR5cGUiLCJzY3JlZW4iLCJnZXRCeVJvbGUiLCJidXR0b24iLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsInVzZXIiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInVzZXJFdmVudCIsInNldHVwIiwiY2xpY2siLCJnZXRCeVRleHQiLCJzdG9wIiwiX2NhbGxlZTIiLCJub0ZlZWRiYWNrT3B0aW9uIiwiX2NvbnRleHQyIiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJfY2FsbGVlMyIsImRlZmF1bHRPcHRpb24iLCJfY29udGV4dDMiLCJfY2FsbGVlNCIsImN1c3RvbU9wdGlvbiIsIl9jb250ZXh0NCIsIl9jYWxsZWU1IiwiX2NvbnRleHQ1IiwiX3JlbmRlcjIiLCJxdWVyeVNlbGVjdG9yIiwiX3JlbmRlcjMiLCJfcmVuZGVyNCIsIm5hbWUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2hvaWNlLWNvbmZpZ3VyYXRpb24vX190ZXN0c19fL2ZlZWRiYWNrLW1lbnUudGVzdC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJlbmRlciwgc2NyZWVuIH0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5pbXBvcnQgdXNlckV2ZW50IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvdXNlci1ldmVudCc7XG5pbXBvcnQgRmVlZGJhY2tNZW51IGZyb20gJy4uL2ZlZWRiYWNrLW1lbnUnO1xuXG5kZXNjcmliZSgnZmVlZGJhY2stbWVudScsICgpID0+IHtcbiAgY29uc3Qgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgb25DaGFuZ2UubW9ja0NsZWFyKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZW5kZXJpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMgZmVlZGJhY2sgbWVudSB3aXRoIGRlZmF1bHQgb3B0aW9ucycsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPEZlZWRiYWNrTWVudSBvbkNoYW5nZT17b25DaGFuZ2V9IGNsYXNzZXM9e3t9fSAvPik7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyBtZW51IHdpdGggZmVlZGJhY2sgdHlwZSBzZWxlY3RvcicsICgpID0+IHtcbiAgICAgIHJlbmRlcig8RmVlZGJhY2tNZW51IG9uQ2hhbmdlPXtvbkNoYW5nZX0gdmFsdWU9e3sgdHlwZTogJ2RlZmF1bHQnIH19IGNsYXNzZXM9e3t9fSAvPik7XG4gICAgICAvLyBNZW51IGJ1dHRvbiBzaG91bGQgYmUgaW4gdGhlIGRvY3VtZW50XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5Um9sZSgnYnV0dG9uJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIG5vIGZlZWRiYWNrIHR5cGUnLCAoKSA9PiB7XG4gICAgICByZW5kZXIoPEZlZWRiYWNrTWVudSBvbkNoYW5nZT17b25DaGFuZ2V9IHZhbHVlPXt7IHR5cGU6ICdub25lJyB9fSBjbGFzc2VzPXt7fX0gLz4pO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVJvbGUoJ2J1dHRvbicpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgd2l0aCBjdXN0b20gZmVlZGJhY2sgdHlwZScsICgpID0+IHtcbiAgICAgIHJlbmRlcig8RmVlZGJhY2tNZW51IG9uQ2hhbmdlPXtvbkNoYW5nZX0gdmFsdWU9e3sgdHlwZTogJ2N1c3RvbScgfX0gY2xhc3Nlcz17e319IC8+KTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlSb2xlKCdidXR0b24nKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIGZlZWRiYWNrIGljb24gYnV0dG9uJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKDxGZWVkYmFja01lbnUgb25DaGFuZ2U9e29uQ2hhbmdlfSBjbGFzc2VzPXt7fX0gLz4pO1xuICAgICAgY29uc3QgYnV0dG9uID0gc2NyZWVuLmdldEJ5Um9sZSgnYnV0dG9uJyk7XG4gICAgICBleHBlY3QoYnV0dG9uKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndXNlciBpbnRlcmFjdGlvbnMnLCAoKSA9PiB7XG4gICAgaXQoJ29wZW5zIG1lbnUgd2hlbiBidXR0b24gaXMgY2xpY2tlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSB1c2VyRXZlbnQuc2V0dXAoKTtcbiAgICAgIHJlbmRlcig8RmVlZGJhY2tNZW51IG9uQ2hhbmdlPXtvbkNoYW5nZX0gdmFsdWU9e3sgdHlwZTogJ2RlZmF1bHQnIH19IGNsYXNzZXM9e3t9fSAvPik7XG5cbiAgICAgIGNvbnN0IGJ1dHRvbiA9IHNjcmVlbi5nZXRCeVJvbGUoJ2J1dHRvbicpO1xuICAgICAgYXdhaXQgdXNlci5jbGljayhidXR0b24pO1xuXG4gICAgICAvLyBNZW51IGl0ZW1zIHNob3VsZCBhcHBlYXJcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCdObyBGZWVkYmFjaycpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ0RlZmF1bHQnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCdDdXN0b20nKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdjYWxscyBvbkNoYW5nZSB3aXRoIFwibm9uZVwiIHdoZW4gTm8gRmVlZGJhY2sgaXMgc2VsZWN0ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gdXNlckV2ZW50LnNldHVwKCk7XG4gICAgICByZW5kZXIoPEZlZWRiYWNrTWVudSBvbkNoYW5nZT17b25DaGFuZ2V9IHZhbHVlPXt7IHR5cGU6ICdkZWZhdWx0JyB9fSBjbGFzc2VzPXt7fX0gLz4pO1xuXG4gICAgICBjb25zdCBidXR0b24gPSBzY3JlZW4uZ2V0QnlSb2xlKCdidXR0b24nKTtcbiAgICAgIGF3YWl0IHVzZXIuY2xpY2soYnV0dG9uKTtcblxuICAgICAgY29uc3Qgbm9GZWVkYmFja09wdGlvbiA9IHNjcmVlbi5nZXRCeVRleHQoJ05vIEZlZWRiYWNrJyk7XG4gICAgICBhd2FpdCB1c2VyLmNsaWNrKG5vRmVlZGJhY2tPcHRpb24pO1xuXG4gICAgICBleHBlY3Qob25DaGFuZ2UpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdub25lJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnY2FsbHMgb25DaGFuZ2Ugd2l0aCBcImRlZmF1bHRcIiB3aGVuIERlZmF1bHQgaXMgc2VsZWN0ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gdXNlckV2ZW50LnNldHVwKCk7XG4gICAgICByZW5kZXIoPEZlZWRiYWNrTWVudSBvbkNoYW5nZT17b25DaGFuZ2V9IHZhbHVlPXt7IHR5cGU6ICdub25lJyB9fSBjbGFzc2VzPXt7fX0gLz4pO1xuXG4gICAgICBjb25zdCBidXR0b24gPSBzY3JlZW4uZ2V0QnlSb2xlKCdidXR0b24nKTtcbiAgICAgIGF3YWl0IHVzZXIuY2xpY2soYnV0dG9uKTtcblxuICAgICAgY29uc3QgZGVmYXVsdE9wdGlvbiA9IHNjcmVlbi5nZXRCeVRleHQoJ0RlZmF1bHQnKTtcbiAgICAgIGF3YWl0IHVzZXIuY2xpY2soZGVmYXVsdE9wdGlvbik7XG5cbiAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ2RlZmF1bHQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdjYWxscyBvbkNoYW5nZSB3aXRoIFwiY3VzdG9tXCIgd2hlbiBDdXN0b20gaXMgc2VsZWN0ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gdXNlckV2ZW50LnNldHVwKCk7XG4gICAgICByZW5kZXIoPEZlZWRiYWNrTWVudSBvbkNoYW5nZT17b25DaGFuZ2V9IHZhbHVlPXt7IHR5cGU6ICdub25lJyB9fSBjbGFzc2VzPXt7fX0gLz4pO1xuXG4gICAgICBjb25zdCBidXR0b24gPSBzY3JlZW4uZ2V0QnlSb2xlKCdidXR0b24nKTtcbiAgICAgIGF3YWl0IHVzZXIuY2xpY2soYnV0dG9uKTtcblxuICAgICAgY29uc3QgY3VzdG9tT3B0aW9uID0gc2NyZWVuLmdldEJ5VGV4dCgnQ3VzdG9tJyk7XG4gICAgICBhd2FpdCB1c2VyLmNsaWNrKGN1c3RvbU9wdGlvbik7XG5cbiAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ2N1c3RvbScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Nsb3NlcyBtZW51IGFmdGVyIHNlbGVjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSB1c2VyRXZlbnQuc2V0dXAoKTtcbiAgICAgIHJlbmRlcig8RmVlZGJhY2tNZW51IG9uQ2hhbmdlPXtvbkNoYW5nZX0gdmFsdWU9e3sgdHlwZTogJ2RlZmF1bHQnIH19IGNsYXNzZXM9e3t9fSAvPik7XG5cbiAgICAgIGNvbnN0IGJ1dHRvbiA9IHNjcmVlbi5nZXRCeVJvbGUoJ2J1dHRvbicpO1xuICAgICAgYXdhaXQgdXNlci5jbGljayhidXR0b24pO1xuXG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnTm8gRmVlZGJhY2snKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcblxuICAgICAgY29uc3Qgbm9GZWVkYmFja09wdGlvbiA9IHNjcmVlbi5nZXRCeVRleHQoJ05vIEZlZWRiYWNrJyk7XG4gICAgICBhd2FpdCB1c2VyLmNsaWNrKG5vRmVlZGJhY2tPcHRpb24pO1xuXG4gICAgICAvLyBNZW51IHNob3VsZCBjbG9zZSBhZnRlciBzZWxlY3Rpb25cbiAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ25vbmUnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ZlZWRiYWNrIHR5cGUgaW5kaWNhdG9ycycsICgpID0+IHtcbiAgICBpdCgnc2hvd3MgY29ycmVjdCBpY29uIGNvbG9yIGZvciBkZWZhdWx0IGZlZWRiYWNrJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8RmVlZGJhY2tNZW51IG9uQ2hhbmdlPXtvbkNoYW5nZX0gdmFsdWU9e3sgdHlwZTogJ2RlZmF1bHQnIH19IGNsYXNzZXM9e3t9fSAvPik7XG4gICAgICAvLyBJY29uIHNob3VsZCBiZSBwcmVzZW50IHdpdGggcHJpbWFyeSBjb2xvclxuICAgICAgZXhwZWN0KGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdzdmcnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG93cyBjb3JyZWN0IGljb24gY29sb3IgZm9yIGN1c3RvbSBmZWVkYmFjaycsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPEZlZWRiYWNrTWVudSBvbkNoYW5nZT17b25DaGFuZ2V9IHZhbHVlPXt7IHR5cGU6ICdjdXN0b20nIH19IGNsYXNzZXM9e3t9fSAvPik7XG4gICAgICAvLyBJY29uIHNob3VsZCBiZSBwcmVzZW50IHdpdGggcHJpbWFyeSBjb2xvclxuICAgICAgZXhwZWN0KGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdzdmcnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG93cyBjb3JyZWN0IGljb24gY29sb3IgZm9yIGRpc2FibGVkIGZlZWRiYWNrJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8RmVlZGJhY2tNZW51IG9uQ2hhbmdlPXtvbkNoYW5nZX0gdmFsdWU9e3sgdHlwZTogJ25vbmUnIH19IGNsYXNzZXM9e3t9fSAvPik7XG4gICAgICAvLyBJY29uIHNob3VsZCBiZSBwcmVzZW50IHdpdGggZGlzYWJsZWQgY29sb3JcbiAgICAgIGV4cGVjdChjb250YWluZXIucXVlcnlTZWxlY3Rvcignc3ZnJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdhcmlhIGxhYmVscycsICgpID0+IHtcbiAgICBpdCgnaGFzIGFyaWEtbGFiZWwgb24gYnV0dG9uIGZvciBkZWZhdWx0IGZlZWRiYWNrJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKDxGZWVkYmFja01lbnUgb25DaGFuZ2U9e29uQ2hhbmdlfSB2YWx1ZT17eyB0eXBlOiAnZGVmYXVsdCcgfX0gY2xhc3Nlcz17e319IC8+KTtcbiAgICAgIGNvbnN0IGJ1dHRvbiA9IHNjcmVlbi5nZXRCeVJvbGUoJ2J1dHRvbicsIHsgbmFtZTogL0RlZmF1bHQgRmVlZGJhY2svaSB9KTtcbiAgICAgIGV4cGVjdChidXR0b24pLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFzIGFyaWEtbGFiZWwgb24gYnV0dG9uIGZvciBjdXN0b20gZmVlZGJhY2snLCAoKSA9PiB7XG4gICAgICByZW5kZXIoPEZlZWRiYWNrTWVudSBvbkNoYW5nZT17b25DaGFuZ2V9IHZhbHVlPXt7IHR5cGU6ICdjdXN0b20nIH19IGNsYXNzZXM9e3t9fSAvPik7XG4gICAgICBjb25zdCBidXR0b24gPSBzY3JlZW4uZ2V0QnlSb2xlKCdidXR0b24nLCB7IG5hbWU6IC9DdXN0b20gRmVlZGJhY2svaSB9KTtcbiAgICAgIGV4cGVjdChidXR0b24pLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFzIGFyaWEtbGFiZWwgb24gYnV0dG9uIGZvciBkaXNhYmxlZCBmZWVkYmFjaycsICgpID0+IHtcbiAgICAgIHJlbmRlcig8RmVlZGJhY2tNZW51IG9uQ2hhbmdlPXtvbkNoYW5nZX0gdmFsdWU9e3sgdHlwZTogJ25vbmUnIH19IGNsYXNzZXM9e3t9fSAvPik7XG4gICAgICBjb25zdCBidXR0b24gPSBzY3JlZW4uZ2V0QnlSb2xlKCdidXR0b24nLCB7IG5hbWU6IC9GZWVkYmFjayBkaXNhYmxlZC9pIH0pO1xuICAgICAgZXhwZWN0KGJ1dHRvbikudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxVQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxhQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFFQUksUUFBUSxDQUFDLGVBQWUsRUFBRSxZQUFNO0VBQzlCLElBQU1DLFFBQVEsR0FBR0MsSUFBSSxDQUFDQyxFQUFFLENBQUMsQ0FBQztFQUUxQkMsVUFBVSxDQUFDLFlBQU07SUFDZkgsUUFBUSxDQUFDSSxTQUFTLENBQUMsQ0FBQztFQUN0QixDQUFDLENBQUM7RUFFRkwsUUFBUSxDQUFDLFdBQVcsRUFBRSxZQUFNO0lBQzFCTSxFQUFFLENBQUMsNENBQTRDLEVBQUUsWUFBTTtNQUNyRCxJQUFBQyxPQUFBLEdBQXNCLElBQUFDLGNBQU0sZUFBQ2QsTUFBQSxZQUFBZSxhQUFBLENBQUNWLGFBQUEsV0FBWTtVQUFDRSxRQUFRLEVBQUVBLFFBQVM7VUFBQ1MsT0FB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
|