@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,421 @@
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 _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _react2 = require("@testing-library/react");
9
+ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
10
+ var _numberTextField = require("../number-text-field");
11
+ describe('NumberTextField', function () {
12
+ var defaultProps = {
13
+ value: 1,
14
+ min: 1,
15
+ max: 10,
16
+ classes: {},
17
+ onChange: jest.fn()
18
+ };
19
+ beforeEach(function () {
20
+ jest.clearAllMocks();
21
+ });
22
+ describe('rendering', function () {
23
+ it('renders TextField with correct value', function () {
24
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, defaultProps));
25
+ var input = _react2.screen.getByRole('spinbutton');
26
+ expect(input).toHaveValue(1);
27
+ });
28
+ it('renders with custom label', function () {
29
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
30
+ label: "Custom Label"
31
+ })));
32
+ expect(_react2.screen.getByLabelText('Custom Label')).toBeInTheDocument();
33
+ });
34
+ it('renders with suffix', function () {
35
+ var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
36
+ suffix: "px"
37
+ }))),
38
+ container = _render.container;
39
+ expect(_react2.screen.getByText('px')).toBeInTheDocument();
40
+ });
41
+ it('renders without suffix when not provided', function () {
42
+ var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, defaultProps)),
43
+ container = _render2.container;
44
+ var input = _react2.screen.getByRole('spinbutton');
45
+ expect(input).toBeInTheDocument();
46
+ });
47
+ it('renders as disabled when disabled prop is true', function () {
48
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
49
+ disabled: true
50
+ })));
51
+ var input = _react2.screen.getByRole('spinbutton');
52
+ expect(input).toBeDisabled();
53
+ });
54
+ it('renders as enabled when disabled prop is false', function () {
55
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
56
+ disabled: false
57
+ })));
58
+ var input = _react2.screen.getByRole('spinbutton');
59
+ expect(input).not.toBeDisabled();
60
+ });
61
+ it('renders with custom variant', function () {
62
+ var _render3 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
63
+ variant: "outlined"
64
+ }))),
65
+ container = _render3.container;
66
+ expect(container.querySelector('input')).toBeInTheDocument();
67
+ });
68
+ it('renders with disableUnderline variant', function () {
69
+ var _render4 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
70
+ disableUnderline: true
71
+ }))),
72
+ container = _render4.container;
73
+ expect(container.querySelector('input')).toBeInTheDocument();
74
+ });
75
+ it('renders with custom className', function () {
76
+ var _render5 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
77
+ className: "custom-class"
78
+ }))),
79
+ container = _render5.container;
80
+ expect(container.querySelector('.custom-class')).toBeInTheDocument();
81
+ });
82
+ it('renders with custom inputClassName', function () {
83
+ var _render6 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
84
+ inputClassName: "input-class"
85
+ }))),
86
+ container = _render6.container;
87
+ expect(container.querySelector('.input-class')).toBeInTheDocument();
88
+ });
89
+ it('renders with ShrinkLabel InputLabelProps', function () {
90
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
91
+ label: "Shrink Label"
92
+ })));
93
+ expect(_react2.screen.getByLabelText('Shrink Label')).toBeInTheDocument();
94
+ });
95
+ it('renders with margin normal', function () {
96
+ var _render7 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, defaultProps)),
97
+ container = _render7.container;
98
+ expect(container.querySelector('input')).toBeInTheDocument();
99
+ });
100
+ });
101
+ describe('onChange callback', function () {
102
+ it('calls onChange with clamped value on blur', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
103
+ var user, onChange, input;
104
+ return _regenerator["default"].wrap(function (_context) {
105
+ while (1) switch (_context.prev = _context.next) {
106
+ case 0:
107
+ user = _userEvent["default"].setup();
108
+ onChange = jest.fn();
109
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
110
+ onChange: onChange
111
+ })));
112
+ input = _react2.screen.getByRole('spinbutton');
113
+ _context.next = 1;
114
+ return user.clear(input);
115
+ case 1:
116
+ _context.next = 2;
117
+ return user.type(input, '15');
118
+ case 2:
119
+ _react2.fireEvent.blur(input);
120
+ _context.next = 3;
121
+ return (0, _react2.waitFor)(function () {
122
+ expect(onChange).toHaveBeenCalledWith(expect.anything(), 10);
123
+ });
124
+ case 3:
125
+ case "end":
126
+ return _context.stop();
127
+ }
128
+ }, _callee);
129
+ })));
130
+ it('calls onChange on Enter key press', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
131
+ var user, onChange, input;
132
+ return _regenerator["default"].wrap(function (_context2) {
133
+ while (1) switch (_context2.prev = _context2.next) {
134
+ case 0:
135
+ user = _userEvent["default"].setup();
136
+ onChange = jest.fn();
137
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
138
+ onChange: onChange
139
+ })));
140
+ input = _react2.screen.getByRole('spinbutton');
141
+ _context2.next = 1;
142
+ return user.clear(input);
143
+ case 1:
144
+ _context2.next = 2;
145
+ return user.type(input, '5');
146
+ case 2:
147
+ _context2.next = 3;
148
+ return user.keyboard('{Enter}');
149
+ case 3:
150
+ expect(input).toHaveValue(5);
151
+ case 4:
152
+ case "end":
153
+ return _context2.stop();
154
+ }
155
+ }, _callee2);
156
+ })));
157
+ it('calls onChange during typing (unvalidated)', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
158
+ var user, onChange, input;
159
+ return _regenerator["default"].wrap(function (_context3) {
160
+ while (1) switch (_context3.prev = _context3.next) {
161
+ case 0:
162
+ user = _userEvent["default"].setup();
163
+ onChange = jest.fn();
164
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
165
+ onChange: onChange
166
+ })));
167
+ input = _react2.screen.getByRole('spinbutton');
168
+ _context3.next = 1;
169
+ return user.clear(input);
170
+ case 1:
171
+ _context3.next = 2;
172
+ return user.type(input, '7');
173
+ case 2:
174
+ // onChange should be called at least once during typing
175
+ expect(input).toHaveValue(7);
176
+ case 3:
177
+ case "end":
178
+ return _context3.stop();
179
+ }
180
+ }, _callee3);
181
+ })));
182
+ it('does not call onChange when value does not change on blur', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4() {
183
+ var user, onChange, input;
184
+ return _regenerator["default"].wrap(function (_context4) {
185
+ while (1) switch (_context4.prev = _context4.next) {
186
+ case 0:
187
+ user = _userEvent["default"].setup();
188
+ onChange = jest.fn();
189
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
190
+ value: 5,
191
+ onChange: onChange
192
+ })));
193
+ input = _react2.screen.getByRole('spinbutton');
194
+ _react2.fireEvent.blur(input);
195
+ expect(onChange).not.toHaveBeenCalled();
196
+ case 1:
197
+ case "end":
198
+ return _context4.stop();
199
+ }
200
+ }, _callee4);
201
+ })));
202
+ });
203
+ describe('range constraints', function () {
204
+ it('handles only min constraint', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee5() {
205
+ var user, _render8, container, input;
206
+ return _regenerator["default"].wrap(function (_context5) {
207
+ while (1) switch (_context5.prev = _context5.next) {
208
+ case 0:
209
+ user = _userEvent["default"].setup();
210
+ _render8 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, {
211
+ value: 5,
212
+ min: 3,
213
+ onChange: jest.fn()
214
+ })), container = _render8.container;
215
+ input = _react2.screen.getByRole('spinbutton');
216
+ expect(input).toHaveValue(5);
217
+ case 1:
218
+ case "end":
219
+ return _context5.stop();
220
+ }
221
+ }, _callee5);
222
+ })));
223
+ it('handles only max constraint', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee6() {
224
+ var user, _render9, container, input;
225
+ return _regenerator["default"].wrap(function (_context6) {
226
+ while (1) switch (_context6.prev = _context6.next) {
227
+ case 0:
228
+ user = _userEvent["default"].setup();
229
+ _render9 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, {
230
+ value: 5,
231
+ max: 10,
232
+ onChange: jest.fn()
233
+ })), container = _render9.container;
234
+ input = _react2.screen.getByRole('spinbutton');
235
+ expect(input).toHaveValue(5);
236
+ case 1:
237
+ case "end":
238
+ return _context6.stop();
239
+ }
240
+ }, _callee6);
241
+ })));
242
+ it('handles no constraints', function () {
243
+ var _render0 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, {
244
+ value: 100,
245
+ onChange: jest.fn()
246
+ })),
247
+ container = _render0.container;
248
+ var input = _react2.screen.getByRole('spinbutton');
249
+ expect(input).toHaveValue(100);
250
+ });
251
+ });
252
+ describe('keyboard interactions', function () {
253
+ it('handles Enter key to blur', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee7() {
254
+ var user, onChange, input;
255
+ return _regenerator["default"].wrap(function (_context7) {
256
+ while (1) switch (_context7.prev = _context7.next) {
257
+ case 0:
258
+ user = _userEvent["default"].setup();
259
+ onChange = jest.fn();
260
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
261
+ onChange: onChange
262
+ })));
263
+ input = _react2.screen.getByRole('spinbutton');
264
+ input.focus();
265
+ _context7.next = 1;
266
+ return user.type(input, '{Enter}');
267
+ case 1:
268
+ expect(input).not.toHaveFocus();
269
+ case 2:
270
+ case "end":
271
+ return _context7.stop();
272
+ }
273
+ }, _callee7);
274
+ })));
275
+ it('allows typing numbers', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee8() {
276
+ var user, input;
277
+ return _regenerator["default"].wrap(function (_context8) {
278
+ while (1) switch (_context8.prev = _context8.next) {
279
+ case 0:
280
+ user = _userEvent["default"].setup();
281
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, defaultProps));
282
+ input = _react2.screen.getByRole('spinbutton');
283
+ _context8.next = 1;
284
+ return user.clear(input);
285
+ case 1:
286
+ _context8.next = 2;
287
+ return user.type(input, '42');
288
+ case 2:
289
+ expect(input).toHaveValue(42);
290
+ case 3:
291
+ case "end":
292
+ return _context8.stop();
293
+ }
294
+ }, _callee8);
295
+ })));
296
+ it('allows negative sign', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee9() {
297
+ var user, input;
298
+ return _regenerator["default"].wrap(function (_context9) {
299
+ while (1) switch (_context9.prev = _context9.next) {
300
+ case 0:
301
+ user = _userEvent["default"].setup();
302
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
303
+ min: -100,
304
+ value: 0
305
+ })));
306
+ input = _react2.screen.getByRole('spinbutton');
307
+ _context9.next = 1;
308
+ return user.clear(input);
309
+ case 1:
310
+ _context9.next = 2;
311
+ return user.type(input, '-5');
312
+ case 2:
313
+ expect(input).toHaveValue(-5);
314
+ case 3:
315
+ case "end":
316
+ return _context9.stop();
317
+ }
318
+ }, _callee9);
319
+ })));
320
+ });
321
+ describe('props updates', function () {
322
+ it('updates value when prop changes', function () {
323
+ var _render1 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
324
+ value: 5
325
+ }))),
326
+ rerender = _render1.rerender;
327
+ var input = _react2.screen.getByRole('spinbutton');
328
+ expect(input).toHaveValue(5);
329
+ rerender(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
330
+ value: 8
331
+ })));
332
+ input = _react2.screen.getByRole('spinbutton');
333
+ expect(input).toHaveValue(8);
334
+ });
335
+ it('updates constraints when min/max props change', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee0() {
336
+ var user, onChange, _render10, rerender, input;
337
+ return _regenerator["default"].wrap(function (_context0) {
338
+ while (1) switch (_context0.prev = _context0.next) {
339
+ case 0:
340
+ user = _userEvent["default"].setup();
341
+ onChange = jest.fn();
342
+ _render10 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, {
343
+ value: 5,
344
+ min: 1,
345
+ max: 10,
346
+ onChange: onChange
347
+ })), rerender = _render10.rerender;
348
+ rerender(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, {
349
+ value: 5,
350
+ min: 1,
351
+ max: 8,
352
+ onChange: onChange
353
+ }));
354
+ input = _react2.screen.getByRole('spinbutton');
355
+ _context0.next = 1;
356
+ return user.clear(input);
357
+ case 1:
358
+ _context0.next = 2;
359
+ return user.type(input, '15');
360
+ case 2:
361
+ _react2.fireEvent.blur(input);
362
+ _context0.next = 3;
363
+ return (0, _react2.waitFor)(function () {
364
+ expect(input).toHaveValue(8); // Clamped to new max
365
+ });
366
+ case 3:
367
+ case "end":
368
+ return _context0.stop();
369
+ }
370
+ }, _callee0);
371
+ })));
372
+ it('re-clamps value when constraints become more restrictive', function () {
373
+ var onChange = jest.fn();
374
+ var _render11 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, {
375
+ value: 8,
376
+ min: 1,
377
+ max: 10,
378
+ onChange: onChange
379
+ })),
380
+ rerender = _render11.rerender;
381
+ rerender(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, {
382
+ value: 8,
383
+ min: 1,
384
+ max: 5,
385
+ onChange: onChange
386
+ }));
387
+
388
+ // Component should re-clamp the value
389
+ expect(_react2.screen.getByRole('spinbutton')).toBeInTheDocument();
390
+ });
391
+ });
392
+ describe('fallback number logic', function () {
393
+ it('defaults to 0 when no min or max is provided', function () {
394
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, {
395
+ value: undefined,
396
+ onChange: jest.fn()
397
+ }));
398
+ var input = _react2.screen.getByRole('spinbutton');
399
+ expect(input).toHaveValue(0);
400
+ });
401
+ it('defaults to max when only max is provided', function () {
402
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, {
403
+ value: undefined,
404
+ max: 15,
405
+ onChange: jest.fn()
406
+ }));
407
+ var input = _react2.screen.getByRole('spinbutton');
408
+ expect(input).toHaveValue(15);
409
+ });
410
+ it('defaults to min when only min is provided', function () {
411
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, {
412
+ value: undefined,
413
+ min: 5,
414
+ onChange: jest.fn()
415
+ }));
416
+ var input = _react2.screen.getByRole('spinbutton');
417
+ expect(input).toHaveValue(5);
418
+ });
419
+ });
420
+ });
421
+ //# sourceMappingURL=number-text-field.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number-text-field.test.js","names":["_react","_interopRequireDefault","require","_react2","_userEvent","_numberTextField","describe","defaultProps","value","min","max","classes","onChange","jest","fn","beforeEach","clearAllMocks","it","render","createElement","NumberTextField","input","screen","getByRole","expect","toHaveValue","_extends2","label","getByLabelText","toBeInTheDocument","_render","suffix","container","getByText","_render2","disabled","toBeDisabled","not","_render3","variant","querySelector","_render4","disableUnderline","_render5","className","_render6","inputClassName","_render7","_asyncToGenerator2","_regenerator","mark","_callee","user","wrap","_context","prev","next","userEvent","setup","clear","type","fireEvent","blur","waitFor","toHaveBeenCalledWith","anything","stop","_callee2","_context2","keyboard","_callee3","_context3","_callee4","_context4","toHaveBeenCalled","_callee5","_render8","_context5","_callee6","_render9","_context6","_render0","_callee7","_context7","focus","toHaveFocus","_callee8","_context8","_callee9","_context9","_render1","rerender","_callee0","_render10","_context0","_render11","undefined"],"sources":["../../src/__tests__/number-text-field.test.jsx"],"sourcesContent":["import React from 'react';\nimport { fireEvent, render, screen, waitFor } from '@testing-library/react';\nimport userEvent from '@testing-library/user-event';\nimport { NumberTextField } from '../number-text-field';\n\ndescribe('NumberTextField', () => {\n const defaultProps = {\n value: 1,\n min: 1,\n max: 10,\n classes: {},\n onChange: jest.fn(),\n };\n\n beforeEach(() => {\n jest.clearAllMocks();\n });\n\n describe('rendering', () => {\n it('renders TextField with correct value', () => {\n render(<NumberTextField {...defaultProps} />);\n const input = screen.getByRole('spinbutton');\n expect(input).toHaveValue(1);\n });\n\n it('renders with custom label', () => {\n render(<NumberTextField {...defaultProps} label=\"Custom Label\" />);\n expect(screen.getByLabelText('Custom Label')).toBeInTheDocument();\n });\n\n it('renders with suffix', () => {\n const { container } = render(<NumberTextField {...defaultProps} suffix=\"px\" />);\n expect(screen.getByText('px')).toBeInTheDocument();\n });\n\n it('renders without suffix when not provided', () => {\n const { container } = render(<NumberTextField {...defaultProps} />);\n const input = screen.getByRole('spinbutton');\n expect(input).toBeInTheDocument();\n });\n\n it('renders as disabled when disabled prop is true', () => {\n render(<NumberTextField {...defaultProps} disabled={true} />);\n const input = screen.getByRole('spinbutton');\n expect(input).toBeDisabled();\n });\n\n it('renders as enabled when disabled prop is false', () => {\n render(<NumberTextField {...defaultProps} disabled={false} />);\n const input = screen.getByRole('spinbutton');\n expect(input).not.toBeDisabled();\n });\n\n it('renders with custom variant', () => {\n const { container } = render(<NumberTextField {...defaultProps} variant=\"outlined\" />);\n expect(container.querySelector('input')).toBeInTheDocument();\n });\n\n it('renders with disableUnderline variant', () => {\n const { container } = render(<NumberTextField {...defaultProps} disableUnderline={true} />);\n expect(container.querySelector('input')).toBeInTheDocument();\n });\n\n it('renders with custom className', () => {\n const { container } = render(<NumberTextField {...defaultProps} className=\"custom-class\" />);\n expect(container.querySelector('.custom-class')).toBeInTheDocument();\n });\n\n it('renders with custom inputClassName', () => {\n const { container } = render(<NumberTextField {...defaultProps} inputClassName=\"input-class\" />);\n expect(container.querySelector('.input-class')).toBeInTheDocument();\n });\n\n it('renders with ShrinkLabel InputLabelProps', () => {\n render(<NumberTextField {...defaultProps} label=\"Shrink Label\" />);\n expect(screen.getByLabelText('Shrink Label')).toBeInTheDocument();\n });\n\n it('renders with margin normal', () => {\n const { container } = render(<NumberTextField {...defaultProps} />);\n expect(container.querySelector('input')).toBeInTheDocument();\n });\n });\n\n describe('onChange callback', () => {\n it('calls onChange with clamped value on blur', async () => {\n const user = userEvent.setup();\n const onChange = jest.fn();\n render(<NumberTextField {...defaultProps} onChange={onChange} />);\n\n const input = screen.getByRole('spinbutton');\n await user.clear(input);\n await user.type(input, '15');\n fireEvent.blur(input);\n\n await waitFor(() => {\n expect(onChange).toHaveBeenCalledWith(expect.anything(), 10);\n });\n });\n\n it('calls onChange on Enter key press', async () => {\n const user = userEvent.setup();\n const onChange = jest.fn();\n render(<NumberTextField {...defaultProps} onChange={onChange} />);\n\n const input = screen.getByRole('spinbutton');\n await user.clear(input);\n await user.type(input, '5');\n await user.keyboard('{Enter}');\n\n expect(input).toHaveValue(5);\n });\n\n it('calls onChange during typing (unvalidated)', async () => {\n const user = userEvent.setup();\n const onChange = jest.fn();\n render(<NumberTextField {...defaultProps} onChange={onChange} />);\n\n const input = screen.getByRole('spinbutton');\n await user.clear(input);\n await user.type(input, '7');\n\n // onChange should be called at least once during typing\n expect(input).toHaveValue(7);\n });\n\n it('does not call onChange when value does not change on blur', async () => {\n const user = userEvent.setup();\n const onChange = jest.fn();\n render(<NumberTextField {...defaultProps} value={5} onChange={onChange} />);\n\n const input = screen.getByRole('spinbutton');\n fireEvent.blur(input);\n\n expect(onChange).not.toHaveBeenCalled();\n });\n });\n\n describe('range constraints', () => {\n it('handles only min constraint', async () => {\n const user = userEvent.setup();\n const { container } = render(<NumberTextField value={5} min={3} onChange={jest.fn()} />);\n\n const input = screen.getByRole('spinbutton');\n expect(input).toHaveValue(5);\n });\n\n it('handles only max constraint', async () => {\n const user = userEvent.setup();\n const { container } = render(<NumberTextField value={5} max={10} onChange={jest.fn()} />);\n\n const input = screen.getByRole('spinbutton');\n expect(input).toHaveValue(5);\n });\n\n it('handles no constraints', () => {\n const { container } = render(<NumberTextField value={100} onChange={jest.fn()} />);\n\n const input = screen.getByRole('spinbutton');\n expect(input).toHaveValue(100);\n });\n });\n\n describe('keyboard interactions', () => {\n it('handles Enter key to blur', async () => {\n const user = userEvent.setup();\n const onChange = jest.fn();\n render(<NumberTextField {...defaultProps} onChange={onChange} />);\n\n const input = screen.getByRole('spinbutton');\n input.focus();\n await user.type(input, '{Enter}');\n\n expect(input).not.toHaveFocus();\n });\n\n it('allows typing numbers', async () => {\n const user = userEvent.setup();\n render(<NumberTextField {...defaultProps} />);\n\n const input = screen.getByRole('spinbutton');\n await user.clear(input);\n await user.type(input, '42');\n\n expect(input).toHaveValue(42);\n });\n\n it('allows negative sign', async () => {\n const user = userEvent.setup();\n render(<NumberTextField {...defaultProps} min={-100} value={0} />);\n\n const input = screen.getByRole('spinbutton');\n await user.clear(input);\n await user.type(input, '-5');\n\n expect(input).toHaveValue(-5);\n });\n });\n\n describe('props updates', () => {\n it('updates value when prop changes', () => {\n const { rerender } = render(<NumberTextField {...defaultProps} value={5} />);\n\n let input = screen.getByRole('spinbutton');\n expect(input).toHaveValue(5);\n\n rerender(<NumberTextField {...defaultProps} value={8} />);\n\n input = screen.getByRole('spinbutton');\n expect(input).toHaveValue(8);\n });\n\n it('updates constraints when min/max props change', async () => {\n const user = userEvent.setup();\n const onChange = jest.fn();\n const { rerender } = render(<NumberTextField value={5} min={1} max={10} onChange={onChange} />);\n\n rerender(<NumberTextField value={5} min={1} max={8} onChange={onChange} />);\n\n const input = screen.getByRole('spinbutton');\n await user.clear(input);\n await user.type(input, '15');\n fireEvent.blur(input);\n\n await waitFor(() => {\n expect(input).toHaveValue(8); // Clamped to new max\n });\n });\n\n it('re-clamps value when constraints become more restrictive', () => {\n const onChange = jest.fn();\n const { rerender } = render(<NumberTextField value={8} min={1} max={10} onChange={onChange} />);\n\n rerender(<NumberTextField value={8} min={1} max={5} onChange={onChange} />);\n\n // Component should re-clamp the value\n expect(screen.getByRole('spinbutton')).toBeInTheDocument();\n });\n });\n\n describe('fallback number logic', () => {\n it('defaults to 0 when no min or max is provided', () => {\n render(<NumberTextField value={undefined} onChange={jest.fn()} />);\n\n const input = screen.getByRole('spinbutton');\n expect(input).toHaveValue(0);\n });\n\n it('defaults to max when only max is provided', () => {\n render(<NumberTextField value={undefined} max={15} onChange={jest.fn()} />);\n\n const input = screen.getByRole('spinbutton');\n expect(input).toHaveValue(15);\n });\n\n it('defaults to min when only min is provided', () => {\n render(<NumberTextField value={undefined} min={5} onChange={jest.fn()} />);\n\n const input = screen.getByRole('spinbutton');\n expect(input).toHaveValue(5);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}