@pie-lib/config-ui 12.1.1-next.2 → 12.1.1-next.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/__tests__/alert-dialog.test.js +1 -6
- package/lib/__tests__/checkbox.test.js +1 -1
- package/lib/__tests__/choice-utils.test.js +1 -3
- package/lib/__tests__/form-section.test.js +1 -1
- package/lib/__tests__/help.test.js +1 -9
- package/lib/__tests__/input.test.js +1 -1
- package/lib/__tests__/langs.test.js +1 -11
- package/lib/__tests__/number-text-field-custom.test.js +1 -3
- package/lib/__tests__/number-text-field.test.js +1 -1
- package/lib/__tests__/radio-with-label.test.js +1 -1
- package/lib/__tests__/settings-panel.test.js +1 -11
- package/lib/__tests__/settings.test.js +1 -1
- package/lib/__tests__/tabs.test.js +1 -1
- package/lib/__tests__/with-stateful-model.test.js +1 -12
- package/lib/alert-dialog.js +1 -2
- package/lib/alert-dialog.js.map +1 -1
- package/lib/checkbox.js +1 -11
- package/lib/checkbox.js.map +1 -1
- package/lib/choice-configuration/__tests__/feedback-menu.test.js +1 -1
- package/lib/choice-configuration/__tests__/index.test.js +1 -11
- package/lib/choice-configuration/feedback-menu.js +1 -6
- package/lib/choice-configuration/feedback-menu.js.map +1 -1
- package/lib/choice-configuration/index.js +1 -13
- package/lib/choice-configuration/index.js.map +1 -1
- package/lib/choice-utils.js +3 -14
- package/lib/choice-utils.js.map +1 -1
- package/lib/feedback-config/__tests__/feedback-config.test.js +1 -11
- package/lib/feedback-config/feedback-selector.js +1 -15
- package/lib/feedback-config/feedback-selector.js.map +1 -1
- package/lib/feedback-config/group.js +1 -6
- package/lib/feedback-config/group.js.map +1 -1
- package/lib/feedback-config/index.js +3 -20
- package/lib/feedback-config/index.js.map +1 -1
- package/lib/form-section.js +1 -2
- package/lib/form-section.js.map +1 -1
- package/lib/help.js +1 -3
- package/lib/help.js.map +1 -1
- package/lib/index.js +1 -8
- package/lib/index.js.map +1 -1
- package/lib/input.js +1 -9
- package/lib/input.js.map +1 -1
- package/lib/inputs.js +1 -11
- package/lib/inputs.js.map +1 -1
- package/lib/langs.js +1 -6
- package/lib/langs.js.map +1 -1
- package/lib/layout/config-layout.js +1 -10
- package/lib/layout/config-layout.js.map +1 -1
- package/lib/layout/index.js +1 -2
- package/lib/layout/index.js.map +1 -1
- package/lib/layout/layout-contents.js +1 -12
- package/lib/layout/layout-contents.js.map +1 -1
- package/lib/layout/settings-box.js +1 -3
- package/lib/layout/settings-box.js.map +1 -1
- package/lib/mui-box/index.js +1 -2
- package/lib/mui-box/index.js.map +1 -1
- package/lib/number-text-field-custom.js +9 -26
- package/lib/number-text-field-custom.js.map +1 -1
- package/lib/number-text-field.js +8 -16
- package/lib/number-text-field.js.map +1 -1
- package/lib/radio-with-label.js +1 -2
- package/lib/radio-with-label.js.map +1 -1
- package/lib/settings/display-size.js +1 -11
- package/lib/settings/display-size.js.map +1 -1
- package/lib/settings/index.js +1 -13
- package/lib/settings/index.js.map +1 -1
- package/lib/settings/panel.js +6 -22
- package/lib/settings/panel.js.map +1 -1
- package/lib/settings/settings-radio-label.js +1 -2
- package/lib/settings/settings-radio-label.js.map +1 -1
- package/lib/settings/toggle.js +1 -2
- package/lib/settings/toggle.js.map +1 -1
- package/lib/tabs/index.js +1 -5
- package/lib/tabs/index.js.map +1 -1
- package/lib/tags-input/__tests__/index.test.js +1 -1
- package/lib/tags-input/index.js +3 -11
- package/lib/tags-input/index.js.map +1 -1
- package/lib/two-choice.js +1 -14
- package/lib/two-choice.js.map +1 -1
- package/lib/with-stateful-model.js +1 -3
- package/lib/with-stateful-model.js.map +1 -1
- package/package.json +6 -6
- package/src/__tests__/alert-dialog.test.jsx +13 -113
- package/src/__tests__/checkbox.test.jsx +17 -114
- package/src/__tests__/form-section.test.jsx +2 -8
- package/src/__tests__/help.test.jsx +18 -18
- package/src/__tests__/input.test.jsx +22 -58
- package/src/__tests__/langs.test.jsx +15 -96
- package/src/__tests__/number-text-field-custom.test.jsx +34 -217
- package/src/__tests__/number-text-field.test.jsx +21 -99
- package/src/__tests__/radio-with-label.test.jsx +19 -123
- package/src/__tests__/settings-panel.test.js +1 -1
- package/src/__tests__/settings.test.jsx +17 -80
- package/src/__tests__/tabs.test.jsx +2 -7
- package/src/__tests__/with-stateful-model.test.jsx +3 -9
- package/src/alert-dialog.jsx +19 -2
- package/src/checkbox.jsx +1 -9
- package/src/choice-configuration/__tests__/feedback-menu.test.jsx +6 -18
- package/src/choice-configuration/feedback-menu.jsx +7 -1
- package/src/choice-utils.js +1 -1
- package/src/feedback-config/__tests__/feedback-config.test.jsx +2 -2
- package/src/feedback-config/index.jsx +2 -1
- package/src/index.js +2 -2
- package/src/inputs.jsx +3 -16
- package/src/langs.jsx +9 -4
- package/src/layout/config-layout.jsx +2 -3
- package/src/number-text-field-custom.jsx +5 -3
- package/src/number-text-field.jsx +3 -2
- package/src/radio-with-label.jsx +1 -5
- package/src/settings/display-size.jsx +1 -1
- package/src/settings/index.js +1 -1
- package/src/settings/panel.jsx +4 -5
- package/src/settings/settings-radio-label.jsx +1 -5
- package/src/settings/toggle.jsx +1 -5
- package/src/tags-input/__tests__/index.test.jsx +1 -1
- package/src/tags-input/index.jsx +1 -1
|
@@ -103,13 +103,7 @@ describe('Langs Component', () => {
|
|
|
103
103
|
|
|
104
104
|
it('does not call onChange if no onChange prop provided', async () => {
|
|
105
105
|
const user = userEvent.setup();
|
|
106
|
-
const { container } = render(
|
|
107
|
-
<Langs
|
|
108
|
-
uid="1"
|
|
109
|
-
langs={['en-US', 'es-ES']}
|
|
110
|
-
selected="en-US"
|
|
111
|
-
/>,
|
|
112
|
-
);
|
|
106
|
+
const { container } = render(<Langs uid="1" langs={['en-US', 'es-ES']} selected="en-US" />);
|
|
113
107
|
|
|
114
108
|
const select = screen.getByRole('combobox');
|
|
115
109
|
await user.click(select);
|
|
@@ -130,13 +124,7 @@ describe('Langs Component', () => {
|
|
|
130
124
|
});
|
|
131
125
|
|
|
132
126
|
it('generates random uid if not provided', () => {
|
|
133
|
-
const { container } = render(
|
|
134
|
-
<Langs
|
|
135
|
-
onChange={onChange}
|
|
136
|
-
langs={['en-US', 'es-ES']}
|
|
137
|
-
selected="en-US"
|
|
138
|
-
/>,
|
|
139
|
-
);
|
|
127
|
+
const { container } = render(<Langs onChange={onChange} langs={['en-US', 'es-ES']} selected="en-US" />);
|
|
140
128
|
|
|
141
129
|
const select = screen.getByRole('combobox');
|
|
142
130
|
expect(select).toBeInTheDocument();
|
|
@@ -164,14 +152,7 @@ describe('Langs Component', () => {
|
|
|
164
152
|
let select = screen.getByRole('combobox');
|
|
165
153
|
expect(select).toHaveTextContent('en-US');
|
|
166
154
|
|
|
167
|
-
rerender(
|
|
168
|
-
<Langs
|
|
169
|
-
uid="1"
|
|
170
|
-
onChange={onChange}
|
|
171
|
-
langs={['en-US', 'es-ES']}
|
|
172
|
-
selected="es-ES"
|
|
173
|
-
/>,
|
|
174
|
-
);
|
|
155
|
+
rerender(<Langs uid="1" onChange={onChange} langs={['en-US', 'es-ES']} selected="es-ES" />);
|
|
175
156
|
|
|
176
157
|
select = screen.getByRole('combobox');
|
|
177
158
|
expect(select).toHaveTextContent('es-ES');
|
|
@@ -184,14 +165,7 @@ describe('Langs Component', () => {
|
|
|
184
165
|
selected: 'en-US',
|
|
185
166
|
});
|
|
186
167
|
|
|
187
|
-
rerender(
|
|
188
|
-
<Langs
|
|
189
|
-
uid="1"
|
|
190
|
-
onChange={onChange}
|
|
191
|
-
langs={['en-US', 'es-ES', 'fr-FR']}
|
|
192
|
-
selected="en-US"
|
|
193
|
-
/>,
|
|
194
|
-
);
|
|
168
|
+
rerender(<Langs uid="1" onChange={onChange} langs={['en-US', 'es-ES', 'fr-FR']} selected="en-US" />);
|
|
195
169
|
|
|
196
170
|
const select = screen.getByRole('combobox');
|
|
197
171
|
expect(select).toHaveTextContent('en-US');
|
|
@@ -266,9 +240,7 @@ describe('LanguageControls Component', () => {
|
|
|
266
240
|
});
|
|
267
241
|
|
|
268
242
|
it('applies custom className', () => {
|
|
269
|
-
const { container } = render(
|
|
270
|
-
<LanguageControls {...defaultProps} className="custom-class" />,
|
|
271
|
-
);
|
|
243
|
+
const { container } = render(<LanguageControls {...defaultProps} className="custom-class" />);
|
|
272
244
|
|
|
273
245
|
expect(container.querySelector('.custom-class')).toBeInTheDocument();
|
|
274
246
|
});
|
|
@@ -279,13 +251,7 @@ describe('LanguageControls Component', () => {
|
|
|
279
251
|
const user = userEvent.setup();
|
|
280
252
|
const onActiveLangChange = jest.fn();
|
|
281
253
|
|
|
282
|
-
render(
|
|
283
|
-
<LanguageControls
|
|
284
|
-
{...defaultProps}
|
|
285
|
-
activeLang="en-US"
|
|
286
|
-
onActiveLangChange={onActiveLangChange}
|
|
287
|
-
/>,
|
|
288
|
-
);
|
|
254
|
+
render(<LanguageControls {...defaultProps} activeLang="en-US" onActiveLangChange={onActiveLangChange} />);
|
|
289
255
|
|
|
290
256
|
const selects = screen.getAllByRole('combobox');
|
|
291
257
|
const activeSelect = selects[0];
|
|
@@ -300,13 +266,7 @@ describe('LanguageControls Component', () => {
|
|
|
300
266
|
const user = userEvent.setup();
|
|
301
267
|
const onDefaultLangChange = jest.fn();
|
|
302
268
|
|
|
303
|
-
render(
|
|
304
|
-
<LanguageControls
|
|
305
|
-
{...defaultProps}
|
|
306
|
-
defaultLang="en-US"
|
|
307
|
-
onDefaultLangChange={onDefaultLangChange}
|
|
308
|
-
/>,
|
|
309
|
-
);
|
|
269
|
+
render(<LanguageControls {...defaultProps} defaultLang="en-US" onDefaultLangChange={onDefaultLangChange} />);
|
|
310
270
|
|
|
311
271
|
const selects = screen.getAllByRole('combobox');
|
|
312
272
|
const defaultSelect = selects[1];
|
|
@@ -346,12 +306,7 @@ describe('LanguageControls Component', () => {
|
|
|
346
306
|
describe('props handling', () => {
|
|
347
307
|
it('displays correct language options', async () => {
|
|
348
308
|
const user = userEvent.setup();
|
|
349
|
-
render(
|
|
350
|
-
<LanguageControls
|
|
351
|
-
{...defaultProps}
|
|
352
|
-
langs={['en-US', 'es-ES', 'fr-FR', 'de-DE']}
|
|
353
|
-
/>,
|
|
354
|
-
);
|
|
309
|
+
render(<LanguageControls {...defaultProps} langs={['en-US', 'es-ES', 'fr-FR', 'de-DE']} />);
|
|
355
310
|
|
|
356
311
|
const selects = screen.getAllByRole('combobox');
|
|
357
312
|
await user.click(selects[0]);
|
|
@@ -364,13 +319,7 @@ describe('LanguageControls Component', () => {
|
|
|
364
319
|
|
|
365
320
|
it('maintains different active and default languages', async () => {
|
|
366
321
|
const user = userEvent.setup();
|
|
367
|
-
render(
|
|
368
|
-
<LanguageControls
|
|
369
|
-
{...defaultProps}
|
|
370
|
-
activeLang="es-ES"
|
|
371
|
-
defaultLang="en-US"
|
|
372
|
-
/>,
|
|
373
|
-
);
|
|
322
|
+
render(<LanguageControls {...defaultProps} activeLang="es-ES" defaultLang="en-US" />);
|
|
374
323
|
|
|
375
324
|
const selects = screen.getAllByRole('combobox');
|
|
376
325
|
expect(selects[0]).toHaveTextContent('es-ES');
|
|
@@ -380,44 +329,24 @@ describe('LanguageControls Component', () => {
|
|
|
380
329
|
|
|
381
330
|
describe('updates', () => {
|
|
382
331
|
it('updates when activeLang prop changes', () => {
|
|
383
|
-
const { rerender } = render(
|
|
384
|
-
<LanguageControls
|
|
385
|
-
{...defaultProps}
|
|
386
|
-
activeLang="en-US"
|
|
387
|
-
/>,
|
|
388
|
-
);
|
|
332
|
+
const { rerender } = render(<LanguageControls {...defaultProps} activeLang="en-US" />);
|
|
389
333
|
|
|
390
334
|
let selects = screen.getAllByRole('combobox');
|
|
391
335
|
expect(selects[0]).toHaveTextContent('en-US');
|
|
392
336
|
|
|
393
|
-
rerender(
|
|
394
|
-
<LanguageControls
|
|
395
|
-
{...defaultProps}
|
|
396
|
-
activeLang="es-ES"
|
|
397
|
-
/>,
|
|
398
|
-
);
|
|
337
|
+
rerender(<LanguageControls {...defaultProps} activeLang="es-ES" />);
|
|
399
338
|
|
|
400
339
|
selects = screen.getAllByRole('combobox');
|
|
401
340
|
expect(selects[0]).toHaveTextContent('es-ES');
|
|
402
341
|
});
|
|
403
342
|
|
|
404
343
|
it('updates when defaultLang prop changes', () => {
|
|
405
|
-
const { rerender } = render(
|
|
406
|
-
<LanguageControls
|
|
407
|
-
{...defaultProps}
|
|
408
|
-
defaultLang="en-US"
|
|
409
|
-
/>,
|
|
410
|
-
);
|
|
344
|
+
const { rerender } = render(<LanguageControls {...defaultProps} defaultLang="en-US" />);
|
|
411
345
|
|
|
412
346
|
let selects = screen.getAllByRole('combobox');
|
|
413
347
|
expect(selects[1]).toHaveTextContent('en-US');
|
|
414
348
|
|
|
415
|
-
rerender(
|
|
416
|
-
<LanguageControls
|
|
417
|
-
{...defaultProps}
|
|
418
|
-
defaultLang="fr-FR"
|
|
419
|
-
/>,
|
|
420
|
-
);
|
|
349
|
+
rerender(<LanguageControls {...defaultProps} defaultLang="fr-FR" />);
|
|
421
350
|
|
|
422
351
|
selects = screen.getAllByRole('combobox');
|
|
423
352
|
expect(selects[1]).toHaveTextContent('fr-FR');
|
|
@@ -425,19 +354,9 @@ describe('LanguageControls Component', () => {
|
|
|
425
354
|
|
|
426
355
|
it('updates when langs prop changes', async () => {
|
|
427
356
|
const user = userEvent.setup();
|
|
428
|
-
const { rerender } = render(
|
|
429
|
-
<LanguageControls
|
|
430
|
-
{...defaultProps}
|
|
431
|
-
langs={['en-US', 'es-ES']}
|
|
432
|
-
/>,
|
|
433
|
-
);
|
|
357
|
+
const { rerender } = render(<LanguageControls {...defaultProps} langs={['en-US', 'es-ES']} />);
|
|
434
358
|
|
|
435
|
-
rerender(
|
|
436
|
-
<LanguageControls
|
|
437
|
-
{...defaultProps}
|
|
438
|
-
langs={['en-US', 'es-ES', 'fr-FR']}
|
|
439
|
-
/>,
|
|
440
|
-
);
|
|
359
|
+
rerender(<LanguageControls {...defaultProps} langs={['en-US', 'es-ES', 'fr-FR']} />);
|
|
441
360
|
|
|
442
361
|
const selects = screen.getAllByRole('combobox');
|
|
443
362
|
await user.click(selects[0]);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { render, screen, waitFor
|
|
2
|
+
import { fireEvent, render, screen, waitFor } from '@testing-library/react';
|
|
3
3
|
import userEvent from '@testing-library/user-event';
|
|
4
4
|
import { NumberTextFieldCustom } from '../number-text-field-custom';
|
|
5
5
|
|
|
@@ -21,12 +21,7 @@ describe('NumberTextFieldCustom', () => {
|
|
|
21
21
|
});
|
|
22
22
|
|
|
23
23
|
it('renders with custom label', () => {
|
|
24
|
-
render(
|
|
25
|
-
<NumberTextFieldCustom
|
|
26
|
-
{...defaultProps}
|
|
27
|
-
label="Custom Label"
|
|
28
|
-
/>,
|
|
29
|
-
);
|
|
24
|
+
render(<NumberTextFieldCustom {...defaultProps} label="Custom Label" />);
|
|
30
25
|
expect(screen.getByLabelText('Custom Label')).toBeInTheDocument();
|
|
31
26
|
});
|
|
32
27
|
|
|
@@ -37,112 +32,59 @@ describe('NumberTextFieldCustom', () => {
|
|
|
37
32
|
});
|
|
38
33
|
|
|
39
34
|
it('renders with custom className', () => {
|
|
40
|
-
const { container } = render(
|
|
41
|
-
<NumberTextFieldCustom
|
|
42
|
-
{...defaultProps}
|
|
43
|
-
className="custom-class"
|
|
44
|
-
/>,
|
|
45
|
-
);
|
|
35
|
+
const { container } = render(<NumberTextFieldCustom {...defaultProps} className="custom-class" />);
|
|
46
36
|
expect(container.querySelector('.custom-class')).toBeInTheDocument();
|
|
47
37
|
});
|
|
48
38
|
|
|
49
39
|
it('renders with custom inputClassName', () => {
|
|
50
|
-
const { container } = render(
|
|
51
|
-
<NumberTextFieldCustom
|
|
52
|
-
{...defaultProps}
|
|
53
|
-
inputClassName="input-class"
|
|
54
|
-
/>,
|
|
55
|
-
);
|
|
40
|
+
const { container } = render(<NumberTextFieldCustom {...defaultProps} inputClassName="input-class" />);
|
|
56
41
|
expect(container.querySelector('.input-class')).toBeInTheDocument();
|
|
57
42
|
});
|
|
58
43
|
|
|
59
44
|
it('renders as disabled when disabled prop is true', () => {
|
|
60
|
-
render(
|
|
61
|
-
<NumberTextFieldCustom
|
|
62
|
-
{...defaultProps}
|
|
63
|
-
disabled={true}
|
|
64
|
-
/>,
|
|
65
|
-
);
|
|
45
|
+
render(<NumberTextFieldCustom {...defaultProps} disabled={true} />);
|
|
66
46
|
const input = screen.getByRole('spinbutton');
|
|
67
47
|
expect(input).toBeDisabled();
|
|
68
48
|
});
|
|
69
49
|
|
|
70
50
|
it('renders with error styling when error is true', () => {
|
|
71
|
-
render(
|
|
72
|
-
<NumberTextFieldCustom
|
|
73
|
-
{...defaultProps}
|
|
74
|
-
error={true}
|
|
75
|
-
/>,
|
|
76
|
-
);
|
|
51
|
+
render(<NumberTextFieldCustom {...defaultProps} error={true} />);
|
|
77
52
|
const input = screen.getByRole('spinbutton');
|
|
78
53
|
expect(input).toHaveAttribute('aria-invalid', 'true');
|
|
79
54
|
});
|
|
80
55
|
|
|
81
56
|
it('renders helper text when provided', () => {
|
|
82
|
-
render(
|
|
83
|
-
<NumberTextFieldCustom
|
|
84
|
-
{...defaultProps}
|
|
85
|
-
helperText="This is a helper text"
|
|
86
|
-
/>,
|
|
87
|
-
);
|
|
57
|
+
render(<NumberTextFieldCustom {...defaultProps} helperText="This is a helper text" />);
|
|
88
58
|
expect(screen.getByText('This is a helper text')).toBeInTheDocument();
|
|
89
59
|
});
|
|
90
60
|
|
|
91
61
|
it('renders with different variant', () => {
|
|
92
|
-
render(
|
|
93
|
-
<NumberTextFieldCustom
|
|
94
|
-
{...defaultProps}
|
|
95
|
-
variant="outlined"
|
|
96
|
-
/>,
|
|
97
|
-
);
|
|
62
|
+
render(<NumberTextFieldCustom {...defaultProps} variant="outlined" />);
|
|
98
63
|
const input = screen.getByRole('spinbutton');
|
|
99
64
|
expect(input).toBeInTheDocument();
|
|
100
65
|
});
|
|
101
66
|
|
|
102
67
|
it('renders with text alignment', () => {
|
|
103
|
-
const { container } = render(
|
|
104
|
-
<NumberTextFieldCustom
|
|
105
|
-
{...defaultProps}
|
|
106
|
-
textAlign="left"
|
|
107
|
-
/>,
|
|
108
|
-
);
|
|
68
|
+
const { container } = render(<NumberTextFieldCustom {...defaultProps} textAlign="left" />);
|
|
109
69
|
expect(container.querySelector('input')).toBeInTheDocument();
|
|
110
70
|
});
|
|
111
71
|
});
|
|
112
72
|
|
|
113
73
|
describe('custom values', () => {
|
|
114
74
|
it('accepts custom values array', () => {
|
|
115
|
-
render(
|
|
116
|
-
<NumberTextFieldCustom
|
|
117
|
-
{...defaultProps}
|
|
118
|
-
customValues={['small', 'medium', 'large']}
|
|
119
|
-
value="medium"
|
|
120
|
-
/>,
|
|
121
|
-
);
|
|
75
|
+
render(<NumberTextFieldCustom {...defaultProps} customValues={['small', 'medium', 'large']} value="medium" />);
|
|
122
76
|
const input = screen.getByRole('spinbutton');
|
|
123
77
|
expect(input).toBeInTheDocument();
|
|
124
78
|
});
|
|
125
79
|
|
|
126
80
|
it('handles empty custom values array', () => {
|
|
127
|
-
render(
|
|
128
|
-
<NumberTextFieldCustom
|
|
129
|
-
{...defaultProps}
|
|
130
|
-
customValues={[]}
|
|
131
|
-
value={5}
|
|
132
|
-
/>,
|
|
133
|
-
);
|
|
81
|
+
render(<NumberTextFieldCustom {...defaultProps} customValues={[]} value={5} />);
|
|
134
82
|
const input = screen.getByRole('spinbutton');
|
|
135
83
|
expect(input).toHaveValue(5);
|
|
136
84
|
});
|
|
137
85
|
|
|
138
86
|
it('displays custom value when selected', () => {
|
|
139
|
-
render(
|
|
140
|
-
<NumberTextFieldCustom
|
|
141
|
-
{...defaultProps}
|
|
142
|
-
customValues={['auto', 'fixed', 'dynamic']}
|
|
143
|
-
value="fixed"
|
|
144
|
-
/>,
|
|
145
|
-
);
|
|
87
|
+
render(<NumberTextFieldCustom {...defaultProps} customValues={['auto', 'fixed', 'dynamic']} value="fixed" />);
|
|
146
88
|
const input = screen.getByRole('spinbutton');
|
|
147
89
|
expect(input).toBeInTheDocument();
|
|
148
90
|
});
|
|
@@ -151,40 +93,20 @@ describe('NumberTextFieldCustom', () => {
|
|
|
151
93
|
describe('step functionality', () => {
|
|
152
94
|
it('uses default step of 1', () => {
|
|
153
95
|
const onChange = jest.fn();
|
|
154
|
-
render(
|
|
155
|
-
<NumberTextFieldCustom
|
|
156
|
-
{...defaultProps}
|
|
157
|
-
value={5}
|
|
158
|
-
onChange={onChange}
|
|
159
|
-
/>,
|
|
160
|
-
);
|
|
96
|
+
render(<NumberTextFieldCustom {...defaultProps} value={5} onChange={onChange} />);
|
|
161
97
|
expect(screen.getByRole('spinbutton')).toBeInTheDocument();
|
|
162
98
|
});
|
|
163
99
|
|
|
164
100
|
it('uses custom step value', () => {
|
|
165
101
|
const onChange = jest.fn();
|
|
166
|
-
render(
|
|
167
|
-
<NumberTextFieldCustom
|
|
168
|
-
{...defaultProps}
|
|
169
|
-
value={5}
|
|
170
|
-
step={0.5}
|
|
171
|
-
onChange={onChange}
|
|
172
|
-
/>,
|
|
173
|
-
);
|
|
102
|
+
render(<NumberTextFieldCustom {...defaultProps} value={5} step={0.5} onChange={onChange} />);
|
|
174
103
|
expect(screen.getByRole('spinbutton')).toBeInTheDocument();
|
|
175
104
|
});
|
|
176
105
|
|
|
177
106
|
it('increments value by step with add button', async () => {
|
|
178
107
|
const user = userEvent.setup();
|
|
179
108
|
const onChange = jest.fn();
|
|
180
|
-
render(
|
|
181
|
-
<NumberTextFieldCustom
|
|
182
|
-
{...defaultProps}
|
|
183
|
-
value={5}
|
|
184
|
-
step={2}
|
|
185
|
-
onChange={onChange}
|
|
186
|
-
/>,
|
|
187
|
-
);
|
|
109
|
+
render(<NumberTextFieldCustom {...defaultProps} value={5} step={2} onChange={onChange} />);
|
|
188
110
|
|
|
189
111
|
const buttons = screen.getAllByRole('button');
|
|
190
112
|
const addButton = buttons.find((btn) => btn.querySelector('[data-testid], svg'));
|
|
@@ -197,14 +119,7 @@ describe('NumberTextFieldCustom', () => {
|
|
|
197
119
|
it('decrements value by step with remove button', async () => {
|
|
198
120
|
const user = userEvent.setup();
|
|
199
121
|
const onChange = jest.fn();
|
|
200
|
-
render(
|
|
201
|
-
<NumberTextFieldCustom
|
|
202
|
-
{...defaultProps}
|
|
203
|
-
value={5}
|
|
204
|
-
step={1}
|
|
205
|
-
onChange={onChange}
|
|
206
|
-
/>,
|
|
207
|
-
);
|
|
122
|
+
render(<NumberTextFieldCustom {...defaultProps} value={5} step={1} onChange={onChange} />);
|
|
208
123
|
|
|
209
124
|
const buttons = screen.getAllByRole('button');
|
|
210
125
|
const removeButton = buttons[0];
|
|
@@ -218,14 +133,7 @@ describe('NumberTextFieldCustom', () => {
|
|
|
218
133
|
describe('min/max constraints', () => {
|
|
219
134
|
it('clamps value to min', async () => {
|
|
220
135
|
const user = userEvent.setup();
|
|
221
|
-
render(
|
|
222
|
-
<NumberTextFieldCustom
|
|
223
|
-
{...defaultProps}
|
|
224
|
-
value={0}
|
|
225
|
-
min={1}
|
|
226
|
-
max={10}
|
|
227
|
-
/>,
|
|
228
|
-
);
|
|
136
|
+
render(<NumberTextFieldCustom {...defaultProps} value={0} min={1} max={10} />);
|
|
229
137
|
|
|
230
138
|
const input = screen.getByRole('spinbutton');
|
|
231
139
|
fireEvent.blur(input);
|
|
@@ -237,14 +145,7 @@ describe('NumberTextFieldCustom', () => {
|
|
|
237
145
|
|
|
238
146
|
it('clamps value to max', async () => {
|
|
239
147
|
const user = userEvent.setup();
|
|
240
|
-
render(
|
|
241
|
-
<NumberTextFieldCustom
|
|
242
|
-
{...defaultProps}
|
|
243
|
-
value={15}
|
|
244
|
-
min={1}
|
|
245
|
-
max={10}
|
|
246
|
-
/>,
|
|
247
|
-
);
|
|
148
|
+
render(<NumberTextFieldCustom {...defaultProps} value={15} min={1} max={10} />);
|
|
248
149
|
|
|
249
150
|
const input = screen.getByRole('spinbutton');
|
|
250
151
|
fireEvent.blur(input);
|
|
@@ -255,89 +156,43 @@ describe('NumberTextFieldCustom', () => {
|
|
|
255
156
|
});
|
|
256
157
|
|
|
257
158
|
it('handles only min constraint', () => {
|
|
258
|
-
render(
|
|
259
|
-
<NumberTextFieldCustom
|
|
260
|
-
{...defaultProps}
|
|
261
|
-
value={5}
|
|
262
|
-
min={3}
|
|
263
|
-
/>,
|
|
264
|
-
);
|
|
159
|
+
render(<NumberTextFieldCustom {...defaultProps} value={5} min={3} />);
|
|
265
160
|
expect(screen.getByRole('spinbutton')).toHaveValue(5);
|
|
266
161
|
});
|
|
267
162
|
|
|
268
163
|
it('handles only max constraint', () => {
|
|
269
|
-
render(
|
|
270
|
-
<NumberTextFieldCustom
|
|
271
|
-
{...defaultProps}
|
|
272
|
-
value={5}
|
|
273
|
-
max={10}
|
|
274
|
-
/>,
|
|
275
|
-
);
|
|
164
|
+
render(<NumberTextFieldCustom {...defaultProps} value={5} max={10} />);
|
|
276
165
|
expect(screen.getByRole('spinbutton')).toHaveValue(5);
|
|
277
166
|
});
|
|
278
167
|
});
|
|
279
168
|
|
|
280
169
|
describe('props updates', () => {
|
|
281
170
|
it('updates value when prop changes', () => {
|
|
282
|
-
const { rerender } = render(
|
|
283
|
-
<NumberTextFieldCustom
|
|
284
|
-
{...defaultProps}
|
|
285
|
-
value={5}
|
|
286
|
-
/>,
|
|
287
|
-
);
|
|
171
|
+
const { rerender } = render(<NumberTextFieldCustom {...defaultProps} value={5} />);
|
|
288
172
|
|
|
289
173
|
let input = screen.getByRole('spinbutton');
|
|
290
174
|
expect(input).toHaveValue(5);
|
|
291
175
|
|
|
292
|
-
rerender(
|
|
293
|
-
<NumberTextFieldCustom
|
|
294
|
-
{...defaultProps}
|
|
295
|
-
value={8}
|
|
296
|
-
/>,
|
|
297
|
-
);
|
|
176
|
+
rerender(<NumberTextFieldCustom {...defaultProps} value={8} />);
|
|
298
177
|
|
|
299
178
|
input = screen.getByRole('spinbutton');
|
|
300
179
|
expect(input).toHaveValue(8);
|
|
301
180
|
});
|
|
302
181
|
|
|
303
182
|
it('updates when label changes', () => {
|
|
304
|
-
const { rerender } = render(
|
|
305
|
-
<NumberTextFieldCustom
|
|
306
|
-
{...defaultProps}
|
|
307
|
-
label="Old Label"
|
|
308
|
-
/>,
|
|
309
|
-
);
|
|
183
|
+
const { rerender } = render(<NumberTextFieldCustom {...defaultProps} label="Old Label" />);
|
|
310
184
|
|
|
311
185
|
expect(screen.getByLabelText('Old Label')).toBeInTheDocument();
|
|
312
186
|
|
|
313
|
-
rerender(
|
|
314
|
-
<NumberTextFieldCustom
|
|
315
|
-
{...defaultProps}
|
|
316
|
-
label="New Label"
|
|
317
|
-
/>,
|
|
318
|
-
);
|
|
187
|
+
rerender(<NumberTextFieldCustom {...defaultProps} label="New Label" />);
|
|
319
188
|
|
|
320
189
|
expect(screen.getByLabelText('New Label')).toBeInTheDocument();
|
|
321
190
|
});
|
|
322
191
|
|
|
323
192
|
it('updates constraints when min/max props change', () => {
|
|
324
|
-
const { rerender } = render(
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
value={5}
|
|
328
|
-
min={1}
|
|
329
|
-
max={10}
|
|
330
|
-
/>,
|
|
331
|
-
);
|
|
332
|
-
|
|
333
|
-
rerender(
|
|
334
|
-
<NumberTextFieldCustom
|
|
335
|
-
{...defaultProps}
|
|
336
|
-
value={5}
|
|
337
|
-
min={1}
|
|
338
|
-
max={8}
|
|
339
|
-
/>,
|
|
340
|
-
);
|
|
193
|
+
const { rerender } = render(<NumberTextFieldCustom {...defaultProps} value={5} min={1} max={10} />);
|
|
194
|
+
|
|
195
|
+
rerender(<NumberTextFieldCustom {...defaultProps} value={5} min={1} max={8} />);
|
|
341
196
|
|
|
342
197
|
expect(screen.getByRole('spinbutton')).toBeInTheDocument();
|
|
343
198
|
});
|
|
@@ -345,58 +200,30 @@ describe('NumberTextFieldCustom', () => {
|
|
|
345
200
|
|
|
346
201
|
describe('text alignment', () => {
|
|
347
202
|
it('renders with center alignment (default)', () => {
|
|
348
|
-
render(
|
|
349
|
-
<NumberTextFieldCustom
|
|
350
|
-
{...defaultProps}
|
|
351
|
-
value={5}
|
|
352
|
-
/>,
|
|
353
|
-
);
|
|
203
|
+
render(<NumberTextFieldCustom {...defaultProps} value={5} />);
|
|
354
204
|
expect(screen.getByRole('spinbutton')).toBeInTheDocument();
|
|
355
205
|
});
|
|
356
206
|
|
|
357
207
|
it('renders with custom left alignment', () => {
|
|
358
|
-
render(
|
|
359
|
-
<NumberTextFieldCustom
|
|
360
|
-
{...defaultProps}
|
|
361
|
-
value={5}
|
|
362
|
-
textAlign="left"
|
|
363
|
-
/>,
|
|
364
|
-
);
|
|
208
|
+
render(<NumberTextFieldCustom {...defaultProps} value={5} textAlign="left" />);
|
|
365
209
|
expect(screen.getByRole('spinbutton')).toBeInTheDocument();
|
|
366
210
|
});
|
|
367
211
|
|
|
368
212
|
it('renders with right alignment', () => {
|
|
369
|
-
render(
|
|
370
|
-
<NumberTextFieldCustom
|
|
371
|
-
{...defaultProps}
|
|
372
|
-
value={5}
|
|
373
|
-
textAlign="right"
|
|
374
|
-
/>,
|
|
375
|
-
);
|
|
213
|
+
render(<NumberTextFieldCustom {...defaultProps} value={5} textAlign="right" />);
|
|
376
214
|
expect(screen.getByRole('spinbutton')).toBeInTheDocument();
|
|
377
215
|
});
|
|
378
216
|
});
|
|
379
217
|
|
|
380
218
|
describe('type property', () => {
|
|
381
219
|
it('renders as number type by default', () => {
|
|
382
|
-
const { container } = render(
|
|
383
|
-
<NumberTextFieldCustom
|
|
384
|
-
{...defaultProps}
|
|
385
|
-
value={5}
|
|
386
|
-
/>,
|
|
387
|
-
);
|
|
220
|
+
const { container } = render(<NumberTextFieldCustom {...defaultProps} value={5} />);
|
|
388
221
|
const input = container.querySelector('input[type="number"]');
|
|
389
222
|
expect(input).toBeInTheDocument();
|
|
390
223
|
});
|
|
391
224
|
|
|
392
225
|
it('can render with custom type', () => {
|
|
393
|
-
const { container } = render(
|
|
394
|
-
<NumberTextFieldCustom
|
|
395
|
-
{...defaultProps}
|
|
396
|
-
value={5}
|
|
397
|
-
type="text"
|
|
398
|
-
/>,
|
|
399
|
-
);
|
|
226
|
+
const { container } = render(<NumberTextFieldCustom {...defaultProps} value={5} type="text" />);
|
|
400
227
|
const input = container.querySelector('input');
|
|
401
228
|
expect(input).toBeInTheDocument();
|
|
402
229
|
});
|
|
@@ -409,23 +236,13 @@ describe('NumberTextFieldCustom', () => {
|
|
|
409
236
|
});
|
|
410
237
|
|
|
411
238
|
it('has proper label association', () => {
|
|
412
|
-
render(
|
|
413
|
-
<NumberTextFieldCustom
|
|
414
|
-
{...defaultProps}
|
|
415
|
-
label="Price"
|
|
416
|
-
/>,
|
|
417
|
-
);
|
|
239
|
+
render(<NumberTextFieldCustom {...defaultProps} label="Price" />);
|
|
418
240
|
expect(screen.getByLabelText('Price')).toBeInTheDocument();
|
|
419
241
|
});
|
|
420
242
|
|
|
421
243
|
it('supports keyboard navigation', async () => {
|
|
422
244
|
const user = userEvent.setup();
|
|
423
|
-
render(
|
|
424
|
-
<NumberTextFieldCustom
|
|
425
|
-
{...defaultProps}
|
|
426
|
-
value={5}
|
|
427
|
-
/>,
|
|
428
|
-
);
|
|
245
|
+
render(<NumberTextFieldCustom {...defaultProps} value={5} />);
|
|
429
246
|
|
|
430
247
|
const input = screen.getByRole('spinbutton');
|
|
431
248
|
input.focus();
|