@instructure/ui-date-input 8.55.0 → 8.55.1-snapshot-3

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.
@@ -1,6 +1,16 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _react = _interopRequireDefault(require("react"));
5
+ var _react2 = require("@testing-library/react");
6
+ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
3
7
  require("@testing-library/jest-dom");
8
+ var _generateA11yTests = require("@instructure/ui-scripts/lib/test/generateA11yTests");
9
+ var _runAxeCheck = require("@instructure/ui-axe-check/lib/runAxeCheck.js");
10
+ var _Calendar = require("@instructure/ui-calendar/lib/Calendar");
11
+ var _DateInput = _interopRequireDefault(require("../__examples__/DateInput.examples"));
12
+ var _index = require("../index");
13
+ var _Calendar$Day, _button, _button2, _Calendar$Day2, _Calendar$Day3;
4
14
  /*
5
15
  * The MIT License (MIT)
6
16
  *
@@ -24,68 +34,561 @@ require("@testing-library/jest-dom");
24
34
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25
35
  * SOFTWARE.
26
36
  */
27
- // import React from 'react'
28
- // import { render, screen, act } from '@testing-library/react'
29
-
30
- // import DateInput from '../index'
31
-
37
+ // eslint-disable-next-line no-restricted-imports
32
38
  describe('<DateInput />', () => {
39
+ const weekdayLabels = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
40
+ const generateDays = (count = _Calendar.Calendar.DAY_COUNT) => {
41
+ const days = [];
42
+ const date = new Date('2019-07-28');
43
+ while (days.length < count) {
44
+ days.push( /*#__PURE__*/_react.default.createElement(_Calendar.Calendar.Day, {
45
+ key: date.toISOString(),
46
+ date: date.toISOString(),
47
+ label: date.toISOString()
48
+ }, date.getDate()));
49
+ date.setDate(date.getDate() + 1);
50
+ }
51
+ return days;
52
+ };
53
+ it('should render an input and a calendar', async () => {
54
+ const _render = (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
55
+ renderLabel: "date-input",
56
+ renderWeekdayLabels: weekdayLabels,
57
+ isShowingCalendar: true
58
+ }, generateDays())),
59
+ container = _render.container,
60
+ findByRole = _render.findByRole;
61
+ const dateInput = container.querySelector('input');
62
+ expect(dateInput).toBeInTheDocument();
63
+ expect(dateInput).toHaveAttribute('type', 'text');
64
+ await _userEvent.default.click(dateInput);
65
+ const calendarTable = await findByRole('listbox');
66
+ const calendarWrapper = await document.querySelector('[id^="Selectable_"][id$="-list"]');
67
+ await (0, _react2.waitFor)(() => {
68
+ expect(calendarWrapper).toBeInTheDocument();
69
+ expect(calendarTable).toBeInTheDocument();
70
+ });
71
+ });
72
+ describe('input', () => {
73
+ it('should render a label', () => {
74
+ const labelText = 'label text';
75
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
76
+ renderLabel: labelText,
77
+ renderWeekdayLabels: weekdayLabels
78
+ }, generateDays()));
79
+ const dateInput = _react2.screen.getByLabelText('label text');
80
+ expect(dateInput).toBeInTheDocument();
81
+ });
82
+ it('should set value', () => {
83
+ const value = 'January 5';
84
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
85
+ renderLabel: "Choose date",
86
+ value: value,
87
+ onChange: jest.fn(),
88
+ renderWeekdayLabels: weekdayLabels
89
+ }, generateDays()));
90
+ const dateInput = _react2.screen.getByLabelText('Choose date');
91
+ expect(dateInput).toHaveValue(value);
92
+ });
93
+ it('should call onChange with the updated value', async () => {
94
+ const onChange = jest.fn();
95
+ const value = 'May 18, 2022';
96
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
97
+ renderLabel: "Choose date",
98
+ renderWeekdayLabels: weekdayLabels,
99
+ onChange: onChange
100
+ }, generateDays()));
101
+ const dateInput = _react2.screen.getByLabelText('Choose date');
102
+ _react2.fireEvent.change(dateInput, {
103
+ target: {
104
+ value: value
105
+ }
106
+ });
107
+ _react2.fireEvent.keyDown(dateInput, {
108
+ key: 'Enter',
109
+ code: 'Enter'
110
+ });
111
+ _react2.fireEvent.blur(dateInput);
112
+ await (0, _react2.waitFor)(() => {
113
+ expect(onChange).toHaveBeenCalledTimes(1);
114
+ expect(onChange.mock.calls[0][1].value).toEqual(expect.stringContaining(value));
115
+ });
116
+ });
117
+ it('should call onBlur', () => {
118
+ const onBlur = jest.fn();
119
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
120
+ renderLabel: "Choose date",
121
+ renderWeekdayLabels: weekdayLabels,
122
+ onBlur: onBlur
123
+ }, generateDays()));
124
+ const dateInput = _react2.screen.getByLabelText('Choose date');
125
+ _react2.fireEvent.blur(dateInput);
126
+ expect(onBlur).toHaveBeenCalledTimes(1);
127
+ });
128
+ it('should correctly set interaction type', async () => {
129
+ const _render2 = (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
130
+ renderLabel: "Choose date",
131
+ renderWeekdayLabels: weekdayLabels,
132
+ interaction: "disabled"
133
+ }, generateDays())),
134
+ rerender = _render2.rerender;
135
+ const dateInput = _react2.screen.getByLabelText('Choose date');
136
+ expect(dateInput).toHaveAttribute('disabled');
137
+ rerender( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
138
+ renderLabel: "Choose date",
139
+ renderWeekdayLabels: weekdayLabels,
140
+ interaction: "readonly"
141
+ }, generateDays()));
142
+ const dateInputAfterUpdate = _react2.screen.getByLabelText('Choose date');
143
+ await (0, _react2.waitFor)(() => {
144
+ expect(dateInputAfterUpdate).toHaveAttribute('readonly');
145
+ });
146
+ });
147
+ it('should correctly set disabled', () => {
148
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
149
+ renderLabel: "Choose date",
150
+ renderWeekdayLabels: weekdayLabels,
151
+ disabled: true
152
+ }, generateDays()));
153
+ const dateInput = _react2.screen.getByLabelText('Choose date');
154
+ expect(dateInput).toHaveAttribute('disabled');
155
+ });
156
+ it('should correctly set readOnly', () => {
157
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
158
+ renderLabel: "Choose date",
159
+ renderWeekdayLabels: weekdayLabels,
160
+ readOnly: true
161
+ }, generateDays()));
162
+ const dateInput = _react2.screen.getByLabelText('Choose date');
163
+ expect(dateInput).toHaveAttribute('readOnly');
164
+ });
165
+ it('should set placeholder', () => {
166
+ const placeholder = 'Start typing to choose a date';
167
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
168
+ renderLabel: "Choose date",
169
+ renderWeekdayLabels: weekdayLabels,
170
+ placeholder: placeholder
171
+ }, generateDays()));
172
+ const dateInput = _react2.screen.getByLabelText('Choose date');
173
+ expect(dateInput).toHaveAttribute('placeholder', placeholder);
174
+ });
175
+ it('should be requireable', () => {
176
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
177
+ renderLabel: "Choose date",
178
+ renderWeekdayLabels: weekdayLabels,
179
+ isRequired: true
180
+ }, generateDays()));
181
+ const dateInput = _react2.screen.getByLabelText('Choose date');
182
+ expect(dateInput).toHaveAttribute('required');
183
+ });
184
+ it('should provide inputRef', () => {
185
+ const inputRef = jest.fn();
186
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
187
+ renderLabel: "Choose date",
188
+ renderWeekdayLabels: weekdayLabels,
189
+ inputRef: inputRef
190
+ }, generateDays()));
191
+ const dateInput = _react2.screen.getByLabelText('Choose date');
192
+ expect(inputRef).toHaveBeenCalledWith(dateInput);
193
+ });
194
+ it('should render messages', () => {
195
+ const text = 'The selected date is invalid';
196
+ const _render3 = (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
197
+ renderLabel: "Choose date",
198
+ renderWeekdayLabels: weekdayLabels,
199
+ messages: [{
200
+ type: 'error',
201
+ text
202
+ }]
203
+ }, generateDays())),
204
+ container = _render3.container;
205
+ expect(container).toHaveTextContent(text);
206
+ });
207
+ it('should allow custom props to pass through', () => {
208
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
209
+ renderLabel: "Choose date",
210
+ renderWeekdayLabels: weekdayLabels,
211
+ "data-custom-attr": "custom value",
212
+ name: "my name"
213
+ }, generateDays()));
214
+ const dateInput = _react2.screen.getByLabelText('Choose date');
215
+ expect(dateInput).toHaveAttribute('data-custom-attr', 'custom value');
216
+ expect(dateInput).toHaveAttribute('name', 'my name');
217
+ });
218
+ });
219
+ describe('Calendar', () => {
220
+ it('should show calendar when `isShowingCalendar` is set', async () => {
221
+ const _render4 = (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
222
+ renderLabel: "Choose date",
223
+ renderWeekdayLabels: weekdayLabels
224
+ }, generateDays())),
225
+ rerender = _render4.rerender,
226
+ queryByRole = _render4.queryByRole;
227
+ const dateInput = _react2.screen.getByLabelText('Choose date');
228
+ const calendarTable = await queryByRole('listbox');
229
+ const calendarWrapper = await document.querySelector('[id^="Selectable_"][id$="-list"]');
230
+ expect(dateInput).toBeInTheDocument();
231
+ expect(calendarTable).not.toBeInTheDocument();
232
+ expect(calendarWrapper).not.toBeInTheDocument();
233
+ rerender( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
234
+ renderLabel: "Choose date",
235
+ renderWeekdayLabels: weekdayLabels,
236
+ isShowingCalendar: true
237
+ }, generateDays()));
238
+ const dateInputAfterUpdate = _react2.screen.getByLabelText('Choose date');
239
+ const calendarTableAfterUpdate = await queryByRole('listbox');
240
+ const calendarWrapperAfterUpdate = await document.querySelector('[id^="Selectable_"][id$="-list"]');
241
+ await (0, _react2.waitFor)(() => {
242
+ expect(dateInputAfterUpdate).toBeInTheDocument();
243
+ expect(calendarTableAfterUpdate).toBeInTheDocument();
244
+ expect(calendarWrapperAfterUpdate).toBeInTheDocument();
245
+ });
246
+ });
247
+ describe('onRequestShowCalendar', () => {
248
+ it('should call onRequestShowCalendar when label is clicked', async () => {
249
+ const onRequestShowCalendar = jest.fn();
250
+ const _render5 = (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
251
+ renderLabel: "Choose date",
252
+ renderWeekdayLabels: weekdayLabels,
253
+ onRequestShowCalendar: onRequestShowCalendar
254
+ }, generateDays())),
255
+ container = _render5.container;
256
+ const dateInput = container.querySelector("[class$='-formFieldLabel']");
257
+ expect(dateInput).toHaveTextContent('Choose date');
258
+ await _userEvent.default.click(dateInput);
259
+ await (0, _react2.waitFor)(() => {
260
+ expect(onRequestShowCalendar).toHaveBeenCalled();
261
+ });
262
+ });
263
+ it('should call onRequestShowCalendar when input is clicked', async () => {
264
+ const onRequestShowCalendar = jest.fn();
265
+ const _render6 = (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
266
+ renderLabel: "Choose date",
267
+ renderWeekdayLabels: weekdayLabels,
268
+ onRequestShowCalendar: onRequestShowCalendar
269
+ }, generateDays())),
270
+ container = _render6.container;
271
+ const dateInput = container.querySelector('input');
272
+ await _userEvent.default.click(dateInput);
273
+ await (0, _react2.waitFor)(() => {
274
+ expect(onRequestShowCalendar).toHaveBeenCalledTimes(1);
275
+ });
276
+ });
277
+ it('should call onRequestShowCalendar when input receives space event', async () => {
278
+ const onRequestShowCalendar = jest.fn();
279
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
280
+ renderLabel: "Choose date",
281
+ renderWeekdayLabels: weekdayLabels,
282
+ onRequestShowCalendar: onRequestShowCalendar
283
+ }, generateDays()));
284
+ const dateInput = _react2.screen.getByLabelText('Choose date');
285
+ await _userEvent.default.type(dateInput, '{space}');
286
+ await (0, _react2.waitFor)(() => {
287
+ expect(onRequestShowCalendar).toHaveBeenCalledTimes(1);
288
+ });
289
+ });
290
+ it('should not call onRequestShowCalendar when input receives space event if calendar is already showing', async () => {
291
+ const onRequestShowCalendar = jest.fn();
292
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
293
+ renderLabel: "Choose date",
294
+ renderWeekdayLabels: weekdayLabels,
295
+ onRequestShowCalendar: onRequestShowCalendar,
296
+ isShowingCalendar: true
297
+ }, generateDays()));
298
+ const dateInput = _react2.screen.getByLabelText('Choose date');
299
+ await _userEvent.default.type(dateInput, '{space}');
300
+ await (0, _react2.waitFor)(() => {
301
+ expect(onRequestShowCalendar).not.toHaveBeenCalled();
302
+ });
303
+ });
304
+ it('should call onRequestShowCalendar when input receives down arrow event', async () => {
305
+ const onRequestShowCalendar = jest.fn();
306
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
307
+ renderLabel: "Choose date",
308
+ renderWeekdayLabels: weekdayLabels,
309
+ onRequestShowCalendar: onRequestShowCalendar
310
+ }, generateDays()));
311
+ const dateInput = _react2.screen.getByLabelText('Choose date');
312
+ await _userEvent.default.type(dateInput, '{arrowdown}');
313
+ await (0, _react2.waitFor)(() => {
314
+ expect(onRequestShowCalendar).toHaveBeenCalledTimes(1);
315
+ });
316
+ });
317
+ it('should not call onRequestShowCalendar when input receives down arrow event if calendar is already showing', async () => {
318
+ const onRequestShowCalendar = jest.fn();
319
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
320
+ renderLabel: "Choose date",
321
+ renderWeekdayLabels: weekdayLabels,
322
+ onRequestShowCalendar: onRequestShowCalendar,
323
+ isShowingCalendar: true
324
+ }, generateDays()));
325
+ const dateInput = _react2.screen.getByLabelText('Choose date');
326
+ await _userEvent.default.type(dateInput, '{arrowdown}');
327
+ await (0, _react2.waitFor)(() => {
328
+ expect(onRequestShowCalendar).not.toHaveBeenCalled();
329
+ });
330
+ });
331
+ it('should call onRequestShowCalendar when input receives up arrow event', async () => {
332
+ const onRequestShowCalendar = jest.fn();
333
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
334
+ renderLabel: "Choose date",
335
+ renderWeekdayLabels: weekdayLabels,
336
+ onRequestShowCalendar: onRequestShowCalendar
337
+ }, generateDays()));
338
+ const dateInput = _react2.screen.getByLabelText('Choose date');
339
+ await _userEvent.default.type(dateInput, '{arrowup}');
340
+ await (0, _react2.waitFor)(() => {
341
+ expect(onRequestShowCalendar).toHaveBeenCalledTimes(1);
342
+ });
343
+ });
344
+ it('should not call onRequestShowCalendar when input receives up arrow event if calendar is already showing', async () => {
345
+ const onRequestShowCalendar = jest.fn();
346
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
347
+ renderLabel: "Choose date",
348
+ renderWeekdayLabels: weekdayLabels,
349
+ onRequestShowCalendar: onRequestShowCalendar,
350
+ isShowingCalendar: true
351
+ }, generateDays()));
352
+ const dateInput = _react2.screen.getByLabelText('Choose date');
353
+ await _userEvent.default.type(dateInput, '{arrowup}');
354
+ await (0, _react2.waitFor)(() => {
355
+ expect(onRequestShowCalendar).not.toHaveBeenCalled();
356
+ });
357
+ });
358
+ it('should call onRequestShowCalendar when input receives onChange event', async () => {
359
+ const onRequestShowCalendar = jest.fn();
360
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
361
+ renderLabel: "Choose date",
362
+ renderWeekdayLabels: weekdayLabels,
363
+ onRequestShowCalendar: onRequestShowCalendar
364
+ }, generateDays()));
365
+ const dateInput = _react2.screen.getByLabelText('Choose date');
366
+ _react2.fireEvent.change(dateInput, {
367
+ target: {
368
+ value: 'January 5'
369
+ }
370
+ });
371
+ await (0, _react2.waitFor)(() => {
372
+ expect(onRequestShowCalendar).toHaveBeenCalledTimes(1);
373
+ });
374
+ });
375
+ it('should not call onRequestShowCalendar when disabled', async () => {
376
+ const onRequestShowCalendar = jest.fn();
377
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
378
+ renderLabel: "Choose date",
379
+ renderWeekdayLabels: weekdayLabels,
380
+ onRequestShowCalendar: onRequestShowCalendar,
381
+ interaction: "disabled"
382
+ }, generateDays()));
383
+ const dateInput = _react2.screen.getByLabelText('Choose date');
384
+ _react2.fireEvent.click(dateInput);
385
+ await _userEvent.default.type(dateInput, '{arrowup}{arrowdown}{space}January 5', {
386
+ skipClick: true
387
+ });
388
+ await (0, _react2.waitFor)(() => {
389
+ expect(onRequestShowCalendar).not.toHaveBeenCalled();
390
+ });
391
+ });
392
+ });
393
+ describe('onRequestHideCalendar and onRequestValidateDate', () => {
394
+ it('should call onRequestHideCalendar and onRequestValidateDate input receives onBlur event', async () => {
395
+ const onRequestHideCalendar = jest.fn();
396
+ const onRequestValidateDate = jest.fn();
397
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
398
+ renderLabel: "Choose date",
399
+ renderWeekdayLabels: weekdayLabels,
400
+ onRequestHideCalendar: onRequestHideCalendar,
401
+ onRequestValidateDate: onRequestValidateDate,
402
+ isShowingCalendar: true
403
+ }, generateDays()));
404
+ const dateInput = _react2.screen.getByLabelText('Choose date');
405
+ _react2.fireEvent.blur(dateInput);
406
+ await (0, _react2.waitFor)(() => {
407
+ expect(onRequestHideCalendar).toHaveBeenCalledTimes(1);
408
+ expect(onRequestValidateDate).toHaveBeenCalledTimes(1);
409
+ });
410
+ });
411
+ it('should call onRequestHideCalendar and onRequestValidateDate when input receives esc event', async () => {
412
+ const onRequestHideCalendar = jest.fn();
413
+ const onRequestValidateDate = jest.fn();
414
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
415
+ renderLabel: "Choose date",
416
+ renderWeekdayLabels: weekdayLabels,
417
+ onRequestHideCalendar: onRequestHideCalendar,
418
+ onRequestValidateDate: onRequestValidateDate,
419
+ isShowingCalendar: true
420
+ }, generateDays()));
421
+ const dateInput = _react2.screen.getByLabelText('Choose date');
422
+ await _userEvent.default.type(dateInput, '{esc}');
423
+ await (0, _react2.waitFor)(() => {
424
+ expect(onRequestHideCalendar).toHaveBeenCalledTimes(1);
425
+ expect(onRequestValidateDate).toHaveBeenCalledTimes(1);
426
+ });
427
+ });
428
+ it('should call onRequestHideCalendar and onRequestValidateDate when input receives enter event', async () => {
429
+ const onRequestHideCalendar = jest.fn();
430
+ const onRequestValidateDate = jest.fn();
431
+ const days = generateDays();
432
+ days[4] = _Calendar$Day || (_Calendar$Day = /*#__PURE__*/_react.default.createElement(_Calendar.Calendar.Day, {
433
+ key: "4",
434
+ label: "4",
435
+ date: "2019-09-28",
436
+ isSelected: true
437
+ }, 4));
438
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
439
+ renderLabel: "Choose date",
440
+ renderWeekdayLabels: weekdayLabels,
441
+ onRequestHideCalendar: onRequestHideCalendar,
442
+ onRequestValidateDate: onRequestValidateDate,
443
+ isShowingCalendar: true
444
+ }, days));
445
+ const dateInput = _react2.screen.getByLabelText('Choose date');
446
+ await _userEvent.default.type(dateInput, '{enter}');
447
+ await (0, _react2.waitFor)(() => {
448
+ expect(onRequestHideCalendar).toHaveBeenCalledTimes(1);
449
+ expect(onRequestValidateDate).toHaveBeenCalledTimes(1);
450
+ });
451
+ });
452
+ });
453
+ it('should render calendar navigation label', () => {
454
+ const label = 'January 2019';
455
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
456
+ renderLabel: "Choose date",
457
+ renderWeekdayLabels: weekdayLabels,
458
+ renderNavigationLabel: /*#__PURE__*/_react.default.createElement("div", {
459
+ "data-testId": "label-id"
460
+ }, label),
461
+ isShowingCalendar: true
462
+ }, generateDays()));
463
+ const navigationLabel = _react2.screen.getByTestId('label-id');
464
+ expect(navigationLabel).toBeInTheDocument();
465
+ expect(navigationLabel).toHaveTextContent(label);
466
+ });
467
+ it('should render calendar weekday labels', async () => {
468
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
469
+ renderLabel: "Choose date",
470
+ renderWeekdayLabels: weekdayLabels,
471
+ isShowingCalendar: true
472
+ }, generateDays()));
473
+ const calendar = await _react2.screen.findByRole('listbox');
474
+ const headers = calendar.querySelectorAll('th');
475
+ expect(headers.length).toEqual(7);
476
+ weekdayLabels.forEach(label => {
477
+ expect(calendar).toHaveTextContent(label);
478
+ });
479
+ });
480
+ it('should render all focusable elements in calendar with tabIndex="-1"', async () => {
481
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
482
+ renderLabel: "Choose date",
483
+ renderWeekdayLabels: weekdayLabels,
484
+ renderNextMonthButton: _button || (_button = /*#__PURE__*/_react.default.createElement("button", {
485
+ "data-testId": "button-next"
486
+ }, "next")),
487
+ renderPrevMonthButton: _button2 || (_button2 = /*#__PURE__*/_react.default.createElement("button", {
488
+ "data-testId": "button-prev"
489
+ }, "prev")),
490
+ isShowingCalendar: true
491
+ }, generateDays()));
492
+ const calendar = await _react2.screen.findByRole('listbox');
493
+ const calendarDays = calendar.querySelectorAll('button');
494
+ const nextMonthButton = _react2.screen.getByTestId('button-next');
495
+ const prevMonthButton = _react2.screen.getByTestId('button-prev');
496
+ expect(nextMonthButton).toHaveAttribute('tabIndex', '-1');
497
+ expect(prevMonthButton).toHaveAttribute('tabIndex', '-1');
498
+ expect(calendarDays).toHaveLength(42);
499
+ calendarDays.forEach(day => {
500
+ expect(day).toHaveAttribute('tabIndex', '-1');
501
+ });
502
+ });
503
+ it('should render days with the correct role', async () => {
504
+ const days = generateDays();
505
+ days[5] = _Calendar$Day2 || (_Calendar$Day2 = /*#__PURE__*/_react.default.createElement(_Calendar.Calendar.Day, {
506
+ key: "5",
507
+ label: "5",
508
+ date: "2019-09-28",
509
+ id: "5",
510
+ isOutsideMonth: true
511
+ }, "outside"));
512
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
513
+ renderLabel: "Choose date",
514
+ renderWeekdayLabels: weekdayLabels,
515
+ isShowingCalendar: true
516
+ }, days));
517
+ const calendar = await _react2.screen.findByRole('listbox');
518
+ const calendarDays = calendar.querySelectorAll('button');
519
+ calendarDays.forEach(day => {
520
+ if (day.textContent.includes('outside')) {
521
+ expect(day).toHaveAttribute('role', 'presentation');
522
+ } else {
523
+ expect(day).toHaveAttribute('role', 'option');
524
+ }
525
+ });
526
+ });
527
+ it('should assign aria-selected to the selected date and link it to the input', async () => {
528
+ const days = generateDays();
529
+ days[7] = _Calendar$Day3 || (_Calendar$Day3 = /*#__PURE__*/_react.default.createElement(_Calendar.Calendar.Day, {
530
+ key: "7",
531
+ label: "7",
532
+ date: "2019-09-28",
533
+ id: "selected-day-id",
534
+ isSelected: true
535
+ }, "selected"));
536
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
537
+ renderLabel: "Choose date",
538
+ renderWeekdayLabels: weekdayLabels,
539
+ isShowingCalendar: true
540
+ }, days));
541
+ const calendar = await _react2.screen.findByRole('listbox');
542
+ const calendarDays = calendar.querySelectorAll('button');
543
+ let selectedDayID = '';
544
+ calendarDays.forEach(day => {
545
+ if (day.textContent.includes('selected')) {
546
+ selectedDayID = day.id;
547
+ expect(day).toHaveAttribute('aria-selected', 'true');
548
+ } else {
549
+ expect(day).toHaveAttribute('aria-selected', 'false');
550
+ }
551
+ });
552
+ const dateInput = _react2.screen.getByLabelText('Choose date');
553
+ expect(dateInput).toHaveAttribute('aria-activedescendant', selectedDayID);
554
+ });
555
+ });
556
+ describe('with generated examples', () => {
557
+ const generatedComponents = (0, _generateA11yTests.generateA11yTests)(_index.DateInput, _DateInput.default);
558
+ it.each(generatedComponents)('should be accessible with example: $description', async ({
559
+ content
560
+ }) => {
561
+ const _render7 = (0, _react2.render)(content),
562
+ container = _render7.container;
563
+ const axeCheck = await (0, _runAxeCheck.runAxeCheck)(container);
564
+ expect(axeCheck).toBe(true);
565
+ });
566
+ });
33
567
  describe('with minimal config', () => {
34
- it('should be a placeholer', () => {
35
- expect(1 + 1).toEqual(2);
36
- });
37
- // TODO find out why timeouts
38
- // it('should render 44 buttons (a calendar) when clicked', async () => {
39
- // const onChange = jest.fn()
40
- // render(
41
- // <DateInput
42
- // renderLabel="Choose a date"
43
- // assistiveText="Type a date or use arrow keys to navigate date picker."
44
- // width="20rem"
45
- // isInline
46
- // value={'2023-11-23'}
47
- // onChange={onChange}
48
- // currentDate="2023-12-23"
49
- // disabledDates={['2023-12-22', '2023-12-12', '2023-12-11']}
50
- // disabledDateErrorMessage="disabled date"
51
- // invalidDateErrorMessage="invalid date"
52
- // ></DateInput>
53
- // )
54
- // const inputField = screen.queryByRole('combobox')
55
- // await act(async () => {
56
- // await inputField?.click()
57
- // })
58
- // const buttons = document.getElementsByTagName('button')
59
- // expect(buttons.length).toEqual(44)
60
- // })
61
- // it('should select the correct day on Calendar when value is set', async () => {
62
- // const onChange = jest.fn()
63
- // render(
64
- // <DateInput
65
- // renderLabel="Choose a date"
66
- // assistiveText="Type a date or use arrow keys to navigate date picker."
67
- // width="20rem"
68
- // isInline
69
- // value={'2023-11-23'}
70
- // onChange={onChange}
71
- // currentDate="2023-11-25"
72
- // disabledDates={['2023-12-22', '2023-12-12', '2023-12-11']}
73
- // disabledDateErrorMessage="disabled date"
74
- // invalidDateErrorMessage="invalid date"
75
- // ></DateInput>
76
- // )
77
- // const inputField = screen.queryByRole('combobox')
78
- // await act(async () => {
79
- // await inputField?.click()
80
- // })
81
- // const selectedDay =
82
- // screen.queryByText('23 November 2023')?.parentElement?.parentElement
83
- // expect(selectedDay).toBeDefined()
84
- // if (selectedDay) {
85
- // expect(window.getComputedStyle(selectedDay)?.background).toBe(
86
- // 'rgb(11, 135, 75)'
87
- // )
88
- // }
89
- // })
568
+ it('should render 44 buttons (a calendar) when clicked', async () => {
569
+ const onChange = jest.fn();
570
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.DateInput, {
571
+ renderLabel: "Choose date",
572
+ assistiveText: "Type a date or use arrow keys to navigate date picker.",
573
+ width: "20rem",
574
+ isInline: true,
575
+ value: '2023-11-23',
576
+ onChange: onChange,
577
+ currentDate: "2023-12-23",
578
+ disabledDates: ['2023-12-22', '2023-12-12', '2023-12-11'],
579
+ disabledDateErrorMessage: "disabled date",
580
+ invalidDateErrorMessage: "invalid date"
581
+ }));
582
+ const dateInput = _react2.screen.getByLabelText('Choose date');
583
+ _react2.fireEvent.click(dateInput);
584
+ const calendarTable = document.querySelector('table');
585
+ const calendarDays = calendarTable.querySelectorAll('button');
586
+ const calendarWrapper = document.querySelector('[id^="Selectable_"][id$="-list"]');
587
+ const calendarButtons = calendarWrapper.querySelectorAll('button');
588
+ await (0, _react2.waitFor)(() => {
589
+ expect(calendarButtons).toHaveLength(44);
590
+ expect(calendarDays).toHaveLength(42);
591
+ });
592
+ });
90
593
  });
91
594
  });