@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.
Files changed (58) hide show
  1. package/CHANGELOG.md +80 -28
  2. package/LICENSE.md +5 -0
  3. package/lib/alert-dialog.js +1 -1
  4. package/lib/checkbox.js +1 -1
  5. package/lib/choice-configuration/feedback-menu.js +1 -1
  6. package/lib/choice-configuration/index.js +1 -1
  7. package/lib/choice-utils.js +1 -1
  8. package/lib/feedback-config/feedback-selector.js +1 -1
  9. package/lib/feedback-config/group.js +1 -1
  10. package/lib/feedback-config/index.js +1 -1
  11. package/lib/form-section.js +1 -1
  12. package/lib/help.js +1 -1
  13. package/lib/index.js +1 -1
  14. package/lib/input.js +1 -1
  15. package/lib/inputs.js +1 -1
  16. package/lib/langs.js +1 -1
  17. package/lib/layout/config-layout.js +1 -1
  18. package/lib/layout/index.js +1 -1
  19. package/lib/layout/layout-contents.js +1 -1
  20. package/lib/layout/settings-box.js +1 -1
  21. package/lib/mui-box/index.js +1 -1
  22. package/lib/number-text-field-custom.js +1 -1
  23. package/lib/number-text-field.js +2 -2
  24. package/lib/number-text-field.js.map +1 -1
  25. package/lib/radio-with-label.js +1 -1
  26. package/lib/settings/display-size.js +1 -1
  27. package/lib/settings/index.js +1 -1
  28. package/lib/settings/panel.js +1 -1
  29. package/lib/settings/settings-radio-label.js +1 -1
  30. package/lib/settings/toggle.js +1 -1
  31. package/lib/tabs/index.js +1 -1
  32. package/lib/tags-input/index.js +1 -1
  33. package/lib/two-choice.js +1 -1
  34. package/lib/with-stateful-model.js +1 -1
  35. package/package.json +5 -5
  36. package/src/number-text-field.jsx +1 -1
  37. package/lib/__tests__/alert-dialog.test.js +0 -262
  38. package/lib/__tests__/checkbox.test.js +0 -227
  39. package/lib/__tests__/choice-utils.test.js +0 -14
  40. package/lib/__tests__/form-section.test.js +0 -252
  41. package/lib/__tests__/help.test.js +0 -270
  42. package/lib/__tests__/input.test.js +0 -268
  43. package/lib/__tests__/langs.test.js +0 -541
  44. package/lib/__tests__/number-text-field-custom.test.js +0 -362
  45. package/lib/__tests__/number-text-field.test.js +0 -421
  46. package/lib/__tests__/radio-with-label.test.js +0 -233
  47. package/lib/__tests__/settings-panel.test.js +0 -184
  48. package/lib/__tests__/settings.test.js +0 -653
  49. package/lib/__tests__/tabs.test.js +0 -211
  50. package/lib/__tests__/two-choice.test.js +0 -124
  51. package/lib/__tests__/with-stateful-model.test.js +0 -221
  52. package/lib/choice-configuration/__tests__/feedback-menu.test.js +0 -287
  53. package/lib/choice-configuration/__tests__/index.test.js +0 -253
  54. package/lib/feedback-config/__tests__/feedback-config.test.js +0 -201
  55. package/lib/feedback-config/__tests__/feedback-selector.test.js +0 -177
  56. package/lib/layout/__tests__/config.layout.test.js +0 -70
  57. package/lib/layout/__tests__/layout-content.test.js +0 -6
  58. package/lib/tags-input/__tests__/index.test.js +0 -183
@@ -1,253 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
5
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
6
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
7
- var _react = _interopRequireDefault(require("react"));
8
- var _react2 = require("@testing-library/react");
9
- var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
10
- var _index = require("../index");
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
- jest.mock('@pie-lib/editable-html-tip-tap', function () {
14
- return {
15
- __esModule: true,
16
- "default": function _default(_ref) {
17
- var markup = _ref.markup,
18
- _onChange = _ref.onChange,
19
- disabled = _ref.disabled;
20
- return /*#__PURE__*/_react["default"].createElement("textarea", {
21
- "data-testid": "editable-html",
22
- defaultValue: markup || '',
23
- onChange: function onChange(e) {
24
- return _onChange(e.target.value);
25
- },
26
- disabled: disabled
27
- });
28
- }
29
- };
30
- });
31
- var defaultFeedback = {
32
- correct: 'Correct',
33
- incorrect: 'Incorrect'
34
- };
35
- var data = {
36
- correct: true,
37
- value: 'foo',
38
- label: 'Foo',
39
- feedback: {
40
- type: 'custom'
41
- }
42
- };
43
- var classes = {
44
- choiceConfiguration: 'choiceConfiguration'
45
- };
46
- describe('ChoiceConfiguration', function () {
47
- var onChange = jest.fn();
48
- beforeEach(function () {
49
- onChange.mockClear();
50
- });
51
- describe('rendering', function () {
52
- it('renders correctly with default props', function () {
53
- var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.ChoiceConfiguration, {
54
- classes: classes,
55
- defaultFeedback: defaultFeedback,
56
- data: data,
57
- onChange: onChange
58
- })),
59
- container = _render.container;
60
- expect(container.firstChild).toBeInTheDocument();
61
- });
62
- it('renders with checked state', function () {
63
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.ChoiceConfiguration, {
64
- classes: classes,
65
- defaultFeedback: defaultFeedback,
66
- data: data,
67
- onChange: onChange,
68
- mode: "checkbox"
69
- }));
70
- var checkbox = _react2.screen.getByRole('checkbox');
71
- expect(checkbox).toBeChecked();
72
- });
73
- it('renders without feedback when allowFeedBack is false', function () {
74
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.ChoiceConfiguration, {
75
- allowFeedBack: false,
76
- classes: classes,
77
- defaultFeedback: defaultFeedback,
78
- data: data,
79
- onChange: onChange
80
- }));
81
- expect(_react2.screen.queryByRole('button', {
82
- name: /feedback/i
83
- })).not.toBeInTheDocument();
84
- });
85
- it('renders without delete button when allowDelete is false', function () {
86
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.ChoiceConfiguration, {
87
- allowDelete: false,
88
- classes: classes,
89
- defaultFeedback: defaultFeedback,
90
- data: data,
91
- onChange: onChange
92
- }));
93
- expect(_react2.screen.queryByRole('button', {
94
- name: /delete/i
95
- })).not.toBeInTheDocument();
96
- });
97
- });
98
- describe('user interactions', function () {
99
- it('calls onChange when label is edited', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
100
- var user, editableHtmlElements, editableHtml;
101
- return _regenerator["default"].wrap(function (_context) {
102
- while (1) switch (_context.prev = _context.next) {
103
- case 0:
104
- user = _userEvent["default"].setup();
105
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.ChoiceConfiguration, {
106
- classes: classes,
107
- defaultFeedback: defaultFeedback,
108
- data: data,
109
- onChange: onChange
110
- }));
111
- editableHtmlElements = _react2.screen.getAllByTestId('editable-html');
112
- editableHtml = editableHtmlElements[0];
113
- _context.next = 1;
114
- return user.clear(editableHtml);
115
- case 1:
116
- _context.next = 2;
117
- return user.type(editableHtml, 'new label');
118
- case 2:
119
- expect(onChange).toHaveBeenCalled();
120
- expect(onChange).toHaveBeenCalledWith(expect.objectContaining({
121
- label: expect.stringContaining('new label')
122
- }));
123
- case 3:
124
- case "end":
125
- return _context.stop();
126
- }
127
- }, _callee);
128
- })));
129
- it('calls onChange when checkbox is toggled', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
130
- var user, checkbox;
131
- return _regenerator["default"].wrap(function (_context2) {
132
- while (1) switch (_context2.prev = _context2.next) {
133
- case 0:
134
- user = _userEvent["default"].setup();
135
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.ChoiceConfiguration, {
136
- classes: classes,
137
- defaultFeedback: defaultFeedback,
138
- data: _objectSpread(_objectSpread({}, data), {}, {
139
- correct: false
140
- }),
141
- onChange: onChange,
142
- mode: "checkbox"
143
- }));
144
- checkbox = _react2.screen.getByRole('checkbox');
145
- _context2.next = 1;
146
- return user.click(checkbox);
147
- case 1:
148
- expect(onChange).toHaveBeenCalledWith(expect.objectContaining({
149
- correct: true
150
- }));
151
- case 2:
152
- case "end":
153
- return _context2.stop();
154
- }
155
- }, _callee2);
156
- })));
157
- });
158
- describe('prop variations', function () {
159
- it('renders with radio mode instead of checkbox', function () {
160
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.ChoiceConfiguration, {
161
- classes: classes,
162
- defaultFeedback: defaultFeedback,
163
- data: data,
164
- onChange: onChange,
165
- mode: "radio"
166
- }));
167
- var radio = _react2.screen.getByRole('radio');
168
- expect(radio).toBeInTheDocument();
169
- });
170
- it('renders with disabled state', function () {
171
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.ChoiceConfiguration, {
172
- classes: classes,
173
- defaultFeedback: defaultFeedback,
174
- data: data,
175
- onChange: onChange,
176
- disabled: true,
177
- mode: "checkbox"
178
- }));
179
- var checkbox = _react2.screen.getByRole('checkbox');
180
- expect(checkbox).toBeInTheDocument();
181
- });
182
- it('renders with custom feedback type', function () {
183
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.ChoiceConfiguration, {
184
- classes: classes,
185
- defaultFeedback: defaultFeedback,
186
- data: _objectSpread(_objectSpread({}, data), {}, {
187
- feedback: {
188
- type: 'custom'
189
- }
190
- }),
191
- onChange: onChange,
192
- mode: "checkbox"
193
- }));
194
- var editableElements = _react2.screen.getAllByTestId('editable-html');
195
- expect(editableElements.length).toBeGreaterThan(0);
196
- });
197
- it('renders with incorrect answer', function () {
198
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.ChoiceConfiguration, {
199
- classes: classes,
200
- defaultFeedback: defaultFeedback,
201
- data: _objectSpread(_objectSpread({}, data), {}, {
202
- correct: false
203
- }),
204
- onChange: onChange,
205
- mode: "checkbox"
206
- }));
207
- var checkbox = _react2.screen.getByRole('checkbox');
208
- expect(checkbox).not.toBeChecked();
209
- });
210
- });
211
- describe('edge cases', function () {
212
- it('handles data with empty label', function () {
213
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.ChoiceConfiguration, {
214
- classes: classes,
215
- defaultFeedback: defaultFeedback,
216
- data: _objectSpread(_objectSpread({}, data), {}, {
217
- label: ''
218
- }),
219
- onChange: onChange
220
- }));
221
- var editableElements = _react2.screen.getAllByTestId('editable-html');
222
- expect(editableElements.length).toBeGreaterThan(0);
223
- });
224
- it('handles multiple feedback types', function () {
225
- var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.ChoiceConfiguration, {
226
- classes: classes,
227
- defaultFeedback: defaultFeedback,
228
- data: _objectSpread(_objectSpread({}, data), {}, {
229
- feedback: {
230
- type: 'default'
231
- }
232
- }),
233
- onChange: onChange
234
- })),
235
- rerender = _render2.rerender;
236
- var editableElements = _react2.screen.getAllByTestId('editable-html');
237
- expect(editableElements.length).toBeGreaterThan(0);
238
- rerender(/*#__PURE__*/_react["default"].createElement(_index.ChoiceConfiguration, {
239
- classes: classes,
240
- defaultFeedback: defaultFeedback,
241
- data: _objectSpread(_objectSpread({}, data), {}, {
242
- feedback: {
243
- type: 'custom'
244
- }
245
- }),
246
- onChange: onChange
247
- }));
248
- editableElements = _react2.screen.getAllByTestId('editable-html');
249
- expect(editableElements.length).toBeGreaterThan(0);
250
- });
251
- });
252
- });
253
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfdXNlckV2ZW50IiwiX2luZGV4Iiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJqZXN0IiwibW9jayIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiX3JlZiIsIm1hcmt1cCIsIm9uQ2hhbmdlIiwiZGlzYWJsZWQiLCJjcmVhdGVFbGVtZW50IiwiZGVmYXVsdFZhbHVlIiwidGFyZ2V0IiwidmFsdWUiLCJkZWZhdWx0RmVlZGJhY2siLCJjb3JyZWN0IiwiaW5jb3JyZWN0IiwiZGF0YSIsImxhYmVsIiwiZmVlZGJhY2siLCJ0eXBlIiwiY2xhc3NlcyIsImNob2ljZUNvbmZpZ3VyYXRpb24iLCJkZXNjcmliZSIsImZuIiwiYmVmb3JlRWFjaCIsIm1vY2tDbGVhciIsIml0IiwiX3JlbmRlciIsInJlbmRlciIsIkNob2ljZUNvbmZpZ3VyYXRpb24iLCJjb250YWluZXIiLCJleHBlY3QiLCJmaXJzdENoaWxkIiwidG9CZUluVGhlRG9jdW1lbnQiLCJtb2RlIiwiY2hlY2tib3giLCJzY3JlZW4iLCJnZXRCeVJvbGUiLCJ0b0JlQ2hlY2tlZCIsImFsbG93RmVlZEJhY2siLCJxdWVyeUJ5Um9sZSIsIm5hbWUiLCJub3QiLCJhbGxvd0RlbGV0ZSIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwidXNlciIsImVkaXRhYmxlSHRtbEVsZW1lbnRzIiwiZWRpdGFibGVIdG1sIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJ1c2VyRXZlbnQiLCJzZXR1cCIsImdldEFsbEJ5VGVzdElkIiwiY2xlYXIiLCJ0b0hhdmVCZWVuQ2FsbGVkIiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJvYmplY3RDb250YWluaW5nIiwic3RyaW5nQ29udGFpbmluZyIsInN0b3AiLCJfY2FsbGVlMiIsIl9jb250ZXh0MiIsImNsaWNrIiwicmFkaW8iLCJlZGl0YWJsZUVsZW1lbnRzIiwidG9CZUdyZWF0ZXJUaGFuIiwiX3JlbmRlcjIiLCJyZXJlbmRlciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jaG9pY2UtY29uZmlndXJhdGlvbi9fX3Rlc3RzX18vaW5kZXgudGVzdC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJlbmRlciwgc2NyZWVuIH0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5pbXBvcnQgdXNlckV2ZW50IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvdXNlci1ldmVudCc7XG5pbXBvcnQgeyBDaG9pY2VDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vaW5kZXgnO1xuXG5qZXN0Lm1vY2soJ0BwaWUtbGliL2VkaXRhYmxlLWh0bWwtdGlwLXRhcCcsICgpID0+ICh7XG4gIF9fZXNNb2R1bGU6IHRydWUsXG4gIGRlZmF1bHQ6ICh7IG1hcmt1cCwgb25DaGFuZ2UsIGRpc2FibGVkIH0pID0+IChcbiAgICA8dGV4dGFyZWFcbiAgICAgIGRhdGEtdGVzdGlkPVwiZWRpdGFibGUtaHRtbFwiXG4gICAgICBkZWZhdWx0VmFsdWU9e21hcmt1cCB8fCAnJ31cbiAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gb25DaGFuZ2UoZS50YXJnZXQudmFsdWUpfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgIC8+XG4gICksXG59KSk7XG5cbmNvbnN0IGRlZmF1bHRGZWVkYmFjayA9IHtcbiAgY29ycmVjdDogJ0NvcnJlY3QnLFxuICBpbmNvcnJlY3Q6ICdJbmNvcnJlY3QnLFxufTtcblxuY29uc3QgZGF0YSA9IHtcbiAgY29ycmVjdDogdHJ1ZSxcbiAgdmFsdWU6ICdmb28nLFxuICBsYWJlbDogJ0ZvbycsXG4gIGZlZWRiYWNrOiB7XG4gICAgdHlwZTogJ2N1c3RvbScsXG4gIH0sXG59O1xuXG5jb25zdCBjbGFzc2VzID0ge1xuICBjaG9pY2VDb25maWd1cmF0aW9uOiAnY2hvaWNlQ29uZmlndXJhdGlvbicsXG59O1xuXG5kZXNjcmliZSgnQ2hvaWNlQ29uZmlndXJhdGlvbicsICgpID0+IHtcbiAgY29uc3Qgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgb25DaGFuZ2UubW9ja0NsZWFyKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZW5kZXJpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMgY29ycmVjdGx5IHdpdGggZGVmYXVsdCBwcm9wcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoXG4gICAgICAgIDxDaG9pY2VDb25maWd1cmF0aW9uIGNsYXNzZXM9e2NsYXNzZXN9IGRlZmF1bHRGZWVkYmFjaz17ZGVmYXVsdEZlZWRiYWNrfSBkYXRhPXtkYXRhfSBvbkNoYW5nZT17b25DaGFuZ2V9IC8+LFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGggY2hlY2tlZCBzdGF0ZScsICgpID0+IHtcbiAgICAgIHJlbmRlcihcbiAgICAgICAgPENob2ljZUNvbmZpZ3VyYXRpb25cbiAgICAgICAgICBjbGFzc2VzPXtjbGFzc2VzfVxuICAgICAgICAgIGRlZmF1bHRGZWVkYmFjaz17ZGVmYXVsdEZlZWRiYWNrfVxuICAgICAgICAgIGRhdGE9e2RhdGF9XG4gICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICAgIG1vZGU9XCJjaGVja2JveFwiXG4gICAgICAgIC8+LFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGNoZWNrYm94ID0gc2NyZWVuLmdldEJ5Um9sZSgnY2hlY2tib3gnKTtcbiAgICAgIGV4cGVjdChjaGVja2JveCkudG9CZUNoZWNrZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGhvdXQgZmVlZGJhY2sgd2hlbiBhbGxvd0ZlZWRCYWNrIGlzIGZhbHNlJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKFxuICAgICAgICA8Q2hvaWNlQ29uZmlndXJhdGlvblxuICAgICAgICAgIGFsbG93RmVlZEJhY2s9e2ZhbHNlfVxuICAgICAgICAgIGNsYXNzZXM9e2NsYXNzZXN9XG4gICAgICAgICAgZGVmYXVsdEZlZWRiYWNrPXtkZWZhdWx0RmVlZGJhY2t9XG4gICAgICAgICAgZGF0YT17ZGF0YX1cbiAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgIC8+LFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChzY3JlZW4ucXVlcnlCeVJvbGUoJ2J1dHRvbicsIHsgbmFtZTogL2ZlZWRiYWNrL2kgfSkpLm5vdC50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgd2l0aG91dCBkZWxldGUgYnV0dG9uIHdoZW4gYWxsb3dEZWxldGUgaXMgZmFsc2UnLCAoKSA9PiB7XG4gICAgICByZW5kZXIoXG4gICAgICAgIDxDaG9pY2VDb25maWd1cmF0aW9uXG4gICAgICAgICAgYWxsb3dEZWxldGU9e2ZhbHNlfVxuICAgICAgICAgIGNsYXNzZXM9e2NsYXNzZXN9XG4gICAgICAgICAgZGVmYXVsdEZlZWRiYWNrPXtkZWZhdWx0RmVlZGJhY2t9XG4gICAgICAgICAgZGF0YT17ZGF0YX1cbiAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgIC8+LFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChzY3JlZW4ucXVlcnlCeVJvbGUoJ2J1dHRvbicsIHsgbmFtZTogL2RlbGV0ZS9pIH0pKS5ub3QudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3VzZXIgaW50ZXJhY3Rpb25zJywgKCkgPT4ge1xuICAgIGl0KCdjYWxscyBvbkNoYW5nZSB3aGVuIGxhYmVsIGlzIGVkaXRlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSB1c2VyRXZlbnQuc2V0dXAoKTtcbiAgICAgIHJlbmRlcihcbiAgICAgICAgPENob2ljZUNvbmZpZ3VyYXRpb24gY2xhc3Nlcz17Y2xhc3Nlc30gZGVmYXVsdEZlZWRiYWNrPXtkZWZhdWx0RmVlZGJhY2t9IGRhdGE9e2RhdGF9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gLz4sXG4gICAgICApO1xuXG4gICAgICBjb25zdCBlZGl0YWJsZUh0bWxFbGVtZW50cyA9IHNjcmVlbi5nZXRBbGxCeVRlc3RJZCgnZWRpdGFibGUtaHRtbCcpO1xuICAgICAgY29uc3QgZWRpdGFibGVIdG1sID0gZWRpdGFibGVIdG1sRWxlbWVudHNbMF07XG4gICAgICBhd2FpdCB1c2VyLmNsZWFyKGVkaXRhYmxlSHRtbCk7XG4gICAgICBhd2FpdCB1c2VyLnR5cGUoZWRpdGFibGVIdG1sLCAnbmV3IGxhYmVsJyk7XG5cbiAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgIGxhYmVsOiBleHBlY3Quc3RyaW5nQ29udGFpbmluZygnbmV3IGxhYmVsJyksXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdjYWxscyBvbkNoYW5nZSB3aGVuIGNoZWNrYm94IGlzIHRvZ2dsZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gdXNlckV2ZW50LnNldHVwKCk7XG4gICAgICByZW5kZXIoXG4gICAgICAgIDxDaG9pY2VDb25maWd1cmF0aW9uXG4gICAgICAgICAgY2xhc3Nlcz17Y2xhc3Nlc31cbiAgICAgICAgICBkZWZhdWx0RmVlZGJhY2s9e2RlZmF1bHRGZWVkYmFja31cbiAgICAgICAgICBkYXRhPXt7IC4uLmRhdGEsIGNvcnJlY3Q6IGZhbHNlIH19XG4gICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICAgIG1vZGU9XCJjaGVja2JveFwiXG4gICAgICAgIC8+LFxuICAgICAgKTtcblxuICAgICAgY29uc3QgY2hlY2tib3ggPSBzY3JlZW4uZ2V0QnlSb2xlKCdjaGVja2JveCcpO1xuICAgICAgYXdhaXQgdXNlci5jbGljayhjaGVja2JveCk7XG5cbiAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAgIGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICBjb3JyZWN0OiB0cnVlLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwcm9wIHZhcmlhdGlvbnMnLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMgd2l0aCByYWRpbyBtb2RlIGluc3RlYWQgb2YgY2hlY2tib3gnLCAoKSA9PiB7XG4gICAgICByZW5kZXIoXG4gICAgICAgIDxDaG9pY2VDb25maWd1cmF0aW9uXG4gICAgICAgICAgY2xhc3Nlcz17Y2xhc3Nlc31cbiAgICAgICAgICBkZWZhdWx0RmVlZGJhY2s9e2RlZmF1bHRGZWVkYmFja31cbiAgICAgICAgICBkYXRhPXtkYXRhfVxuICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgICBtb2RlPVwicmFkaW9cIlxuICAgICAgICAvPixcbiAgICAgICk7XG4gICAgICBjb25zdCByYWRpbyA9IHNjcmVlbi5nZXRCeVJvbGUoJ3JhZGlvJyk7XG4gICAgICBleHBlY3QocmFkaW8pLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIGRpc2FibGVkIHN0YXRlJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKFxuICAgICAgICA8Q2hvaWNlQ29uZmlndXJhdGlvblxuICAgICAgICAgIGNsYXNzZXM9e2NsYXNzZXN9XG4gICAgICAgICAgZGVmYXVsdEZlZWRiYWNrPXtkZWZhdWx0RmVlZGJhY2t9XG4gICAgICAgICAgZGF0YT17ZGF0YX1cbiAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgICAgZGlzYWJsZWQ9e3RydWV9XG4gICAgICAgICAgbW9kZT1cImNoZWNrYm94XCJcbiAgICAgICAgLz4sXG4gICAgICApO1xuICAgICAgY29uc3QgY2hlY2tib3ggPSBzY3JlZW4uZ2V0QnlSb2xlKCdjaGVja2JveCcpO1xuICAgICAgZXhwZWN0KGNoZWNrYm94KS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgd2l0aCBjdXN0b20gZmVlZGJhY2sgdHlwZScsICgpID0+IHtcbiAgICAgIHJlbmRlcihcbiAgICAgICAgPENob2ljZUNvbmZpZ3VyYXRpb25cbiAgICAgICAgICBjbGFzc2VzPXtjbGFzc2VzfVxuICAgICAgICAgIGRlZmF1bHRGZWVkYmFjaz17ZGVmYXVsdEZlZWRiYWNrfVxuICAgICAgICAgIGRhdGE9e3sgLi4uZGF0YSwgZmVlZGJhY2s6IHsgdHlwZTogJ2N1c3RvbScgfSB9fVxuICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgICBtb2RlPVwiY2hlY2tib3hcIlxuICAgICAgICAvPixcbiAgICAgICk7XG4gICAgICBjb25zdCBlZGl0YWJsZUVsZW1lbnRzID0gc2NyZWVuLmdldEFsbEJ5VGVzdElkKCdlZGl0YWJsZS1odG1sJyk7XG4gICAgICBleHBlY3QoZWRpdGFibGVFbGVtZW50cy5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGggaW5jb3JyZWN0IGFuc3dlcicsICgpID0+IHtcbiAgICAgIHJlbmRlcihcbiAgICAgICAgPENob2ljZUNvbmZpZ3VyYXRpb25cbiAgICAgICAgICBjbGFzc2VzPXtjbGFzc2VzfVxuICAgICAgICAgIGRlZmF1bHRGZWVkYmFjaz17ZGVmYXVsdEZlZWRiYWNrfVxuICAgICAgICAgIGRhdGE9e3sgLi4uZGF0YSwgY29ycmVjdDogZmFsc2UgfX1cbiAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgICAgbW9kZT1cImNoZWNrYm94XCJcbiAgICAgICAgLz4sXG4gICAgICApO1xuICAgICAgY29uc3QgY2hlY2tib3ggPSBzY3JlZW4uZ2V0QnlSb2xlKCdjaGVja2JveCcpO1xuICAgICAgZXhwZWN0KGNoZWNrYm94KS5ub3QudG9CZUNoZWNrZWQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2VkZ2UgY2FzZXMnLCAoKSA9PiB7XG4gICAgaXQoJ2hhbmRsZXMgZGF0YSB3aXRoIGVtcHR5IGxhYmVsJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKFxuICAgICAgICA8Q2hvaWNlQ29uZmlndXJhdGlvblxuICAgICAgICAgIGNsYXNzZXM9e2NsYXNzZXN9XG4gICAgICAgICAgZGVmYXVsdEZlZWRiYWNrPXtkZWZhdWx0RmVlZGJhY2t9XG4gICAgICAgICAgZGF0YT17eyAuLi5kYXRhLCBsYWJlbDogJycgfX1cbiAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgIC8+LFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGVkaXRhYmxlRWxlbWVudHMgPSBzY3JlZW4uZ2V0QWxsQnlUZXN0SWQoJ2VkaXRhYmxlLWh0bWwnKTtcbiAgICAgIGV4cGVjdChlZGl0YWJsZUVsZW1lbnRzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgbXVsdGlwbGUgZmVlZGJhY2sgdHlwZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IHJlcmVuZGVyIH0gPSByZW5kZXIoXG4gICAgICAgIDxDaG9pY2VDb25maWd1cmF0aW9uXG4gICAgICAgICAgY2xhc3Nlcz17Y2xhc3Nlc31cbiAgICAgICAgICBkZWZhdWx0RmVlZGJhY2s9e2RlZmF1bHRGZWVkYmFja31cbiAgICAgICAgICBkYXRhPXt7IC4uLmRhdGEsIGZlZWRiYWNrOiB7IHR5cGU6ICdkZWZhdWx0JyB9IH19XG4gICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICAvPixcbiAgICAgICk7XG5cbiAgICAgIGxldCBlZGl0YWJsZUVsZW1lbnRzID0gc2NyZWVuLmdldEFsbEJ5VGVzdElkKCdlZGl0YWJsZS1odG1sJyk7XG4gICAgICBleHBlY3QoZWRpdGFibGVFbGVtZW50cy5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKTtcblxuICAgICAgcmVyZW5kZXIoXG4gICAgICAgIDxDaG9pY2VDb25maWd1cmF0aW9uXG4gICAgICAgICAgY2xhc3Nlcz17Y2xhc3Nlc31cbiAgICAgICAgICBkZWZhdWx0RmVlZGJhY2s9e2RlZmF1bHRGZWVkYmFja31cbiAgICAgICAgICBkYXRhPXt7IC4uLmRhdGEsIGZlZWRiYWNrOiB7IHR5cGU6ICdjdXN0b20nIH0gfX1cbiAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgIC8+LFxuICAgICAgKTtcblxuICAgICAgZWRpdGFibGVFbGVtZW50cyA9IHNjcmVlbi5nZXRBbGxCeVRlc3RJZCgnZWRpdGFibGUtaHRtbCcpO1xuICAgICAgZXhwZWN0KGVkaXRhYmxlRWxlbWVudHMubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFVBQUEsR0FBQUgsc0JBQUEs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
@@ -1,201 +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 _index = require("../index");
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
- // Mock FeedbackSelector to simplify testing
14
- jest.mock('../feedback-selector', function () {
15
- return function FeedbackSelector(_ref) {
16
- var label = _ref.label,
17
- feedback = _ref.feedback,
18
- _onChange = _ref.onChange;
19
- return /*#__PURE__*/_react["default"].createElement("div", {
20
- "data-testid": "feedback-selector"
21
- }, /*#__PURE__*/_react["default"].createElement("label", null, label), /*#__PURE__*/_react["default"].createElement("select", {
22
- "aria-label": label,
23
- value: feedback.type,
24
- onChange: function onChange(e) {
25
- return _onChange(_objectSpread(_objectSpread({}, feedback), {}, {
26
- type: e.target.value
27
- }));
28
- }
29
- }, /*#__PURE__*/_react["default"].createElement("option", {
30
- value: "default"
31
- }, "Default"), /*#__PURE__*/_react["default"].createElement("option", {
32
- value: "custom"
33
- }, "Custom"), /*#__PURE__*/_react["default"].createElement("option", {
34
- value: "none"
35
- }, "None")));
36
- };
37
- });
38
- describe('FeedbackConfig', function () {
39
- var onChange = jest.fn();
40
- beforeEach(function () {
41
- onChange.mockClear();
42
- });
43
- describe('rendering', function () {
44
- it('renders with default feedback types', function () {
45
- var feedback = (0, _index.buildDefaults)();
46
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.FeedbackConfig, {
47
- feedback: feedback,
48
- onChange: onChange
49
- }));
50
- expect(_react2.screen.getByText('Feedback')).toBeInTheDocument();
51
- expect(_react2.screen.getByText('If correct, show')).toBeInTheDocument();
52
- expect(_react2.screen.getByText('If partially correct, show')).toBeInTheDocument();
53
- expect(_react2.screen.getByText('If incorrect, show')).toBeInTheDocument();
54
- });
55
- it('renders all three feedback selectors by default', function () {
56
- var feedback = (0, _index.buildDefaults)();
57
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.FeedbackConfig, {
58
- feedback: feedback,
59
- onChange: onChange
60
- }));
61
- var selectors = _react2.screen.getAllByTestId('feedback-selector');
62
- expect(selectors).toHaveLength(3);
63
- });
64
- it('does not render partial feedback selector when allowPartial is false', function () {
65
- var feedback = (0, _index.buildDefaults)();
66
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.FeedbackConfig, {
67
- allowPartial: false,
68
- feedback: feedback,
69
- onChange: onChange
70
- }));
71
- expect(_react2.screen.getByText('If correct, show')).toBeInTheDocument();
72
- expect(_react2.screen.queryByText('If partially correct, show')).not.toBeInTheDocument();
73
- expect(_react2.screen.getByText('If incorrect, show')).toBeInTheDocument();
74
- var selectors = _react2.screen.getAllByTestId('feedback-selector');
75
- expect(selectors).toHaveLength(2);
76
- });
77
- });
78
- describe('user interactions', function () {
79
- it('calls onChange when correct feedback type changes', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
80
- var user, feedback, correctSelect;
81
- return _regenerator["default"].wrap(function (_context) {
82
- while (1) switch (_context.prev = _context.next) {
83
- case 0:
84
- user = _userEvent["default"].setup();
85
- feedback = (0, _index.buildDefaults)();
86
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.FeedbackConfig, {
87
- feedback: feedback,
88
- onChange: onChange
89
- }));
90
- correctSelect = _react2.screen.getByLabelText('If correct, show');
91
- _context.next = 1;
92
- return user.selectOptions(correctSelect, 'custom');
93
- case 1:
94
- expect(onChange).toHaveBeenCalledWith(expect.objectContaining({
95
- correct: expect.objectContaining({
96
- type: 'custom'
97
- })
98
- }));
99
- case 2:
100
- case "end":
101
- return _context.stop();
102
- }
103
- }, _callee);
104
- })));
105
- it('calls onChange when incorrect feedback type changes', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
106
- var user, feedback, incorrectSelect;
107
- return _regenerator["default"].wrap(function (_context2) {
108
- while (1) switch (_context2.prev = _context2.next) {
109
- case 0:
110
- user = _userEvent["default"].setup();
111
- feedback = (0, _index.buildDefaults)();
112
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.FeedbackConfig, {
113
- feedback: feedback,
114
- onChange: onChange
115
- }));
116
- incorrectSelect = _react2.screen.getByLabelText('If incorrect, show');
117
- _context2.next = 1;
118
- return user.selectOptions(incorrectSelect, 'none');
119
- case 1:
120
- expect(onChange).toHaveBeenCalledWith(expect.objectContaining({
121
- incorrect: expect.objectContaining({
122
- type: 'none'
123
- })
124
- }));
125
- case 2:
126
- case "end":
127
- return _context2.stop();
128
- }
129
- }, _callee2);
130
- })));
131
- it('calls onChange when partial feedback type changes', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
132
- var user, feedback, partialSelect;
133
- return _regenerator["default"].wrap(function (_context3) {
134
- while (1) switch (_context3.prev = _context3.next) {
135
- case 0:
136
- user = _userEvent["default"].setup();
137
- feedback = (0, _index.buildDefaults)();
138
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.FeedbackConfig, {
139
- feedback: feedback,
140
- onChange: onChange
141
- }));
142
- partialSelect = _react2.screen.getByLabelText('If partially correct, show');
143
- _context3.next = 1;
144
- return user.selectOptions(partialSelect, 'custom');
145
- case 1:
146
- expect(onChange).toHaveBeenCalledWith(expect.objectContaining({
147
- partial: expect.objectContaining({
148
- type: 'custom'
149
- })
150
- }));
151
- case 2:
152
- case "end":
153
- return _context3.stop();
154
- }
155
- }, _callee3);
156
- })));
157
- });
158
- describe('buildDefaults helper', function () {
159
- it('returns default feedback configuration', function () {
160
- var defaults = (0, _index.buildDefaults)();
161
- expect(defaults).toEqual({
162
- correct: {
163
- type: 'default',
164
- "default": 'Correct'
165
- },
166
- incorrect: {
167
- type: 'default',
168
- "default": 'Incorrect'
169
- },
170
- partial: {
171
- type: 'default',
172
- "default": 'Nearly'
173
- }
174
- });
175
- });
176
- it('merges custom values with defaults', function () {
177
- var defaults = (0, _index.buildDefaults)({
178
- correct: {
179
- type: 'custom',
180
- custom: 'Great job!'
181
- }
182
- });
183
- expect(defaults).toEqual({
184
- correct: {
185
- type: 'custom',
186
- "default": 'Correct',
187
- custom: 'Great job!'
188
- },
189
- incorrect: {
190
- type: 'default',
191
- "default": 'Incorrect'
192
- },
193
- partial: {
194
- type: 'default',
195
- "default": 'Nearly'
196
- }
197
- });
198
- });
199
- });
200
- });
201
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfdXNlckV2ZW50IiwiX2luZGV4Iiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJqZXN0IiwibW9jayIsIkZlZWRiYWNrU2VsZWN0b3IiLCJfcmVmIiwibGFiZWwiLCJmZWVkYmFjayIsIm9uQ2hhbmdlIiwiY3JlYXRlRWxlbWVudCIsInZhbHVlIiwidHlwZSIsInRhcmdldCIsImRlc2NyaWJlIiwiZm4iLCJiZWZvcmVFYWNoIiwibW9ja0NsZWFyIiwiaXQiLCJidWlsZERlZmF1bHRzIiwicmVuZGVyIiwiRmVlZGJhY2tDb25maWciLCJleHBlY3QiLCJzY3JlZW4iLCJnZXRCeVRleHQiLCJ0b0JlSW5UaGVEb2N1bWVudCIsInNlbGVjdG9ycyIsImdldEFsbEJ5VGVzdElkIiwidG9IYXZlTGVuZ3RoIiwiYWxsb3dQYXJ0aWFsIiwicXVlcnlCeVRleHQiLCJub3QiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsInVzZXIiLCJjb3JyZWN0U2VsZWN0Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJ1c2VyRXZlbnQiLCJzZXR1cCIsImdldEJ5TGFiZWxUZXh0Iiwic2VsZWN0T3B0aW9ucyIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwib2JqZWN0Q29udGFpbmluZyIsImNvcnJlY3QiLCJzdG9wIiwiX2NhbGxlZTIiLCJpbmNvcnJlY3RTZWxlY3QiLCJfY29udGV4dDIiLCJpbmNvcnJlY3QiLCJfY2FsbGVlMyIsInBhcnRpYWxTZWxlY3QiLCJfY29udGV4dDMiLCJwYXJ0aWFsIiwiZGVmYXVsdHMiLCJ0b0VxdWFsIiwiY3VzdG9tIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ZlZWRiYWNrLWNvbmZpZy9fX3Rlc3RzX18vZmVlZGJhY2stY29uZmlnLnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXIsIHNjcmVlbiB9IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvcmVhY3QnO1xuaW1wb3J0IHVzZXJFdmVudCBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3VzZXItZXZlbnQnO1xuaW1wb3J0IHsgYnVpbGREZWZhdWx0cywgRmVlZGJhY2tDb25maWcgfSBmcm9tICcuLi9pbmRleCc7XG5cbi8vIE1vY2sgRmVlZGJhY2tTZWxlY3RvciB0byBzaW1wbGlmeSB0ZXN0aW5nXG5qZXN0Lm1vY2soJy4uL2ZlZWRiYWNrLXNlbGVjdG9yJywgKCkgPT4ge1xuICByZXR1cm4gZnVuY3Rpb24gRmVlZGJhY2tTZWxlY3Rvcih7IGxhYmVsLCBmZWVkYmFjaywgb25DaGFuZ2UgfSkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGRhdGEtdGVzdGlkPVwiZmVlZGJhY2stc2VsZWN0b3JcIj5cbiAgICAgICAgPGxhYmVsPntsYWJlbH08L2xhYmVsPlxuICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgYXJpYS1sYWJlbD17bGFiZWx9XG4gICAgICAgICAgdmFsdWU9e2ZlZWRiYWNrLnR5cGV9XG4gICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBvbkNoYW5nZSh7IC4uLmZlZWRiYWNrLCB0eXBlOiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJkZWZhdWx0XCI+RGVmYXVsdDwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJjdXN0b21cIj5DdXN0b208L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibm9uZVwiPk5vbmU8L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9O1xufSk7XG5cbmRlc2NyaWJlKCdGZWVkYmFja0NvbmZpZycsICgpID0+IHtcbiAgY29uc3Qgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgb25DaGFuZ2UubW9ja0NsZWFyKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZW5kZXJpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMgd2l0aCBkZWZhdWx0IGZlZWRiYWNrIHR5cGVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgZmVlZGJhY2sgPSBidWlsZERlZmF1bHRzKCk7XG5cbiAgICAgIHJlbmRlcig8RmVlZGJhY2tDb25maWcgZmVlZGJhY2s9e2ZlZWRiYWNrfSBvbkNoYW5nZT17b25DaGFuZ2V9IC8+KTtcblxuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ0ZlZWRiYWNrJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnSWYgY29ycmVjdCwgc2hvdycpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ0lmIHBhcnRpYWxseSBjb3JyZWN0LCBzaG93JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnSWYgaW5jb3JyZWN0LCBzaG93JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyBhbGwgdGhyZWUgZmVlZGJhY2sgc2VsZWN0b3JzIGJ5IGRlZmF1bHQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBmZWVkYmFjayA9IGJ1aWxkRGVmYXVsdHMoKTtcblxuICAgICAgcmVuZGVyKDxGZWVkYmFja0NvbmZpZyBmZWVkYmFjaz17ZmVlZGJhY2t9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gLz4pO1xuXG4gICAgICBjb25zdCBzZWxlY3RvcnMgPSBzY3JlZW4uZ2V0QWxsQnlUZXN0SWQoJ2ZlZWRiYWNrLXNlbGVjdG9yJyk7XG4gICAgICBleHBlY3Qoc2VsZWN0b3JzKS50b0hhdmVMZW5ndGgoMyk7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgcmVuZGVyIHBhcnRpYWwgZmVlZGJhY2sgc2VsZWN0b3Igd2hlbiBhbGxvd1BhcnRpYWwgaXMgZmFsc2UnLCAoKSA9PiB7XG4gICAgICBjb25zdCBmZWVkYmFjayA9IGJ1aWxkRGVmYXVsdHMoKTtcblxuICAgICAgcmVuZGVyKDxGZWVkYmFja0NvbmZpZyBhbGxvd1BhcnRpYWw9e2ZhbHNlfSBmZWVkYmFjaz17ZmVlZGJhY2t9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gLz4pO1xuXG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnSWYgY29ycmVjdCwgc2hvdycpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgZXhwZWN0KHNjcmVlbi5xdWVyeUJ5VGV4dCgnSWYgcGFydGlhbGx5IGNvcnJlY3QsIHNob3cnKSkubm90LnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnSWYgaW5jb3JyZWN0LCBzaG93JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG5cbiAgICAgIGNvbnN0IHNlbGVjdG9ycyA9IHNjcmVlbi5nZXRBbGxCeVRlc3RJZCgnZmVlZGJhY2stc2VsZWN0b3InKTtcbiAgICAgIGV4cGVjdChzZWxlY3RvcnMpLnRvSGF2ZUxlbmd0aCgyKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3VzZXIgaW50ZXJhY3Rpb25zJywgKCkgPT4ge1xuICAgIGl0KCdjYWxscyBvbkNoYW5nZSB3aGVuIGNvcnJlY3QgZmVlZGJhY2sgdHlwZSBjaGFuZ2VzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9IHVzZXJFdmVudC5zZXR1cCgpO1xuICAgICAgY29uc3QgZmVlZGJhY2sgPSBidWlsZERlZmF1bHRzKCk7XG5cbiAgICAgIHJlbmRlcig8RmVlZGJhY2tDb25maWcgZmVlZGJhY2s9e2ZlZWRiYWNrfSBvbkNoYW5nZT17b25DaGFuZ2V9IC8+KTtcblxuICAgICAgY29uc3QgY29ycmVjdFNlbGVjdCA9IHNjcmVlbi5nZXRCeUxhYmVsVGV4dCgnSWYgY29ycmVjdCwgc2hvdycpO1xuICAgICAgYXdhaXQgdXNlci5zZWxlY3RPcHRpb25zKGNvcnJlY3RTZWxlY3QsICdjdXN0b20nKTtcblxuICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgIGNvcnJlY3Q6IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHsgdHlwZTogJ2N1c3RvbScgfSksXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdjYWxscyBvbkNoYW5nZSB3aGVuIGluY29ycmVjdCBmZWVkYmFjayB0eXBlIGNoYW5nZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gdXNlckV2ZW50LnNldHVwKCk7XG4gICAgICBjb25zdCBmZWVkYmFjayA9IGJ1aWxkRGVmYXVsdHMoKTtcblxuICAgICAgcmVuZGVyKDxGZWVkYmFja0NvbmZpZyBmZWVkYmFjaz17ZmVlZGJhY2t9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gLz4pO1xuXG4gICAgICBjb25zdCBpbmNvcnJlY3RTZWxlY3QgPSBzY3JlZW4uZ2V0QnlMYWJlbFRleHQoJ0lmIGluY29ycmVjdCwgc2hvdycpO1xuICAgICAgYXdhaXQgdXNlci5zZWxlY3RPcHRpb25zKGluY29ycmVjdFNlbGVjdCwgJ25vbmUnKTtcblxuICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgIGluY29ycmVjdDogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoeyB0eXBlOiAnbm9uZScgfSksXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdjYWxscyBvbkNoYW5nZSB3aGVuIHBhcnRpYWwgZmVlZGJhY2sgdHlwZSBjaGFuZ2VzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9IHVzZXJFdmVudC5zZXR1cCgpO1xuICAgICAgY29uc3QgZmVlZGJhY2sgPSBidWlsZERlZmF1bHRzKCk7XG5cbiAgICAgIHJlbmRlcig8RmVlZGJhY2tDb25maWcgZmVlZGJhY2s9e2ZlZWRiYWNrfSBvbkNoYW5nZT17b25DaGFuZ2V9IC8+KTtcblxuICAgICAgY29uc3QgcGFydGlhbFNlbGVjdCA9IHNjcmVlbi5nZXRCeUxhYmVsVGV4dCgnSWYgcGFydGlhbGx5IGNvcnJlY3QsIHNob3cnKTtcbiAgICAgIGF3YWl0IHVzZXIuc2VsZWN0T3B0aW9ucyhwYXJ0aWFsU2VsZWN0LCAnY3VzdG9tJyk7XG5cbiAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAgIGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICBwYXJ0aWFsOiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7IHR5cGU6ICdjdXN0b20nIH0pLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdidWlsZERlZmF1bHRzIGhlbHBlcicsICgpID0+IHtcbiAgICBpdCgncmV0dXJucyBkZWZhdWx0IGZlZWRiYWNrIGNvbmZpZ3VyYXRpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBkZWZhdWx0cyA9IGJ1aWxkRGVmYXVsdHMoKTtcblxuICAgICAgZXhwZWN0KGRlZmF1bHRzKS50b0VxdWFsKHtcbiAgICAgICAgY29ycmVjdDogeyB0eXBlOiAnZGVmYXVsdCcsIGRlZmF1bHQ6ICdDb3JyZWN0JyB9LFxuICAgICAgICBpbmNvcnJlY3Q6IHsgdHlwZTogJ2RlZmF1bHQnLCBkZWZhdWx0OiAnSW5jb3JyZWN0JyB9LFxuICAgICAgICBwYXJ0aWFsOiB7IHR5cGU6ICdkZWZhdWx0JywgZGVmYXVsdDogJ05lYXJseScgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ21lcmdlcyBjdXN0b20gdmFsdWVzIHdpdGggZGVmYXVsdHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkZWZhdWx0cyA9IGJ1aWxkRGVmYXVsdHMoe1xuICAgICAgICBjb3JyZWN0OiB7IHR5cGU6ICdjdXN0b20nLCBjdXN0b206ICdHcmVhdCBqb2IhJyB9LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChkZWZhdWx0cykudG9FcXVhbCh7XG4gICAgICAgIGNvcnJlY3Q6IHsgdHlwZTogJ2N1c3RvbScsIGRlZmF1bHQ6ICdDb3JyZWN0JywgY3VzdG9tOiAnR3JlYXQgam9iIScgfSxcbiAgICAgICAgaW5jb3JyZWN0OiB7IHR5cGU6ICdkZWZhdWx0JywgZGVmYXVsdDogJ0luY29ycmVjdCcgfSxcbiAgICAgICAgcGFydGlhbDogeyB0eXBlOiAnZGVmYXVsdCcsIGRlZmF1bHQ6ICdOZWFybHknIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsVUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBSCxPQUFBO0FBQXlELFNBQUFJLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxN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