@pie-lib/config-ui 13.0.13 → 13.1.0-beta

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 (47) hide show
  1. package/CHANGELOG.md +0 -42
  2. package/lib/__tests__/alert-dialog.test.js +262 -0
  3. package/lib/__tests__/alert-dialog.test.js.map +1 -0
  4. package/lib/__tests__/checkbox.test.js +227 -0
  5. package/lib/__tests__/checkbox.test.js.map +1 -0
  6. package/lib/__tests__/choice-utils.test.js +14 -0
  7. package/lib/__tests__/choice-utils.test.js.map +1 -0
  8. package/lib/__tests__/form-section.test.js +252 -0
  9. package/lib/__tests__/form-section.test.js.map +1 -0
  10. package/lib/__tests__/help.test.js +270 -0
  11. package/lib/__tests__/help.test.js.map +1 -0
  12. package/lib/__tests__/input.test.js +268 -0
  13. package/lib/__tests__/input.test.js.map +1 -0
  14. package/lib/__tests__/langs.test.js +541 -0
  15. package/lib/__tests__/langs.test.js.map +1 -0
  16. package/lib/__tests__/number-text-field-custom.test.js +362 -0
  17. package/lib/__tests__/number-text-field-custom.test.js.map +1 -0
  18. package/lib/__tests__/number-text-field.test.js +421 -0
  19. package/lib/__tests__/number-text-field.test.js.map +1 -0
  20. package/lib/__tests__/radio-with-label.test.js +233 -0
  21. package/lib/__tests__/radio-with-label.test.js.map +1 -0
  22. package/lib/__tests__/settings-panel.test.js +184 -0
  23. package/lib/__tests__/settings-panel.test.js.map +1 -0
  24. package/lib/__tests__/settings.test.js +653 -0
  25. package/lib/__tests__/settings.test.js.map +1 -0
  26. package/lib/__tests__/tabs.test.js +211 -0
  27. package/lib/__tests__/tabs.test.js.map +1 -0
  28. package/lib/__tests__/two-choice.test.js +124 -0
  29. package/lib/__tests__/two-choice.test.js.map +1 -0
  30. package/lib/__tests__/with-stateful-model.test.js +221 -0
  31. package/lib/__tests__/with-stateful-model.test.js.map +1 -0
  32. package/lib/choice-configuration/__tests__/feedback-menu.test.js +287 -0
  33. package/lib/choice-configuration/__tests__/feedback-menu.test.js.map +1 -0
  34. package/lib/choice-configuration/__tests__/index.test.js +253 -0
  35. package/lib/choice-configuration/__tests__/index.test.js.map +1 -0
  36. package/lib/feedback-config/__tests__/feedback-config.test.js +201 -0
  37. package/lib/feedback-config/__tests__/feedback-config.test.js.map +1 -0
  38. package/lib/feedback-config/__tests__/feedback-selector.test.js +177 -0
  39. package/lib/feedback-config/__tests__/feedback-selector.test.js.map +1 -0
  40. package/lib/layout/__tests__/config.layout.test.js +70 -0
  41. package/lib/layout/__tests__/config.layout.test.js.map +1 -0
  42. package/lib/layout/__tests__/layout-content.test.js +6 -0
  43. package/lib/layout/__tests__/layout-content.test.js.map +1 -0
  44. package/lib/tags-input/__tests__/index.test.js +183 -0
  45. package/lib/tags-input/__tests__/index.test.js.map +1 -0
  46. package/package.json +5 -5
  47. package/LICENSE.md +0 -5
@@ -0,0 +1,653 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
5
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
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 _toggle = _interopRequireDefault(require("../settings/toggle"));
11
+ var _displaySize = _interopRequireDefault(require("../settings/display-size"));
12
+ var _settingsRadioLabel = _interopRequireDefault(require("../settings/settings-radio-label"));
13
+ var _panel = require("../settings/panel");
14
+ describe('Settings Components', function () {
15
+ describe('Toggle', function () {
16
+ it('renders toggle with label', function () {
17
+ var toggle = jest.fn();
18
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toggle["default"], {
19
+ label: "Enable Feature",
20
+ checked: false,
21
+ toggle: toggle
22
+ }));
23
+ expect(_react2.screen.getByText('Enable Feature')).toBeInTheDocument();
24
+ });
25
+ });
26
+ describe('DisplaySize', function () {
27
+ var defaultProps = {
28
+ size: {
29
+ width: 500,
30
+ height: 400
31
+ },
32
+ label: 'Display Size',
33
+ onChange: jest.fn()
34
+ };
35
+ beforeEach(function () {
36
+ jest.clearAllMocks();
37
+ });
38
+ it('renders label and input fields', function () {
39
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_displaySize["default"], defaultProps));
40
+ expect(_react2.screen.getByText('Display Size')).toBeInTheDocument();
41
+ expect(_react2.screen.getByLabelText('Width')).toBeInTheDocument();
42
+ expect(_react2.screen.getByLabelText('Height')).toBeInTheDocument();
43
+ });
44
+ it('displays width and height values', function () {
45
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_displaySize["default"], defaultProps));
46
+ var widthInput = _react2.screen.getByLabelText('Width');
47
+ var heightInput = _react2.screen.getByLabelText('Height');
48
+ expect(widthInput).toHaveValue(500);
49
+ expect(heightInput).toHaveValue(400);
50
+ });
51
+ it('calls onChange when width changes', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
52
+ var user, onChange, widthInput;
53
+ return _regenerator["default"].wrap(function (_context) {
54
+ while (1) switch (_context.prev = _context.next) {
55
+ case 0:
56
+ user = _userEvent["default"].setup();
57
+ onChange = jest.fn();
58
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_displaySize["default"], (0, _extends2["default"])({}, defaultProps, {
59
+ onChange: onChange
60
+ })));
61
+ widthInput = _react2.screen.getByLabelText('Width');
62
+ _context.next = 1;
63
+ return user.clear(widthInput);
64
+ case 1:
65
+ _context.next = 2;
66
+ return user.type(widthInput, '600');
67
+ case 2:
68
+ _react2.fireEvent.blur(widthInput);
69
+ expect(onChange).toHaveBeenCalledWith(expect.objectContaining({
70
+ width: 600
71
+ }));
72
+ case 3:
73
+ case "end":
74
+ return _context.stop();
75
+ }
76
+ }, _callee);
77
+ })));
78
+ it('calls onChange when height changes', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
79
+ var user, onChange, heightInput;
80
+ return _regenerator["default"].wrap(function (_context2) {
81
+ while (1) switch (_context2.prev = _context2.next) {
82
+ case 0:
83
+ user = _userEvent["default"].setup();
84
+ onChange = jest.fn();
85
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_displaySize["default"], (0, _extends2["default"])({}, defaultProps, {
86
+ onChange: onChange
87
+ })));
88
+ heightInput = _react2.screen.getByLabelText('Height');
89
+ _context2.next = 1;
90
+ return user.clear(heightInput);
91
+ case 1:
92
+ _context2.next = 2;
93
+ return user.type(heightInput, '500');
94
+ case 2:
95
+ _react2.fireEvent.blur(heightInput);
96
+ expect(onChange).toHaveBeenCalledWith(expect.objectContaining({
97
+ height: 500
98
+ }));
99
+ case 3:
100
+ case "end":
101
+ return _context2.stop();
102
+ }
103
+ }, _callee2);
104
+ })));
105
+ it('maintains other dimension when one changes', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
106
+ var user, onChange, widthInput;
107
+ return _regenerator["default"].wrap(function (_context3) {
108
+ while (1) switch (_context3.prev = _context3.next) {
109
+ case 0:
110
+ user = _userEvent["default"].setup();
111
+ onChange = jest.fn();
112
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_displaySize["default"], (0, _extends2["default"])({}, defaultProps, {
113
+ onChange: onChange
114
+ })));
115
+ widthInput = _react2.screen.getByLabelText('Width');
116
+ _context3.next = 1;
117
+ return user.clear(widthInput);
118
+ case 1:
119
+ _context3.next = 2;
120
+ return user.type(widthInput, '700');
121
+ case 2:
122
+ _react2.fireEvent.blur(widthInput);
123
+ expect(onChange).toHaveBeenCalledWith({
124
+ width: 700,
125
+ height: 400
126
+ });
127
+ case 3:
128
+ case "end":
129
+ return _context3.stop();
130
+ }
131
+ }, _callee3);
132
+ })));
133
+ it('enforces min value constraint', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4() {
134
+ var user, onChange, widthInput;
135
+ return _regenerator["default"].wrap(function (_context4) {
136
+ while (1) switch (_context4.prev = _context4.next) {
137
+ case 0:
138
+ user = _userEvent["default"].setup();
139
+ onChange = jest.fn();
140
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_displaySize["default"], (0, _extends2["default"])({}, defaultProps, {
141
+ onChange: onChange
142
+ })));
143
+ widthInput = _react2.screen.getByLabelText('Width');
144
+ _context4.next = 1;
145
+ return user.clear(widthInput);
146
+ case 1:
147
+ _context4.next = 2;
148
+ return user.type(widthInput, '100');
149
+ case 2:
150
+ _react2.fireEvent.blur(widthInput);
151
+
152
+ // Should clamp to minimum 150
153
+ expect(widthInput).toHaveValue(150);
154
+ case 3:
155
+ case "end":
156
+ return _context4.stop();
157
+ }
158
+ }, _callee4);
159
+ })));
160
+ it('enforces max value constraint', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee5() {
161
+ var user, onChange, widthInput;
162
+ return _regenerator["default"].wrap(function (_context5) {
163
+ while (1) switch (_context5.prev = _context5.next) {
164
+ case 0:
165
+ user = _userEvent["default"].setup();
166
+ onChange = jest.fn();
167
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_displaySize["default"], (0, _extends2["default"])({}, defaultProps, {
168
+ onChange: onChange
169
+ })));
170
+ widthInput = _react2.screen.getByLabelText('Width');
171
+ _context5.next = 1;
172
+ return user.clear(widthInput);
173
+ case 1:
174
+ _context5.next = 2;
175
+ return user.type(widthInput, '2000');
176
+ case 2:
177
+ _react2.fireEvent.blur(widthInput);
178
+
179
+ // Should clamp to maximum 1000
180
+ expect(widthInput).toHaveValue(1000);
181
+ case 3:
182
+ case "end":
183
+ return _context5.stop();
184
+ }
185
+ }, _callee5);
186
+ })));
187
+ it('updates when size prop changes', function () {
188
+ var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_displaySize["default"], defaultProps)),
189
+ rerender = _render.rerender;
190
+ var widthInput = _react2.screen.getByLabelText('Width');
191
+ expect(widthInput).toHaveValue(500);
192
+ rerender(/*#__PURE__*/_react["default"].createElement(_displaySize["default"], (0, _extends2["default"])({}, defaultProps, {
193
+ size: {
194
+ width: 800,
195
+ height: 600
196
+ }
197
+ })));
198
+ widthInput = _react2.screen.getByLabelText('Width');
199
+ expect(widthInput).toHaveValue(800);
200
+ });
201
+ it('handles boundary values at minimum', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee6() {
202
+ var user, onChange, widthInput, heightInput;
203
+ return _regenerator["default"].wrap(function (_context6) {
204
+ while (1) switch (_context6.prev = _context6.next) {
205
+ case 0:
206
+ user = _userEvent["default"].setup();
207
+ onChange = jest.fn();
208
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_displaySize["default"], (0, _extends2["default"])({}, defaultProps, {
209
+ onChange: onChange
210
+ })));
211
+ widthInput = _react2.screen.getByLabelText('Width');
212
+ heightInput = _react2.screen.getByLabelText('Height');
213
+ _context6.next = 1;
214
+ return user.clear(widthInput);
215
+ case 1:
216
+ _context6.next = 2;
217
+ return user.type(widthInput, '150');
218
+ case 2:
219
+ _react2.fireEvent.blur(widthInput);
220
+ _context6.next = 3;
221
+ return user.clear(heightInput);
222
+ case 3:
223
+ _context6.next = 4;
224
+ return user.type(heightInput, '150');
225
+ case 4:
226
+ _react2.fireEvent.blur(heightInput);
227
+ expect(widthInput).toHaveValue(150);
228
+ expect(heightInput).toHaveValue(150);
229
+ case 5:
230
+ case "end":
231
+ return _context6.stop();
232
+ }
233
+ }, _callee6);
234
+ })));
235
+ it('handles boundary values at maximum', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee7() {
236
+ var user, onChange, widthInput, heightInput;
237
+ return _regenerator["default"].wrap(function (_context7) {
238
+ while (1) switch (_context7.prev = _context7.next) {
239
+ case 0:
240
+ user = _userEvent["default"].setup();
241
+ onChange = jest.fn();
242
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_displaySize["default"], (0, _extends2["default"])({}, defaultProps, {
243
+ onChange: onChange
244
+ })));
245
+ widthInput = _react2.screen.getByLabelText('Width');
246
+ heightInput = _react2.screen.getByLabelText('Height');
247
+ _context7.next = 1;
248
+ return user.clear(widthInput);
249
+ case 1:
250
+ _context7.next = 2;
251
+ return user.type(widthInput, '1000');
252
+ case 2:
253
+ _react2.fireEvent.blur(widthInput);
254
+ _context7.next = 3;
255
+ return user.clear(heightInput);
256
+ case 3:
257
+ _context7.next = 4;
258
+ return user.type(heightInput, '1000');
259
+ case 4:
260
+ _react2.fireEvent.blur(heightInput);
261
+ expect(widthInput).toHaveValue(1000);
262
+ expect(heightInput).toHaveValue(1000);
263
+ case 5:
264
+ case "end":
265
+ return _context7.stop();
266
+ }
267
+ }, _callee7);
268
+ })));
269
+ it('handles decimal input values', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee8() {
270
+ var user, onChange, widthInput;
271
+ return _regenerator["default"].wrap(function (_context8) {
272
+ while (1) switch (_context8.prev = _context8.next) {
273
+ case 0:
274
+ user = _userEvent["default"].setup();
275
+ onChange = jest.fn();
276
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_displaySize["default"], (0, _extends2["default"])({}, defaultProps, {
277
+ onChange: onChange
278
+ })));
279
+ widthInput = _react2.screen.getByLabelText('Width');
280
+ _context8.next = 1;
281
+ return user.clear(widthInput);
282
+ case 1:
283
+ _context8.next = 2;
284
+ return user.type(widthInput, '500.5');
285
+ case 2:
286
+ _react2.fireEvent.blur(widthInput);
287
+ expect(widthInput).toBeInTheDocument();
288
+ case 3:
289
+ case "end":
290
+ return _context8.stop();
291
+ }
292
+ }, _callee8);
293
+ })));
294
+ it('handles empty input and resets to min', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee9() {
295
+ var user, onChange, widthInput;
296
+ return _regenerator["default"].wrap(function (_context9) {
297
+ while (1) switch (_context9.prev = _context9.next) {
298
+ case 0:
299
+ user = _userEvent["default"].setup();
300
+ onChange = jest.fn();
301
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_displaySize["default"], (0, _extends2["default"])({}, defaultProps, {
302
+ onChange: onChange
303
+ })));
304
+ widthInput = _react2.screen.getByLabelText('Width');
305
+ _context9.next = 1;
306
+ return user.clear(widthInput);
307
+ case 1:
308
+ _react2.fireEvent.blur(widthInput);
309
+
310
+ // Should reset to minimum value
311
+ expect(widthInput).toHaveValue(150);
312
+ case 2:
313
+ case "end":
314
+ return _context9.stop();
315
+ }
316
+ }, _callee9);
317
+ })));
318
+ it('handles rapid width and height changes', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee0() {
319
+ var user, onChange, widthInput;
320
+ return _regenerator["default"].wrap(function (_context0) {
321
+ while (1) switch (_context0.prev = _context0.next) {
322
+ case 0:
323
+ user = _userEvent["default"].setup();
324
+ onChange = jest.fn();
325
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_displaySize["default"], (0, _extends2["default"])({}, defaultProps, {
326
+ onChange: onChange
327
+ })));
328
+ widthInput = _react2.screen.getByLabelText('Width');
329
+ _context0.next = 1;
330
+ return user.clear(widthInput);
331
+ case 1:
332
+ _context0.next = 2;
333
+ return user.type(widthInput, '6');
334
+ case 2:
335
+ _context0.next = 3;
336
+ return user.type(widthInput, '0');
337
+ case 3:
338
+ _context0.next = 4;
339
+ return user.type(widthInput, '0');
340
+ case 4:
341
+ _react2.fireEvent.blur(widthInput);
342
+ expect(onChange).toHaveBeenCalled();
343
+ case 5:
344
+ case "end":
345
+ return _context0.stop();
346
+ }
347
+ }, _callee0);
348
+ })));
349
+ it('clamps height at both boundaries', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee1() {
350
+ var user, onChange, heightInput;
351
+ return _regenerator["default"].wrap(function (_context1) {
352
+ while (1) switch (_context1.prev = _context1.next) {
353
+ case 0:
354
+ user = _userEvent["default"].setup();
355
+ onChange = jest.fn();
356
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_displaySize["default"], (0, _extends2["default"])({}, defaultProps, {
357
+ onChange: onChange
358
+ })));
359
+ heightInput = _react2.screen.getByLabelText('Height'); // Test below min
360
+ _context1.next = 1;
361
+ return user.clear(heightInput);
362
+ case 1:
363
+ _context1.next = 2;
364
+ return user.type(heightInput, '50');
365
+ case 2:
366
+ _react2.fireEvent.blur(heightInput);
367
+ expect(heightInput).toHaveValue(150);
368
+
369
+ // Test above max
370
+ _context1.next = 3;
371
+ return user.clear(heightInput);
372
+ case 3:
373
+ _context1.next = 4;
374
+ return user.type(heightInput, '2500');
375
+ case 4:
376
+ _react2.fireEvent.blur(heightInput);
377
+ expect(heightInput).toHaveValue(1000);
378
+ case 5:
379
+ case "end":
380
+ return _context1.stop();
381
+ }
382
+ }, _callee1);
383
+ })));
384
+ it('displays custom label text', function () {
385
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_displaySize["default"], {
386
+ size: {
387
+ width: 500,
388
+ height: 400
389
+ },
390
+ label: "Custom Size Settings",
391
+ onChange: jest.fn()
392
+ }));
393
+ expect(_react2.screen.getByText('Custom Size Settings')).toBeInTheDocument();
394
+ });
395
+ it('renders with variant outlined', function () {
396
+ var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_displaySize["default"], defaultProps)),
397
+ container = _render2.container;
398
+ var inputs = container.querySelectorAll('input');
399
+ expect(inputs.length).toBe(2);
400
+ });
401
+ });
402
+ describe('SettingsRadioLabel', function () {
403
+ it('renders radio label', function () {
404
+ var onChange = jest.fn();
405
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_settingsRadioLabel["default"], {
406
+ label: "Option 1",
407
+ value: "option1",
408
+ checked: false,
409
+ onChange: onChange
410
+ }));
411
+ expect(_react2.screen.getByText('Option 1')).toBeInTheDocument();
412
+ expect(_react2.screen.getByRole('radio')).toBeInTheDocument();
413
+ });
414
+ it('renders checked state', function () {
415
+ var onChange = jest.fn();
416
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_settingsRadioLabel["default"], {
417
+ label: "Option 1",
418
+ value: "option1",
419
+ checked: true,
420
+ onChange: onChange
421
+ }));
422
+ var radio = _react2.screen.getByRole('radio');
423
+ expect(radio).toBeChecked();
424
+ });
425
+ it('renders unchecked state', function () {
426
+ var onChange = jest.fn();
427
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_settingsRadioLabel["default"], {
428
+ label: "Option 1",
429
+ value: "option1",
430
+ checked: false,
431
+ onChange: onChange
432
+ }));
433
+ var radio = _react2.screen.getByRole('radio');
434
+ expect(radio).not.toBeChecked();
435
+ });
436
+ it('calls onChange when radio is clicked', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee10() {
437
+ var user, onChange, radio;
438
+ return _regenerator["default"].wrap(function (_context10) {
439
+ while (1) switch (_context10.prev = _context10.next) {
440
+ case 0:
441
+ user = _userEvent["default"].setup();
442
+ onChange = jest.fn();
443
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_settingsRadioLabel["default"], {
444
+ label: "Option 1",
445
+ value: "option1",
446
+ checked: false,
447
+ onChange: onChange
448
+ }));
449
+ radio = _react2.screen.getByRole('radio');
450
+ _context10.next = 1;
451
+ return user.click(radio);
452
+ case 1:
453
+ expect(onChange).toHaveBeenCalled();
454
+ case 2:
455
+ case "end":
456
+ return _context10.stop();
457
+ }
458
+ }, _callee10);
459
+ })));
460
+ it('displays label text correctly', function () {
461
+ var onChange = jest.fn();
462
+ var labelText = 'Custom Option Label';
463
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_settingsRadioLabel["default"], {
464
+ label: labelText,
465
+ value: "custom",
466
+ checked: false,
467
+ onChange: onChange
468
+ }));
469
+ expect(_react2.screen.getByText(labelText)).toBeInTheDocument();
470
+ });
471
+ });
472
+ describe('Panel', function () {
473
+ var defaultProps = {
474
+ model: {
475
+ toggleSetting: true,
476
+ numberValue: 5
477
+ },
478
+ configuration: {
479
+ configValue: 'test'
480
+ },
481
+ groups: {
482
+ 'General Settings': {
483
+ toggleSetting: {
484
+ type: 'toggle',
485
+ label: 'Enable Feature'
486
+ }
487
+ }
488
+ },
489
+ onChangeModel: jest.fn(),
490
+ onChangeConfiguration: jest.fn()
491
+ };
492
+ beforeEach(function () {
493
+ jest.clearAllMocks();
494
+ });
495
+ it('renders panel with group label', function () {
496
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_panel.Panel, defaultProps));
497
+ expect(_react2.screen.getByText('General Settings')).toBeInTheDocument();
498
+ });
499
+ it('renders empty when groups is undefined', function () {
500
+ var _render3 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_panel.Panel, (0, _extends2["default"])({}, defaultProps, {
501
+ groups: undefined
502
+ }))),
503
+ container = _render3.container;
504
+ expect(container.firstChild.children.length).toBe(0);
505
+ });
506
+ it('renders empty when groups is empty', function () {
507
+ var _render4 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_panel.Panel, (0, _extends2["default"])({}, defaultProps, {
508
+ groups: {}
509
+ }))),
510
+ container = _render4.container;
511
+ expect(container.firstChild.children.length).toBe(0);
512
+ });
513
+ it('calls onChangeModel when model changes', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee11() {
514
+ var user, onChangeModel, _render5, container, switchElement;
515
+ return _regenerator["default"].wrap(function (_context11) {
516
+ while (1) switch (_context11.prev = _context11.next) {
517
+ case 0:
518
+ user = _userEvent["default"].setup();
519
+ onChangeModel = jest.fn();
520
+ _render5 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_panel.Panel, (0, _extends2["default"])({}, defaultProps, {
521
+ onChangeModel: onChangeModel
522
+ }))), container = _render5.container;
523
+ switchElement = container.querySelector('input[type="checkbox"]');
524
+ _context11.next = 1;
525
+ return user.click(switchElement);
526
+ case 1:
527
+ expect(onChangeModel).toHaveBeenCalled();
528
+ case 2:
529
+ case "end":
530
+ return _context11.stop();
531
+ }
532
+ }, _callee11);
533
+ })));
534
+ it('calls onChangeConfiguration when configuration changes', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee12() {
535
+ var user, onChangeConfiguration, _render6, container, switchElement;
536
+ return _regenerator["default"].wrap(function (_context12) {
537
+ while (1) switch (_context12.prev = _context12.next) {
538
+ case 0:
539
+ user = _userEvent["default"].setup();
540
+ onChangeConfiguration = jest.fn();
541
+ _render6 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_panel.Panel, (0, _extends2["default"])({}, defaultProps, {
542
+ groups: {
543
+ 'Config Group': {
544
+ configValue: {
545
+ type: 'toggle',
546
+ label: 'Config Toggle',
547
+ isConfigProperty: true
548
+ }
549
+ }
550
+ },
551
+ onChangeConfiguration: onChangeConfiguration
552
+ }))), container = _render6.container;
553
+ switchElement = container.querySelector('input[type="checkbox"]');
554
+ _context12.next = 1;
555
+ return user.click(switchElement);
556
+ case 1:
557
+ expect(onChangeConfiguration).toHaveBeenCalled();
558
+ case 2:
559
+ case "end":
560
+ return _context12.stop();
561
+ }
562
+ }, _callee12);
563
+ })));
564
+ it('renders with modal when provided', function () {
565
+ var modal = /*#__PURE__*/_react["default"].createElement("div", {
566
+ "data-testid": "test-modal"
567
+ }, "Modal Content");
568
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_panel.Panel, (0, _extends2["default"])({}, defaultProps, {
569
+ modal: modal
570
+ })));
571
+ expect(_react2.screen.getByTestId('test-modal')).toBeInTheDocument();
572
+ expect(_react2.screen.getByText('Modal Content')).toBeInTheDocument();
573
+ });
574
+ it('renders multiple groups', function () {
575
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_panel.Panel, (0, _extends2["default"])({}, defaultProps, {
576
+ groups: {
577
+ 'Group One': {
578
+ setting1: {
579
+ type: 'toggle',
580
+ label: 'Setting One'
581
+ }
582
+ },
583
+ 'Group Two': {
584
+ setting2: {
585
+ type: 'toggle',
586
+ label: 'Setting Two'
587
+ }
588
+ }
589
+ },
590
+ model: {
591
+ setting1: true,
592
+ setting2: false
593
+ }
594
+ })));
595
+ expect(_react2.screen.getByText('Group One')).toBeInTheDocument();
596
+ expect(_react2.screen.getByText('Group Two')).toBeInTheDocument();
597
+ });
598
+ it('uses default callbacks when not provided', function () {
599
+ var _render7 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_panel.Panel, {
600
+ model: {
601
+ test: true
602
+ },
603
+ groups: {
604
+ 'Test Group': {
605
+ test: {
606
+ type: 'toggle',
607
+ label: 'Test'
608
+ }
609
+ }
610
+ }
611
+ })),
612
+ container = _render7.container;
613
+ expect(container.firstChild).toBeInTheDocument();
614
+ });
615
+ it('filters out empty groups', function () {
616
+ var _render8 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_panel.Panel, (0, _extends2["default"])({}, defaultProps, {
617
+ groups: {
618
+ 'Empty Group': {},
619
+ 'General Settings': {
620
+ toggleSetting: {
621
+ type: 'toggle',
622
+ label: 'Enable Feature'
623
+ }
624
+ }
625
+ },
626
+ model: {
627
+ toggleSetting: true
628
+ }
629
+ }))),
630
+ container = _render8.container;
631
+ expect(_react2.screen.getByText('General Settings')).toBeInTheDocument();
632
+ expect(_react2.screen.queryByText('Empty Group')).not.toBeInTheDocument();
633
+ });
634
+ it('renders with null model', function () {
635
+ var _render9 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_panel.Panel, {
636
+ model: null,
637
+ configuration: {},
638
+ groups: {
639
+ 'General Settings': {
640
+ toggleSetting: {
641
+ type: 'toggle',
642
+ label: 'Enable Feature'
643
+ }
644
+ }
645
+ },
646
+ onChangeModel: jest.fn()
647
+ })),
648
+ container = _render9.container;
649
+ expect(_react2.screen.getByText('General Settings')).toBeInTheDocument();
650
+ });
651
+ });
652
+ });
653
+ //# sourceMappingURL=settings.test.js.map