@transferwise/components 46.38.0 → 46.39.0
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/build/index.js +22 -42
- package/build/index.js.map +1 -1
- package/build/index.mjs +22 -42
- package/build/index.mjs.map +1 -1
- package/build/types/flowNavigation/backButton/BackButton.d.ts +5 -17
- package/build/types/flowNavigation/backButton/BackButton.d.ts.map +1 -1
- package/build/types/flowNavigation/backButton/index.d.ts +2 -2
- package/build/types/flowNavigation/backButton/index.d.ts.map +1 -1
- package/build/types/index.d.ts +1 -0
- package/build/types/index.d.ts.map +1 -1
- package/build/types/info/Info.d.ts +2 -2
- package/build/types/info/Info.d.ts.map +1 -1
- package/build/types/info/index.d.ts +1 -1
- package/build/types/info/index.d.ts.map +1 -1
- package/build/types/overlayHeader/OverlayHeader.d.ts +9 -18
- package/build/types/overlayHeader/OverlayHeader.d.ts.map +1 -1
- package/build/types/overlayHeader/index.d.ts +2 -1
- package/build/types/overlayHeader/index.d.ts.map +1 -1
- package/package.json +24 -26
- package/src/accordion/Accordion.spec.js +5 -5
- package/src/accordion/AccordionItem/AccordionItem.spec.js +2 -2
- package/src/actionButton/ActionButton.spec.tsx +4 -5
- package/src/alert/Alert.spec.tsx +4 -4
- package/src/alert/Alert.story.tsx +6 -5
- package/src/button/Button.spec.js +4 -5
- package/src/card/Card.spec.tsx +4 -4
- package/src/carousel/Carousel.spec.tsx +17 -17
- package/src/checkbox/Checkbox.spec.tsx +0 -2
- package/src/checkboxButton/CheckboxButton.spec.tsx +0 -2
- package/src/checkboxOption/CheckboxOption.spec.tsx +0 -2
- package/src/chevron/Chevron.spec.tsx +0 -1
- package/src/chips/Chips.spec.tsx +0 -1
- package/src/chips/Chips.story.tsx +5 -3
- package/src/circularButton/CircularButton.spec.tsx +4 -5
- package/src/common/RadioButton/RadioButton.spec.tsx +2 -2
- package/src/common/card/Card.story.tsx +1 -0
- package/src/common/closeButton/CloseButton.spec.tsx +0 -1
- package/src/common/flowHeader/FlowHeader.spec.tsx +0 -1
- package/src/dateInput/DateInput.story.tsx +21 -16
- package/src/dateLookup/DateLookup.rtl.spec.tsx +18 -16
- package/src/dateLookup/DateLookup.testingLibrary.spec.js +47 -44
- package/src/dateLookup/DateLookup.tests.story.tsx +4 -2
- package/src/decision/Decision.spec.js +0 -2
- package/src/dimmer/Dimmer.rtl.spec.js +10 -10
- package/src/drawer/Drawer.rtl.spec.tsx +2 -2
- package/src/emphasis/Emphasis.spec.tsx +0 -1
- package/src/field/Field.spec.tsx +2 -2
- package/src/flowNavigation/FlowNavigation.spec.js +0 -2
- package/src/flowNavigation/animatedLabel/AnimatedLabel.spec.js +0 -1
- package/src/flowNavigation/backButton/BackButton.tsx +29 -0
- package/src/flowNavigation/backButton/index.ts +2 -0
- package/src/header/Header.spec.tsx +6 -6
- package/src/image/Image.spec.tsx +0 -1
- package/src/index.ts +1 -0
- package/src/info/Info.story.tsx +15 -9
- package/src/info/Info.tsx +2 -2
- package/src/info/index.ts +1 -1
- package/src/inlineAlert/InlineAlert.spec.tsx +0 -1
- package/src/inputs/SelectInput.spec.tsx +26 -47
- package/src/link/Link.spec.tsx +0 -1
- package/src/listItem/ListItem.spec.tsx +0 -1
- package/src/moneyInput/MoneyInput.rtl.spec.tsx +2 -2
- package/src/moneyInput/MoneyInput.story.tsx +1 -4
- package/src/overlayHeader/{OverlayHeader.spec.js → OverlayHeader.spec.tsx} +1 -1
- package/src/overlayHeader/{OverlayHeader.story.js → OverlayHeader.story.tsx} +10 -2
- package/src/overlayHeader/{OverlayHeader.js → OverlayHeader.tsx} +12 -19
- package/src/overlayHeader/index.ts +2 -0
- package/src/phoneNumberInput/PhoneNumberInput.story.tsx +1 -0
- package/src/popover/Popover.spec.tsx +10 -10
- package/src/progress/Progress.spec.tsx +0 -1
- package/src/progressBar/ProgressBar.spec.tsx +0 -1
- package/src/segmentedControl/SegmentedControl.spec.tsx +10 -11
- package/src/select/Select.spec.js +71 -71
- package/src/test-utils/index.js +1 -1
- package/src/test-utils/jest.setup.js +2 -0
- package/src/tooltip/Tooltip.spec.tsx +15 -16
- package/src/uploadInput/UploadInput.spec.tsx +9 -10
- package/src/uploadInput/UploadInput.story.tsx +8 -180
- package/src/uploadInput/UploadInput.tests.story.tsx +212 -0
- package/src/uploadInput/uploadButton/UploadButton.spec.tsx +4 -4
- package/src/uploadInput/uploadItem/UploadItem.spec.tsx +4 -4
- package/src/flowNavigation/backButton/BackButton.js +0 -32
- package/src/flowNavigation/backButton/BackButton.spec.js +0 -16
- package/src/flowNavigation/backButton/__snapshots__/BackButton.spec.js.snap +0 -37
- package/src/flowNavigation/backButton/index.js +0 -3
- package/src/overlayHeader/index.js +0 -1
- /package/src/overlayHeader/__snapshots__/{OverlayHeader.spec.js.snap → OverlayHeader.spec.tsx.snap} +0 -0
|
@@ -42,16 +42,16 @@ describe('Select', () => {
|
|
|
42
42
|
global.requestAnimationFrame = originalRAF;
|
|
43
43
|
});
|
|
44
44
|
|
|
45
|
-
const openSelect = (container) => {
|
|
45
|
+
const openSelect = async (container) => {
|
|
46
46
|
const button = screen.getByRole('button');
|
|
47
|
-
userEvent.click(button);
|
|
47
|
+
await userEvent.click(button);
|
|
48
48
|
};
|
|
49
49
|
|
|
50
50
|
describe('search property', () => {
|
|
51
51
|
it('should focus input when dropdown is open', async () => {
|
|
52
52
|
const { container } = render(<Select {...props} search />);
|
|
53
53
|
|
|
54
|
-
openSelect(container);
|
|
54
|
+
await openSelect(container);
|
|
55
55
|
const input = screen.getByPlaceholderText('Search...');
|
|
56
56
|
|
|
57
57
|
expect(input).toHaveFocus();
|
|
@@ -60,7 +60,7 @@ describe('Select', () => {
|
|
|
60
60
|
it('should pass id to search box', async () => {
|
|
61
61
|
const { container } = render(<Select {...props} search id="dummy" />);
|
|
62
62
|
|
|
63
|
-
openSelect(container);
|
|
63
|
+
await openSelect(container);
|
|
64
64
|
const input = screen.getByPlaceholderText('Search...');
|
|
65
65
|
|
|
66
66
|
expect(input).toHaveAttribute('id', 'dummy-searchbox');
|
|
@@ -69,9 +69,9 @@ describe('Select', () => {
|
|
|
69
69
|
it('should filter the options with the default filter function', async () => {
|
|
70
70
|
const { container } = render(<Select {...props} search />);
|
|
71
71
|
|
|
72
|
-
openSelect(container);
|
|
72
|
+
await openSelect(container);
|
|
73
73
|
const input = screen.getByPlaceholderText('Search...');
|
|
74
|
-
userEvent.type(input, 'yo');
|
|
74
|
+
await userEvent.type(input, 'yo');
|
|
75
75
|
|
|
76
76
|
// Not ideal, this higlights accessibility issues.
|
|
77
77
|
expect(container.querySelector('.np-dropdown-item.np-dropdown-item--focused')).toStrictEqual(
|
|
@@ -113,14 +113,14 @@ describe('Select', () => {
|
|
|
113
113
|
beforeEach(async () => {
|
|
114
114
|
const { container } = render(<Select {...props} options={searchableOptions} search />);
|
|
115
115
|
|
|
116
|
-
openSelect(container);
|
|
116
|
+
await openSelect(container);
|
|
117
117
|
|
|
118
118
|
input = screen.getByPlaceholderText('Search...');
|
|
119
119
|
});
|
|
120
120
|
|
|
121
121
|
describe('when searching by label', () => {
|
|
122
|
-
it('should display the search result', () => {
|
|
123
|
-
userEvent.type(input, 'second_label');
|
|
122
|
+
it('should display the search result', async () => {
|
|
123
|
+
await userEvent.type(input, 'second_label');
|
|
124
124
|
|
|
125
125
|
expect(screen.queryByText('first_label')).not.toBeInTheDocument();
|
|
126
126
|
expect(screen.getByText('second_label')).toBeInTheDocument();
|
|
@@ -129,8 +129,8 @@ describe('Select', () => {
|
|
|
129
129
|
});
|
|
130
130
|
|
|
131
131
|
describe('when searching by note', () => {
|
|
132
|
-
it('should display the search result', () => {
|
|
133
|
-
userEvent.type(input, 'third_note');
|
|
132
|
+
it('should display the search result', async () => {
|
|
133
|
+
await userEvent.type(input, 'third_note');
|
|
134
134
|
|
|
135
135
|
expect(screen.queryByText('first_label')).not.toBeInTheDocument();
|
|
136
136
|
expect(screen.queryByText('second_label')).not.toBeInTheDocument();
|
|
@@ -139,8 +139,8 @@ describe('Select', () => {
|
|
|
139
139
|
});
|
|
140
140
|
|
|
141
141
|
describe('when searching by secondary', () => {
|
|
142
|
-
it('should display the search result', () => {
|
|
143
|
-
userEvent.type(input, 'first_secondary');
|
|
142
|
+
it('should display the search result', async () => {
|
|
143
|
+
await userEvent.type(input, 'first_secondary');
|
|
144
144
|
|
|
145
145
|
expect(screen.getByText('first_label')).toBeInTheDocument();
|
|
146
146
|
expect(screen.queryByText('second_label')).not.toBeInTheDocument();
|
|
@@ -149,8 +149,8 @@ describe('Select', () => {
|
|
|
149
149
|
});
|
|
150
150
|
|
|
151
151
|
describe('when searching by currency', () => {
|
|
152
|
-
it('should display the search result', () => {
|
|
153
|
-
userEvent.type(input, 'usd');
|
|
152
|
+
it('should display the search result', async () => {
|
|
153
|
+
await userEvent.type(input, 'usd');
|
|
154
154
|
|
|
155
155
|
expect(screen.queryByText('first_label')).not.toBeInTheDocument();
|
|
156
156
|
expect(screen.getByText('second_label')).toBeInTheDocument();
|
|
@@ -159,8 +159,8 @@ describe('Select', () => {
|
|
|
159
159
|
});
|
|
160
160
|
|
|
161
161
|
describe('when searching by searchStrings', () => {
|
|
162
|
-
it('should display the search result', () => {
|
|
163
|
-
userEvent.type(input, 'third_search_string');
|
|
162
|
+
it('should display the search result', async () => {
|
|
163
|
+
await userEvent.type(input, 'third_search_string');
|
|
164
164
|
|
|
165
165
|
expect(screen.queryByText('first_label')).not.toBeInTheDocument();
|
|
166
166
|
expect(screen.queryByText('second_label')).not.toBeInTheDocument();
|
|
@@ -169,7 +169,7 @@ describe('Select', () => {
|
|
|
169
169
|
});
|
|
170
170
|
});
|
|
171
171
|
|
|
172
|
-
it('should be able to search disabled options', () => {
|
|
172
|
+
it('should be able to search disabled options', async () => {
|
|
173
173
|
const { container } = render(
|
|
174
174
|
<Select
|
|
175
175
|
{...props}
|
|
@@ -180,9 +180,9 @@ describe('Select', () => {
|
|
|
180
180
|
]}
|
|
181
181
|
/>,
|
|
182
182
|
);
|
|
183
|
-
openSelect(container);
|
|
183
|
+
await openSelect(container);
|
|
184
184
|
const input = screen.getByPlaceholderText('Search...');
|
|
185
|
-
userEvent.type(input, 'Disabled');
|
|
185
|
+
await userEvent.type(input, 'Disabled');
|
|
186
186
|
expect(screen.queryByText('Enabled Option')).not.toBeInTheDocument();
|
|
187
187
|
expect(screen.getByText('Disabled Option')).toBeInTheDocument();
|
|
188
188
|
});
|
|
@@ -199,9 +199,9 @@ describe('Select', () => {
|
|
|
199
199
|
/>,
|
|
200
200
|
);
|
|
201
201
|
|
|
202
|
-
openSelect(container);
|
|
202
|
+
await openSelect(container);
|
|
203
203
|
const input = screen.getByPlaceholderText('Search...');
|
|
204
|
-
userEvent.type(input, 'HUF');
|
|
204
|
+
await userEvent.type(input, 'HUF');
|
|
205
205
|
|
|
206
206
|
expect(container.querySelector('.np-dropdown-item.np-dropdown-item--focused')).toStrictEqual(
|
|
207
207
|
container.querySelector('.np-dropdown-item'),
|
|
@@ -224,9 +224,9 @@ describe('Select', () => {
|
|
|
224
224
|
/>,
|
|
225
225
|
);
|
|
226
226
|
|
|
227
|
-
openSelect(container);
|
|
227
|
+
await openSelect(container);
|
|
228
228
|
const input = screen.getByPlaceholderText('Search...');
|
|
229
|
-
userEvent.type(input, 'Tallinn');
|
|
229
|
+
await userEvent.type(input, 'Tallinn');
|
|
230
230
|
|
|
231
231
|
expect(container.querySelector('.np-dropdown-item.np-dropdown-item--focused')).toStrictEqual(
|
|
232
232
|
container.querySelector('.np-dropdown-item'),
|
|
@@ -239,9 +239,9 @@ describe('Select', () => {
|
|
|
239
239
|
it('should filter the options with a custom search function', async () => {
|
|
240
240
|
const searchFunction = jest.fn();
|
|
241
241
|
const { container } = render(<Select {...props} search={searchFunction} />);
|
|
242
|
-
openSelect(container);
|
|
242
|
+
await openSelect(container);
|
|
243
243
|
const input = screen.getByPlaceholderText('Search...');
|
|
244
|
-
userEvent.type(input, 'o');
|
|
244
|
+
await userEvent.type(input, 'o');
|
|
245
245
|
|
|
246
246
|
expect(searchFunction).toHaveBeenCalledTimes(3);
|
|
247
247
|
});
|
|
@@ -249,10 +249,10 @@ describe('Select', () => {
|
|
|
249
249
|
it('should filter the options with a custom search function with 3 results', async () => {
|
|
250
250
|
const searchFunction = (option, searchValue) => option.label.includes(searchValue);
|
|
251
251
|
const { container } = render(<Select {...props} search={searchFunction} />);
|
|
252
|
-
openSelect(container);
|
|
252
|
+
await openSelect(container);
|
|
253
253
|
|
|
254
254
|
const input = screen.getByPlaceholderText('Search...');
|
|
255
|
-
userEvent.type(input, 'o');
|
|
255
|
+
await userEvent.type(input, 'o');
|
|
256
256
|
|
|
257
257
|
expect(screen.getByRole('listbox').children).toHaveLength(3);
|
|
258
258
|
});
|
|
@@ -260,7 +260,7 @@ describe('Select', () => {
|
|
|
260
260
|
|
|
261
261
|
it('show list of options in dropdown (Panel) on desktop', async () => {
|
|
262
262
|
const { container } = render(<Select {...props} />);
|
|
263
|
-
openSelect(container);
|
|
263
|
+
await openSelect(container);
|
|
264
264
|
|
|
265
265
|
const drawer = document.querySelector('.np-panel');
|
|
266
266
|
expect(drawer).toBeInTheDocument();
|
|
@@ -269,7 +269,7 @@ describe('Select', () => {
|
|
|
269
269
|
it('show list of options in Bottom Sheet when on mobile', async () => {
|
|
270
270
|
enableMobileScreen();
|
|
271
271
|
const { container } = render(<Select {...props} />);
|
|
272
|
-
openSelect(container);
|
|
272
|
+
await openSelect(container);
|
|
273
273
|
|
|
274
274
|
const bottomSheet = await screen.findByRole('dialog');
|
|
275
275
|
|
|
@@ -279,7 +279,7 @@ describe('Select', () => {
|
|
|
279
279
|
it('show list of options in Drawer when on mobile and search in enabled', async () => {
|
|
280
280
|
enableMobileScreen();
|
|
281
281
|
const { container } = render(<Select {...props} search />);
|
|
282
|
-
openSelect(container);
|
|
282
|
+
await openSelect(container);
|
|
283
283
|
|
|
284
284
|
await waitFor(() => {
|
|
285
285
|
const drawer = document.querySelector('.np-drawer');
|
|
@@ -289,7 +289,7 @@ describe('Select', () => {
|
|
|
289
289
|
|
|
290
290
|
it('focuses dropdown options when clicked', async () => {
|
|
291
291
|
const { container } = render(<Select {...props} />);
|
|
292
|
-
openSelect(container);
|
|
292
|
+
await openSelect(container);
|
|
293
293
|
|
|
294
294
|
const dropdown = screen.getByRole('listbox');
|
|
295
295
|
expect(dropdown).toHaveFocus();
|
|
@@ -299,7 +299,7 @@ describe('Select', () => {
|
|
|
299
299
|
enableMobileScreen();
|
|
300
300
|
const { container } = render(<Select {...props} onSearchChange={jest.fn()} />);
|
|
301
301
|
|
|
302
|
-
openSelect(container);
|
|
302
|
+
await openSelect(container);
|
|
303
303
|
const input = await screen.findByPlaceholderText('Search...');
|
|
304
304
|
|
|
305
305
|
expect(input).not.toHaveFocus();
|
|
@@ -308,7 +308,7 @@ describe('Select', () => {
|
|
|
308
308
|
it('on not touch device focuses on the search box once opened', async () => {
|
|
309
309
|
const { container } = render(<Select {...props} search onSearchChange={jest.fn()} />);
|
|
310
310
|
|
|
311
|
-
openSelect(container);
|
|
311
|
+
await openSelect(container);
|
|
312
312
|
const input = screen.getByPlaceholderText('Search...');
|
|
313
313
|
|
|
314
314
|
expect(input).toHaveFocus();
|
|
@@ -316,7 +316,7 @@ describe('Select', () => {
|
|
|
316
316
|
|
|
317
317
|
it('renders controls with fallback id', async () => {
|
|
318
318
|
const { container } = render(<Select {...props} />);
|
|
319
|
-
openSelect(container);
|
|
319
|
+
await openSelect(container);
|
|
320
320
|
|
|
321
321
|
const button = screen.getByRole('button');
|
|
322
322
|
const options = screen.getByRole('listbox');
|
|
@@ -327,7 +327,7 @@ describe('Select', () => {
|
|
|
327
327
|
|
|
328
328
|
it('renders controls with passed id', async () => {
|
|
329
329
|
const { container } = render(<Select id="my-select-component" {...props} />);
|
|
330
|
-
openSelect(container);
|
|
330
|
+
await openSelect(container);
|
|
331
331
|
|
|
332
332
|
const button = screen.getByRole('button');
|
|
333
333
|
const options = screen.getByRole('listbox');
|
|
@@ -338,7 +338,7 @@ describe('Select', () => {
|
|
|
338
338
|
|
|
339
339
|
it('renders button with correct aria-controls attribute', async () => {
|
|
340
340
|
const { container } = render(<Select {...props} search onSearchChange={jest.fn()} />);
|
|
341
|
-
openSelect(container);
|
|
341
|
+
await openSelect(container);
|
|
342
342
|
|
|
343
343
|
const button = screen.getByRole('button');
|
|
344
344
|
const options = screen.getByRole('listbox');
|
|
@@ -353,11 +353,11 @@ describe('Select', () => {
|
|
|
353
353
|
it('navigates to the next item', async () => {
|
|
354
354
|
const { container } = render(<Select {...props} />);
|
|
355
355
|
|
|
356
|
-
openSelect(container);
|
|
356
|
+
await openSelect(container);
|
|
357
357
|
|
|
358
358
|
expect(screen.queryByRole('listbox')).toHaveFocus();
|
|
359
359
|
|
|
360
|
-
userEvent.keyboard('[ArrowDown]');
|
|
360
|
+
await userEvent.keyboard('[ArrowDown]');
|
|
361
361
|
|
|
362
362
|
await waitFor(() => {
|
|
363
363
|
expect(screen.queryByRole('option', { name: 'yo' })).toHaveFocus();
|
|
@@ -372,17 +372,17 @@ describe('Select', () => {
|
|
|
372
372
|
/>,
|
|
373
373
|
);
|
|
374
374
|
|
|
375
|
-
openSelect(container);
|
|
375
|
+
await openSelect(container);
|
|
376
376
|
|
|
377
377
|
expect(screen.queryByRole('listbox')).toHaveFocus();
|
|
378
378
|
|
|
379
|
-
userEvent.keyboard('[ArrowDown]');
|
|
379
|
+
await userEvent.keyboard('[ArrowDown]');
|
|
380
380
|
|
|
381
381
|
await waitFor(() => {
|
|
382
382
|
expect(screen.queryByRole('option', { name: 'yo' })).toHaveFocus();
|
|
383
383
|
});
|
|
384
384
|
|
|
385
|
-
userEvent.keyboard('[ArrowDown]');
|
|
385
|
+
await userEvent.keyboard('[ArrowDown]');
|
|
386
386
|
|
|
387
387
|
await waitFor(() => {
|
|
388
388
|
expect(screen.queryByRole('option', { name: 'boi' })).toHaveFocus();
|
|
@@ -392,17 +392,17 @@ describe('Select', () => {
|
|
|
392
392
|
it('cannot navigate past the first list item', async () => {
|
|
393
393
|
const { container } = render(<Select {...props} />);
|
|
394
394
|
|
|
395
|
-
openSelect(container);
|
|
395
|
+
await openSelect(container);
|
|
396
396
|
|
|
397
397
|
expect(screen.queryByRole('listbox')).toHaveFocus();
|
|
398
398
|
|
|
399
|
-
userEvent.keyboard('[ArrowUp]');
|
|
399
|
+
await userEvent.keyboard('[ArrowUp]');
|
|
400
400
|
|
|
401
401
|
await waitFor(() => {
|
|
402
402
|
expect(screen.queryByRole('option', { name: 'yo' })).toHaveFocus();
|
|
403
403
|
});
|
|
404
404
|
|
|
405
|
-
userEvent.keyboard('[ArrowUp]');
|
|
405
|
+
await userEvent.keyboard('[ArrowUp]');
|
|
406
406
|
|
|
407
407
|
await waitFor(() => {
|
|
408
408
|
expect(screen.queryByRole('option', { name: 'yo' })).toHaveFocus();
|
|
@@ -412,29 +412,29 @@ describe('Select', () => {
|
|
|
412
412
|
it('cannot navigate past the last list item', async () => {
|
|
413
413
|
const { container } = render(<Select {...props} />);
|
|
414
414
|
|
|
415
|
-
openSelect(container);
|
|
415
|
+
await openSelect(container);
|
|
416
416
|
|
|
417
417
|
expect(screen.queryByRole('listbox')).toHaveFocus();
|
|
418
418
|
|
|
419
|
-
userEvent.keyboard('[ArrowDown]');
|
|
419
|
+
await userEvent.keyboard('[ArrowDown]');
|
|
420
420
|
|
|
421
421
|
await waitFor(() => {
|
|
422
422
|
expect(screen.queryByRole('option', { name: 'yo' })).toHaveFocus();
|
|
423
423
|
});
|
|
424
424
|
|
|
425
|
-
userEvent.keyboard('[ArrowDown]');
|
|
425
|
+
await userEvent.keyboard('[ArrowDown]');
|
|
426
426
|
|
|
427
427
|
await waitFor(() => {
|
|
428
428
|
expect(screen.queryByRole('option', { name: 'dawg' })).toHaveFocus();
|
|
429
429
|
});
|
|
430
430
|
|
|
431
|
-
userEvent.keyboard('[ArrowDown]');
|
|
431
|
+
await userEvent.keyboard('[ArrowDown]');
|
|
432
432
|
|
|
433
433
|
await waitFor(() => {
|
|
434
434
|
expect(screen.queryByRole('option', { name: 'boi' })).toHaveFocus();
|
|
435
435
|
});
|
|
436
436
|
|
|
437
|
-
userEvent.keyboard('[ArrowDown]');
|
|
437
|
+
await userEvent.keyboard('[ArrowDown]');
|
|
438
438
|
|
|
439
439
|
await waitFor(() => {
|
|
440
440
|
expect(screen.queryByRole('option', { name: 'boi' })).toHaveFocus();
|
|
@@ -445,11 +445,11 @@ describe('Select', () => {
|
|
|
445
445
|
it('maintains focus on search but visually indicates which item is focused with keyboard navigation and selects it on enter', async () => {
|
|
446
446
|
const { container } = render(<Select {...props} search />);
|
|
447
447
|
|
|
448
|
-
openSelect(container);
|
|
448
|
+
await openSelect(container);
|
|
449
449
|
|
|
450
450
|
expect(screen.queryByPlaceholderText('Search...')).toHaveFocus();
|
|
451
451
|
|
|
452
|
-
userEvent.keyboard('[ArrowDown]');
|
|
452
|
+
await userEvent.keyboard('[ArrowDown]');
|
|
453
453
|
|
|
454
454
|
await waitFor(() => {
|
|
455
455
|
expect(screen.queryByRole('option', { name: 'yo' })).toHaveClass(
|
|
@@ -460,7 +460,7 @@ describe('Select', () => {
|
|
|
460
460
|
|
|
461
461
|
expect(screen.queryByPlaceholderText('Search...')).toHaveFocus();
|
|
462
462
|
|
|
463
|
-
userEvent.keyboard('[ArrowDown]');
|
|
463
|
+
await userEvent.keyboard('[ArrowDown]');
|
|
464
464
|
|
|
465
465
|
await waitFor(() => {
|
|
466
466
|
expect(screen.queryByRole('option', { name: 'dawg' })).toHaveClass(
|
|
@@ -471,7 +471,7 @@ describe('Select', () => {
|
|
|
471
471
|
|
|
472
472
|
expect(screen.queryByPlaceholderText('Search...')).toHaveFocus();
|
|
473
473
|
|
|
474
|
-
userEvent.keyboard('[Enter]');
|
|
474
|
+
await userEvent.keyboard('[Enter]');
|
|
475
475
|
|
|
476
476
|
expect(props.onChange).toHaveBeenCalledWith({ label: 'dawg', value: 1 });
|
|
477
477
|
});
|
|
@@ -486,11 +486,11 @@ describe('Select', () => {
|
|
|
486
486
|
it('navigates to the next item', async () => {
|
|
487
487
|
const { container } = render(<Select {...props} />);
|
|
488
488
|
|
|
489
|
-
openSelect(container);
|
|
489
|
+
await openSelect(container);
|
|
490
490
|
|
|
491
491
|
await expect(screen.findByRole('dialog')).resolves.toBeInTheDocument();
|
|
492
492
|
|
|
493
|
-
userEvent.keyboard('[ArrowDown]');
|
|
493
|
+
await userEvent.keyboard('[ArrowDown]');
|
|
494
494
|
|
|
495
495
|
await waitFor(() => {
|
|
496
496
|
expect(screen.queryByRole('option', { name: 'yo' })).toHaveFocus();
|
|
@@ -505,17 +505,17 @@ describe('Select', () => {
|
|
|
505
505
|
/>,
|
|
506
506
|
);
|
|
507
507
|
|
|
508
|
-
openSelect(container);
|
|
508
|
+
await openSelect(container);
|
|
509
509
|
|
|
510
510
|
await expect(screen.findByRole('dialog')).resolves.toBeInTheDocument();
|
|
511
511
|
|
|
512
|
-
userEvent.keyboard('[ArrowDown]');
|
|
512
|
+
await userEvent.keyboard('[ArrowDown]');
|
|
513
513
|
|
|
514
514
|
await waitFor(() => {
|
|
515
515
|
expect(screen.queryByRole('option', { name: 'yo' })).toHaveFocus();
|
|
516
516
|
});
|
|
517
517
|
|
|
518
|
-
userEvent.keyboard('[ArrowDown]');
|
|
518
|
+
await userEvent.keyboard('[ArrowDown]');
|
|
519
519
|
|
|
520
520
|
await waitFor(() => {
|
|
521
521
|
expect(screen.queryByRole('option', { name: 'boi' })).toHaveFocus();
|
|
@@ -525,17 +525,17 @@ describe('Select', () => {
|
|
|
525
525
|
it('cannot navigate past the first list item', async () => {
|
|
526
526
|
const { container } = render(<Select {...props} />);
|
|
527
527
|
|
|
528
|
-
openSelect(container);
|
|
528
|
+
await openSelect(container);
|
|
529
529
|
|
|
530
530
|
await expect(screen.findByRole('dialog')).resolves.toBeInTheDocument();
|
|
531
531
|
|
|
532
|
-
userEvent.keyboard('[ArrowUp]');
|
|
532
|
+
await userEvent.keyboard('[ArrowUp]');
|
|
533
533
|
|
|
534
534
|
await waitFor(() => {
|
|
535
535
|
expect(screen.queryByRole('option', { name: 'yo' })).toHaveFocus();
|
|
536
536
|
});
|
|
537
537
|
|
|
538
|
-
userEvent.keyboard('[ArrowUp]');
|
|
538
|
+
await userEvent.keyboard('[ArrowUp]');
|
|
539
539
|
|
|
540
540
|
await waitFor(() => {
|
|
541
541
|
expect(screen.queryByRole('option', { name: 'yo' })).toHaveFocus();
|
|
@@ -545,29 +545,29 @@ describe('Select', () => {
|
|
|
545
545
|
it('cannot navigate past the last list item', async () => {
|
|
546
546
|
const { container } = render(<Select {...props} />);
|
|
547
547
|
|
|
548
|
-
openSelect(container);
|
|
548
|
+
await openSelect(container);
|
|
549
549
|
|
|
550
550
|
await expect(screen.findByRole('dialog')).resolves.toBeInTheDocument();
|
|
551
551
|
|
|
552
|
-
userEvent.keyboard('[ArrowDown]');
|
|
552
|
+
await userEvent.keyboard('[ArrowDown]');
|
|
553
553
|
|
|
554
554
|
await waitFor(() => {
|
|
555
555
|
expect(screen.queryByRole('option', { name: 'yo' })).toHaveFocus();
|
|
556
556
|
});
|
|
557
557
|
|
|
558
|
-
userEvent.keyboard('[ArrowDown]');
|
|
558
|
+
await userEvent.keyboard('[ArrowDown]');
|
|
559
559
|
|
|
560
560
|
await waitFor(() => {
|
|
561
561
|
expect(screen.queryByRole('option', { name: 'dawg' })).toHaveFocus();
|
|
562
562
|
});
|
|
563
563
|
|
|
564
|
-
userEvent.keyboard('[ArrowDown]');
|
|
564
|
+
await userEvent.keyboard('[ArrowDown]');
|
|
565
565
|
|
|
566
566
|
await waitFor(() => {
|
|
567
567
|
expect(screen.queryByRole('option', { name: 'boi' })).toHaveFocus();
|
|
568
568
|
});
|
|
569
569
|
|
|
570
|
-
userEvent.keyboard('[ArrowDown]');
|
|
570
|
+
await userEvent.keyboard('[ArrowDown]');
|
|
571
571
|
|
|
572
572
|
await waitFor(() => {
|
|
573
573
|
expect(screen.queryByRole('option', { name: 'boi' })).toHaveFocus();
|
|
@@ -582,13 +582,13 @@ describe('Select', () => {
|
|
|
582
582
|
it('visually indicates which item is focused with keyboard navigation and selects it on enter', async () => {
|
|
583
583
|
const { container } = render(<Select {...props} search />);
|
|
584
584
|
|
|
585
|
-
openSelect(container);
|
|
585
|
+
await openSelect(container);
|
|
586
586
|
|
|
587
587
|
await waitFor(() => {
|
|
588
588
|
expect(screen.queryByPlaceholderText('Search...')).not.toHaveFocus();
|
|
589
589
|
});
|
|
590
590
|
|
|
591
|
-
userEvent.keyboard('[ArrowDown]');
|
|
591
|
+
await userEvent.keyboard('[ArrowDown]');
|
|
592
592
|
|
|
593
593
|
await waitFor(() => {
|
|
594
594
|
expect(screen.queryByRole('option', { name: 'yo' })).toHaveClass(
|
|
@@ -599,7 +599,7 @@ describe('Select', () => {
|
|
|
599
599
|
|
|
600
600
|
expect(screen.queryByPlaceholderText('Search...')).not.toHaveFocus();
|
|
601
601
|
|
|
602
|
-
userEvent.keyboard('[ArrowDown]');
|
|
602
|
+
await userEvent.keyboard('[ArrowDown]');
|
|
603
603
|
|
|
604
604
|
await waitFor(() => {
|
|
605
605
|
expect(screen.queryByRole('option', { name: 'dawg' })).toHaveClass(
|
|
@@ -610,7 +610,7 @@ describe('Select', () => {
|
|
|
610
610
|
|
|
611
611
|
expect(screen.queryByPlaceholderText('Search...')).not.toHaveFocus();
|
|
612
612
|
|
|
613
|
-
userEvent.keyboard('[Enter]');
|
|
613
|
+
await userEvent.keyboard('[Enter]');
|
|
614
614
|
|
|
615
615
|
expect(props.onChange).toHaveBeenCalledWith({ label: 'dawg', value: 1 });
|
|
616
616
|
});
|
package/src/test-utils/index.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { render, screen } from '@testing-library/react';
|
|
2
|
-
import userEvent from '@testing-library/user-event';
|
|
3
|
-
import React from 'react';
|
|
2
|
+
import { userEvent } from '@testing-library/user-event';
|
|
4
3
|
|
|
5
4
|
import Tooltip from '.';
|
|
6
5
|
|
|
@@ -26,7 +25,7 @@ describe('Tooltip Component', () => {
|
|
|
26
25
|
expect(tooltip).toHaveAttribute('aria-hidden', 'true');
|
|
27
26
|
});
|
|
28
27
|
|
|
29
|
-
it('should render the tooltip label when closed', () => {
|
|
28
|
+
it('should render the tooltip label when closed', async () => {
|
|
30
29
|
render(
|
|
31
30
|
<Tooltip label="Test Tooltip">
|
|
32
31
|
<span>Hover me</span>
|
|
@@ -36,11 +35,11 @@ describe('Tooltip Component', () => {
|
|
|
36
35
|
const tooltip = screen.getByRole('tooltip', { hidden: true });
|
|
37
36
|
expect(tooltip).toHaveAttribute('aria-hidden', 'true');
|
|
38
37
|
|
|
39
|
-
userEvent.hover(triggerElement);
|
|
38
|
+
await userEvent.hover(triggerElement);
|
|
40
39
|
expect(tooltip).toHaveAttribute('aria-hidden', 'false');
|
|
41
40
|
});
|
|
42
41
|
|
|
43
|
-
it('should display the tooltip on mouse hover', () => {
|
|
42
|
+
it('should display the tooltip on mouse hover', async () => {
|
|
44
43
|
render(
|
|
45
44
|
<Tooltip label="Test Tooltip">
|
|
46
45
|
<span>Hover over me!</span>
|
|
@@ -48,13 +47,13 @@ describe('Tooltip Component', () => {
|
|
|
48
47
|
);
|
|
49
48
|
const triggerElement = screen.getByText('Hover over me!');
|
|
50
49
|
|
|
51
|
-
userEvent.hover(triggerElement);
|
|
50
|
+
await userEvent.hover(triggerElement);
|
|
52
51
|
|
|
53
52
|
const tooltipElement = screen.queryByText('Test Tooltip');
|
|
54
53
|
expect(tooltipElement).toBeVisible();
|
|
55
54
|
});
|
|
56
55
|
|
|
57
|
-
it('should hide the tooltip on mouse out', () => {
|
|
56
|
+
it('should hide the tooltip on mouse out', async () => {
|
|
58
57
|
render(
|
|
59
58
|
<Tooltip label="Test Tooltip">
|
|
60
59
|
<span>Hover me</span>
|
|
@@ -62,16 +61,16 @@ describe('Tooltip Component', () => {
|
|
|
62
61
|
);
|
|
63
62
|
const triggerElement = screen.getByText('Hover me');
|
|
64
63
|
|
|
65
|
-
userEvent.hover(triggerElement);
|
|
64
|
+
await userEvent.hover(triggerElement);
|
|
66
65
|
let tooltipElement = screen.getByText('Test Tooltip');
|
|
67
66
|
expect(tooltipElement).toBeVisible();
|
|
68
67
|
|
|
69
|
-
userEvent.unhover(triggerElement);
|
|
68
|
+
await userEvent.unhover(triggerElement);
|
|
70
69
|
tooltipElement = screen.getByRole('tooltip', { hidden: true });
|
|
71
70
|
expect(tooltipElement).toHaveAttribute('aria-hidden', 'true');
|
|
72
71
|
});
|
|
73
72
|
|
|
74
|
-
it('should display the tooltip on focus', () => {
|
|
73
|
+
it('should display the tooltip on focus', async () => {
|
|
75
74
|
render(
|
|
76
75
|
<Tooltip label="Test Tooltip">
|
|
77
76
|
<span>Focus me</span>
|
|
@@ -79,12 +78,12 @@ describe('Tooltip Component', () => {
|
|
|
79
78
|
);
|
|
80
79
|
const triggerElement = screen.getByText('Focus me');
|
|
81
80
|
|
|
82
|
-
userEvent.tab();
|
|
81
|
+
await userEvent.tab();
|
|
83
82
|
const tooltipElement = screen.getByText('Test Tooltip');
|
|
84
83
|
expect(tooltipElement).toBeVisible();
|
|
85
84
|
});
|
|
86
85
|
|
|
87
|
-
it('should hide the tooltip on blur', () => {
|
|
86
|
+
it('should hide the tooltip on blur', async () => {
|
|
88
87
|
render(
|
|
89
88
|
<Tooltip label="Test Tooltip">
|
|
90
89
|
<span>Focus me</span>
|
|
@@ -92,16 +91,16 @@ describe('Tooltip Component', () => {
|
|
|
92
91
|
);
|
|
93
92
|
const triggerElement = screen.getByText('Focus me');
|
|
94
93
|
|
|
95
|
-
userEvent.tab();
|
|
94
|
+
await userEvent.tab();
|
|
96
95
|
let tooltipElement = screen.getByRole('tooltip', { hidden: true });
|
|
97
96
|
expect(tooltipElement).toBeVisible();
|
|
98
97
|
|
|
99
|
-
userEvent.tab({ shift: true }); // Blur the element
|
|
98
|
+
await userEvent.tab({ shift: true }); // Blur the element
|
|
100
99
|
tooltipElement = screen.getByRole('tooltip', { hidden: true });
|
|
101
100
|
expect(tooltipElement).toHaveAttribute('aria-hidden', 'true');
|
|
102
101
|
});
|
|
103
102
|
|
|
104
|
-
it('should display the tooltip when the "children" prop is a React element', () => {
|
|
103
|
+
it('should display the tooltip when the "children" prop is a React element', async () => {
|
|
105
104
|
render(
|
|
106
105
|
<Tooltip label="Test Tooltip">
|
|
107
106
|
<button type="button">Click me</button>
|
|
@@ -109,7 +108,7 @@ describe('Tooltip Component', () => {
|
|
|
109
108
|
);
|
|
110
109
|
const triggerElement = screen.getByText('Click me');
|
|
111
110
|
|
|
112
|
-
userEvent.hover(triggerElement);
|
|
111
|
+
await userEvent.hover(triggerElement);
|
|
113
112
|
const tooltipElement = screen.getByRole('tooltip', { hidden: true });
|
|
114
113
|
expect(tooltipElement).toBeVisible();
|
|
115
114
|
});
|