@docsvision/material-ui-pickers 3.2.0-beta.24 → 3.2.0-beta.26

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 (150) hide show
  1. package/.size-snapshot.json +11 -11
  2. package/9db1cba1a61cb58db53f38425bbd1f95.7z +0 -0
  3. package/build/DatePicker/DatePicker.d.ts +2 -2
  4. package/build/DatePicker/DatePicker.js +1 -1
  5. package/build/DateTimePicker/DateTimePicker.js +1 -1
  6. package/build/Picker/Picker.js +1 -1
  7. package/build/TimePicker/TimePicker.js +1 -1
  8. package/build/_helpers/text-field-helper.d.ts +1 -1
  9. package/build/_shared/KeyboardDateInput.js +1 -1
  10. package/build/_shared/ModalDialog.d.ts +2 -2
  11. package/build/_shared/PureDateInput.js +1 -1
  12. package/build/_shared/ToolbarButton.d.ts +2 -2
  13. package/build/_shared/hooks/useKeyboardPickerState.js +2 -2
  14. package/build/constants/prop-types.js +2 -2
  15. package/build/dist/material-ui-pickers.esm.js +12 -12
  16. package/build/dist/material-ui-pickers.esm.js.map +1 -1
  17. package/build/dist/material-ui-pickers.js +62 -62
  18. package/build/dist/material-ui-pickers.js.map +1 -1
  19. package/build/dist/material-ui-pickers.umd.js +5790 -4511
  20. package/build/dist/material-ui-pickers.umd.min.js +1 -1
  21. package/build/package.json +1 -1
  22. package/build/views/Calendar/Calendar.js +2 -2
  23. package/build/views/Clock/Clock.d.ts +1 -1
  24. package/build/views/Clock/ClockPointer.d.ts +1 -1
  25. package/package.json +1 -1
  26. package/src/DatePicker/DatePicker.tsx +91 -0
  27. package/src/DatePicker/DatePickerToolbar.tsx +75 -0
  28. package/src/DatePicker/index.ts +7 -0
  29. package/src/DateTimePicker/DateTimePicker.tsx +72 -0
  30. package/src/DateTimePicker/DateTimePickerTabs.tsx +86 -0
  31. package/src/DateTimePicker/DateTimePickerToolbar.tsx +123 -0
  32. package/src/DateTimePicker/index.ts +7 -0
  33. package/src/MuiPickersUtilsProvider.tsx +39 -0
  34. package/src/Picker/Picker.tsx +275 -0
  35. package/src/Picker/WrappedKeyboardPicker.tsx +136 -0
  36. package/src/Picker/WrappedPurePicker.tsx +128 -0
  37. package/src/Rifm/Rifm.ts +213 -0
  38. package/src/TimePicker/TimePicker.tsx +67 -0
  39. package/src/TimePicker/TimePickerToolbar.tsx +180 -0
  40. package/src/TimePicker/index.tsx +7 -0
  41. package/src/__tests__/DatePicker/Calendar.test.tsx +51 -0
  42. package/src/__tests__/DatePicker/Month.test.tsx +36 -0
  43. package/src/__tests__/DatePicker/MonthSelection.test.tsx +37 -0
  44. package/src/__tests__/MuiPickersUtilsProvider.test.tsx +21 -0
  45. package/src/__tests__/TimePicker/Clock.test.tsx +68 -0
  46. package/src/__tests__/_helpers/date-utils.test.tsx +197 -0
  47. package/src/__tests__/_helpers/text-field-helper.test.tsx +34 -0
  48. package/src/__tests__/_shared/ModalDialog.test.tsx +109 -0
  49. package/src/__tests__/e2e/DatePicker.test.tsx +233 -0
  50. package/src/__tests__/e2e/DatePickerProps.test.tsx +18 -0
  51. package/src/__tests__/e2e/DatePickerRoot.test.tsx +154 -0
  52. package/src/__tests__/e2e/DateTimePicker.test.tsx +86 -0
  53. package/src/__tests__/e2e/DateTimePickerRoot.test.tsx +72 -0
  54. package/src/__tests__/e2e/KeyboardDatePicker.test.tsx +140 -0
  55. package/src/__tests__/e2e/KeyboardDateTimePicker.test.tsx +48 -0
  56. package/src/__tests__/e2e/Theme.test.tsx +30 -0
  57. package/src/__tests__/e2e/TimePicker.test.tsx +121 -0
  58. package/src/__tests__/e2e/commands.tsx +8 -0
  59. package/src/__tests__/setup.js +26 -0
  60. package/src/__tests__/test-utils.tsx +45 -0
  61. package/src/__tests__/tsconfig.json +5 -0
  62. package/src/_helpers/date-utils.ts +92 -0
  63. package/src/_helpers/text-field-helper.ts +239 -0
  64. package/src/_helpers/time-utils.ts +83 -0
  65. package/src/_helpers/utils.ts +8 -0
  66. package/src/_shared/KeyboardDateInput.tsx +161 -0
  67. package/src/_shared/ModalDialog.tsx +114 -0
  68. package/src/_shared/PickerToolbar.tsx +52 -0
  69. package/src/_shared/PureDateInput.tsx +45 -0
  70. package/src/_shared/ToolbarButton.tsx +63 -0
  71. package/src/_shared/ToolbarText.tsx +49 -0
  72. package/src/_shared/WithUtils.tsx +19 -0
  73. package/src/_shared/hooks/useIsLandscape.tsx +27 -0
  74. package/src/_shared/hooks/useKeyDown.ts +34 -0
  75. package/src/_shared/hooks/useKeyboardPickerState.ts +72 -0
  76. package/src/_shared/hooks/useOpenState.ts +22 -0
  77. package/src/_shared/hooks/usePickerState.ts +134 -0
  78. package/src/_shared/hooks/useUtils.ts +20 -0
  79. package/src/_shared/hooks/useViews.tsx +31 -0
  80. package/src/_shared/icons/ArrowLeftIcon.tsx +11 -0
  81. package/src/_shared/icons/ArrowRightIcon.tsx +11 -0
  82. package/src/_shared/icons/DateRangeIcon.tsx +11 -0
  83. package/src/_shared/icons/KeyboardIcon.tsx +11 -0
  84. package/src/_shared/icons/TimeIcon.tsx +12 -0
  85. package/src/constants/ClockType.ts +11 -0
  86. package/src/constants/dimensions.ts +5 -0
  87. package/src/constants/prop-types.ts +37 -0
  88. package/src/index.ts +48 -0
  89. package/src/typings/BasePicker.tsx +60 -0
  90. package/src/typings/date.ts +3 -0
  91. package/src/typings/extendMui.ts +10 -0
  92. package/src/typings/overrides.ts +44 -0
  93. package/src/views/Calendar/Calendar.tsx +361 -0
  94. package/src/views/Calendar/CalendarHeader.tsx +141 -0
  95. package/src/views/Calendar/Day.tsx +97 -0
  96. package/src/views/Calendar/DayWrapper.tsx +33 -0
  97. package/src/views/Calendar/SlideTransition.tsx +100 -0
  98. package/src/views/Clock/Clock.tsx +172 -0
  99. package/src/views/Clock/ClockNumber.tsx +91 -0
  100. package/src/views/Clock/ClockNumbers.tsx +76 -0
  101. package/src/views/Clock/ClockPointer.tsx +104 -0
  102. package/src/views/Clock/ClockView.tsx +105 -0
  103. package/src/views/Month/Month.tsx +76 -0
  104. package/src/views/Month/MonthView.tsx +94 -0
  105. package/src/views/Year/Year.tsx +77 -0
  106. package/src/views/Year/YearView.tsx +91 -0
  107. package/src/wrappers/InlineWrapper.tsx +80 -0
  108. package/src/wrappers/ModalWrapper.tsx +113 -0
  109. package/src/wrappers/StaticWrapper.tsx +22 -0
  110. package/src/wrappers/Wrapper.tsx +75 -0
  111. package/coverage/clover.xml +0 -601
  112. package/coverage/coverage-final.json +0 -22
  113. package/coverage/lcov-report/base.css +0 -224
  114. package/coverage/lcov-report/block-navigation.js +0 -79
  115. package/coverage/lcov-report/index.html +0 -201
  116. package/coverage/lcov-report/prettify.css +0 -1
  117. package/coverage/lcov-report/prettify.js +0 -2
  118. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  119. package/coverage/lcov-report/sorter.js +0 -170
  120. package/coverage/lcov-report/src/MuiPickersUtilsProvider.tsx.html +0 -186
  121. package/coverage/lcov-report/src/_helpers/date-utils.ts.html +0 -345
  122. package/coverage/lcov-report/src/_helpers/index.html +0 -123
  123. package/coverage/lcov-report/src/_helpers/time-utils.ts.html +0 -318
  124. package/coverage/lcov-report/src/_helpers/utils.ts.html +0 -93
  125. package/coverage/lcov-report/src/_shared/ModalDialog.tsx.html +0 -411
  126. package/coverage/lcov-report/src/_shared/WithUtils.tsx.html +0 -126
  127. package/coverage/lcov-report/src/_shared/hooks/index.html +0 -110
  128. package/coverage/lcov-report/src/_shared/hooks/useKeyDown.ts.html +0 -171
  129. package/coverage/lcov-report/src/_shared/hooks/useUtils.ts.html +0 -129
  130. package/coverage/lcov-report/src/_shared/icons/ArrowLeftIcon.tsx.html +0 -102
  131. package/coverage/lcov-report/src/_shared/icons/ArrowRightIcon.tsx.html +0 -102
  132. package/coverage/lcov-report/src/_shared/icons/index.html +0 -110
  133. package/coverage/lcov-report/src/_shared/index.html +0 -110
  134. package/coverage/lcov-report/src/constants/ClockType.ts.html +0 -102
  135. package/coverage/lcov-report/src/constants/dimensions.ts.html +0 -84
  136. package/coverage/lcov-report/src/constants/index.html +0 -110
  137. package/coverage/lcov-report/src/index.html +0 -97
  138. package/coverage/lcov-report/src/views/Calendar/Calendar.tsx.html +0 -1152
  139. package/coverage/lcov-report/src/views/Calendar/CalendarHeader.tsx.html +0 -492
  140. package/coverage/lcov-report/src/views/Calendar/Day.tsx.html +0 -360
  141. package/coverage/lcov-report/src/views/Calendar/DayWrapper.tsx.html +0 -168
  142. package/coverage/lcov-report/src/views/Calendar/SlideTransition.tsx.html +0 -369
  143. package/coverage/lcov-report/src/views/Calendar/index.html +0 -149
  144. package/coverage/lcov-report/src/views/Clock/Clock.tsx.html +0 -585
  145. package/coverage/lcov-report/src/views/Clock/ClockPointer.tsx.html +0 -381
  146. package/coverage/lcov-report/src/views/Clock/index.html +0 -110
  147. package/coverage/lcov-report/src/views/Month/Month.tsx.html +0 -297
  148. package/coverage/lcov-report/src/views/Month/MonthView.tsx.html +0 -351
  149. package/coverage/lcov-report/src/views/Month/index.html +0 -110
  150. package/coverage/lcov.info +0 -1094
@@ -0,0 +1,197 @@
1
+ import { utilsToUse } from '../test-utils';
2
+ import { findClosestEnabledDate } from '../../_helpers/date-utils';
3
+
4
+ describe('findClosestEnabledDate', () => {
5
+ const day18thText = utilsToUse.getDayText(utilsToUse.date('2018-08-18'));
6
+ const only18th = (date: any) => utilsToUse.getDayText(date) !== day18thText;
7
+
8
+ it('Should return null if all dates are disabled', () => {
9
+ const result = findClosestEnabledDate({
10
+ date: utilsToUse.date('2000-01-01'),
11
+ minDate: utilsToUse.date('1999-01-01'), // Use close-by min/max dates to reduce the test runtime.
12
+ maxDate: utilsToUse.date('2001-01-01'),
13
+ utils: utilsToUse,
14
+ shouldDisableDate: () => true,
15
+ disableFuture: false,
16
+ disablePast: false,
17
+ });
18
+
19
+ expect(result).toBe(null);
20
+ });
21
+
22
+ it('Should return given date if it is enabled', () => {
23
+ const result = findClosestEnabledDate({
24
+ date: utilsToUse.date('2000-01-01'),
25
+ minDate: utilsToUse.date('1900-01-01'),
26
+ maxDate: utilsToUse.date('2200-01-01'),
27
+ utils: utilsToUse,
28
+ shouldDisableDate: () => false,
29
+ disableFuture: false,
30
+ disablePast: false,
31
+ });
32
+
33
+ expect(utilsToUse.isSameDay(result, utilsToUse.date('2000-01-01'))).toBe(true);
34
+ });
35
+
36
+ it('Should return next 18th going from 10th', () => {
37
+ const result = findClosestEnabledDate({
38
+ date: utilsToUse.date('2018-08-10'),
39
+ minDate: utilsToUse.date('1900-01-01'),
40
+ maxDate: utilsToUse.date('2200-01-01'),
41
+ utils: utilsToUse,
42
+ shouldDisableDate: only18th,
43
+ disableFuture: false,
44
+ disablePast: false,
45
+ });
46
+
47
+ expect(utilsToUse.isSameDay(result, utilsToUse.date('2018-08-18'))).toBe(true);
48
+ });
49
+
50
+ it('Should return previous 18th going from 1st', () => {
51
+ const result = findClosestEnabledDate({
52
+ date: utilsToUse.date('2018-08-01'),
53
+ minDate: utilsToUse.date('1900-01-01'),
54
+ maxDate: utilsToUse.date('2200-01-01'),
55
+ utils: utilsToUse,
56
+ shouldDisableDate: only18th,
57
+ disableFuture: false,
58
+ disablePast: false,
59
+ });
60
+
61
+ expect(utilsToUse.isSameDay(result, utilsToUse.date('2018-07-18'))).toBe(true);
62
+ });
63
+
64
+ it('Should return future 18th if disablePast', () => {
65
+ const today = utilsToUse.startOfDay(utilsToUse.date());
66
+ const result = findClosestEnabledDate({
67
+ date: utilsToUse.date('2000-01-01'),
68
+ minDate: utilsToUse.date('1900-01-01'),
69
+ maxDate: utilsToUse.date('2200-01-01'),
70
+ utils: utilsToUse,
71
+ shouldDisableDate: only18th,
72
+ disableFuture: false,
73
+ disablePast: true,
74
+ });
75
+
76
+ expect(utilsToUse.getDayText(result)).toBe(day18thText);
77
+ expect(utilsToUse.isBefore(result, today)).toBe(false);
78
+ expect(utilsToUse.isBefore(result, utilsToUse.addDays(today, 31))).toBe(true);
79
+ });
80
+
81
+ it('Should return past Saturday if disableFuture', () => {
82
+ const today = utilsToUse.startOfDay(utilsToUse.date());
83
+ const result = findClosestEnabledDate({
84
+ date: utilsToUse.date('2099-01-01'),
85
+ minDate: utilsToUse.date('1900-01-01'),
86
+ maxDate: utilsToUse.date('2200-01-01'),
87
+ utils: utilsToUse,
88
+ shouldDisableDate: only18th,
89
+ disableFuture: true,
90
+ disablePast: false,
91
+ });
92
+
93
+ expect(utilsToUse.isBeforeDay(result, today)).toBe(true);
94
+ expect(utilsToUse.getDayText(result)).toBe(day18thText);
95
+ expect(utilsToUse.isBefore(result, utilsToUse.addDays(today, -31))).toBe(false);
96
+ });
97
+
98
+ it('Should return now if disablePast+disableFuture and now is valid', () => {
99
+ const today = utilsToUse.startOfDay(utilsToUse.date());
100
+ const result = findClosestEnabledDate({
101
+ date: utilsToUse.date('2000-01-01'),
102
+ minDate: utilsToUse.date('1900-01-01'),
103
+ maxDate: utilsToUse.date('2200-01-01'),
104
+ utils: utilsToUse,
105
+ shouldDisableDate: () => false,
106
+ disableFuture: true,
107
+ disablePast: true,
108
+ });
109
+
110
+ expect(utilsToUse.isSameDay(result, today)).toBe(true);
111
+ });
112
+
113
+ it('Should return null if disablePast+disableFuture and now is invalid', () => {
114
+ const today = utilsToUse.date();
115
+ const result = findClosestEnabledDate({
116
+ date: utilsToUse.date('2000-01-01'),
117
+ minDate: utilsToUse.date('1900-01-01'),
118
+ maxDate: utilsToUse.date('2200-01-01'),
119
+ utils: utilsToUse,
120
+ shouldDisableDate: date => utilsToUse.isSameDay(date, today),
121
+ disableFuture: true,
122
+ disablePast: true,
123
+ });
124
+
125
+ expect(result).toBeNull();
126
+ });
127
+
128
+ it('Should return minDate if it is after the date and valid', () => {
129
+ const result = findClosestEnabledDate({
130
+ date: utilsToUse.date('2000-01-01'),
131
+ minDate: utilsToUse.date('2018-08-18'),
132
+ maxDate: utilsToUse.date('2200-01-01'),
133
+ utils: utilsToUse,
134
+ shouldDisableDate: only18th,
135
+ disableFuture: false,
136
+ disablePast: false,
137
+ });
138
+
139
+ expect(utilsToUse.isSameDay(result, utilsToUse.date('2018-08-18'))).toBe(true);
140
+ });
141
+
142
+ it('Should return next 18th after minDate', () => {
143
+ const result = findClosestEnabledDate({
144
+ date: utilsToUse.date('2000-01-01'),
145
+ minDate: utilsToUse.date('2018-08-01'),
146
+ maxDate: utilsToUse.date('2200-01-01'),
147
+ utils: utilsToUse,
148
+ shouldDisableDate: only18th,
149
+ disableFuture: false,
150
+ disablePast: false,
151
+ });
152
+
153
+ expect(utilsToUse.isSameDay(result, utilsToUse.date('2018-08-18'))).toBe(true);
154
+ });
155
+
156
+ it('Should return maxDate if it is before the date and valid', () => {
157
+ const result = findClosestEnabledDate({
158
+ date: utilsToUse.date('2050-01-01'),
159
+ minDate: utilsToUse.date('1900-01-01'),
160
+ maxDate: utilsToUse.date('2018-07-18'),
161
+ utils: utilsToUse,
162
+ shouldDisableDate: only18th,
163
+ disableFuture: false,
164
+ disablePast: false,
165
+ });
166
+
167
+ expect(utilsToUse.isSameDay(result, utilsToUse.date('2018-07-18'))).toBe(true);
168
+ });
169
+
170
+ it('Should return previous 18th before maxDate', () => {
171
+ const result = findClosestEnabledDate({
172
+ date: utilsToUse.date('2050-01-01'),
173
+ minDate: utilsToUse.date('1900-01-01'),
174
+ maxDate: utilsToUse.date('2018-08-17'),
175
+ utils: utilsToUse,
176
+ shouldDisableDate: only18th,
177
+ disableFuture: false,
178
+ disablePast: false,
179
+ });
180
+
181
+ expect(utilsToUse.isSameDay(result, utilsToUse.date('2018-07-18'))).toBe(true);
182
+ });
183
+
184
+ it('Should return null if minDate is after maxDate', () => {
185
+ const result = findClosestEnabledDate({
186
+ date: utilsToUse.date('2000-01-01'),
187
+ minDate: utilsToUse.date('2000-01-01'),
188
+ maxDate: utilsToUse.date('1999-01-01'),
189
+ utils: utilsToUse,
190
+ shouldDisableDate: () => false,
191
+ disableFuture: false,
192
+ disablePast: false,
193
+ });
194
+
195
+ expect(result).toBeNull();
196
+ });
197
+ });
@@ -0,0 +1,34 @@
1
+ import {
2
+ makeMaskFromFormat,
3
+ maskedDateFormatter,
4
+ pick12hOr24hFormat,
5
+ } from '../../_helpers/text-field-helper';
6
+
7
+ const refuse = /[^\d]+/gi;
8
+ describe('test-field-helper', () => {
9
+ test('maskedDateFormatter', () => {
10
+ const formatterFn = maskedDateFormatter('__/__/____', '_', refuse);
11
+
12
+ expect(formatterFn('21')).toBe('21/__/____');
13
+ expect(formatterFn('21-12-21')).toBe('21/12/21__');
14
+ expect(formatterFn('21-12-2010')).toBe('21/12/2010');
15
+ });
16
+
17
+ test('makeMaskFromFormat', () => {
18
+ expect(makeMaskFromFormat('yyyy-mm-dd', '_')).toBe('____-__-__');
19
+ expect(makeMaskFromFormat('YYYY/LL/DD', '_')).toBe('____/__/__');
20
+ expect(makeMaskFromFormat('yyyy-mm-dd mm:hh', '_')).toBe('____-__-__ __:__');
21
+ });
22
+
23
+ test('pick12hOr24hFormat', () => {
24
+ expect(pick12hOr24hFormat(undefined, true, { '12h': 'hh:mm a', '24h': 'HH:mm' })).toBe(
25
+ 'hh:mm a'
26
+ );
27
+ expect(pick12hOr24hFormat(undefined, undefined, { '12h': 'hh:mm a', '24h': 'HH:mm' })).toBe(
28
+ 'hh:mm a'
29
+ );
30
+ expect(pick12hOr24hFormat(undefined, false, { '12h': 'hh:mm a', '24h': 'HH:mm' })).toBe(
31
+ 'HH:mm'
32
+ );
33
+ });
34
+ });
@@ -0,0 +1,109 @@
1
+ import * as React from 'react';
2
+ import { ShallowWrapper } from 'enzyme';
3
+ import { shallow } from '../test-utils';
4
+ import { ModalDialog, ModalDialogProps } from '../../_shared/ModalDialog';
5
+
6
+ const initialProps = {
7
+ onAccept: jest.fn(),
8
+ onDismiss: jest.fn(),
9
+ onClear: jest.fn(),
10
+ onKeyDownInner: jest.fn(),
11
+ okLabel: 'OK',
12
+ open: false,
13
+ cancelLabel: 'Cancel',
14
+ clearLabel: 'Clear',
15
+ clearable: false,
16
+ todayLabel: 'Today',
17
+ showTodayButton: false,
18
+ onSetToday: jest.fn(),
19
+ children: 'Test',
20
+ classes: {} as any,
21
+ };
22
+
23
+ describe('ModalDialog', () => {
24
+ let component: ShallowWrapper<ModalDialogProps>;
25
+ const props = { ...initialProps };
26
+
27
+ beforeEach(() => {
28
+ component = shallow(<ModalDialog {...props} />);
29
+ });
30
+
31
+ it('Should render dialog content', () => {
32
+ expect(component.find('WithStyles(ForwardRef(DialogContent))').props().children).toBe(
33
+ props.children
34
+ );
35
+ });
36
+
37
+ it('Should render dialog actions with 2 buttons', () => {
38
+ expect(component.find('WithStyles(ForwardRef(DialogActions))').length).toBe(1);
39
+ expect(
40
+ component
41
+ .find('WithStyles(ForwardRef(Button))')
42
+ .at(0)
43
+ .props().children
44
+ ).toBe('Cancel');
45
+
46
+ expect(
47
+ component
48
+ .find('WithStyles(ForwardRef(Button))')
49
+ .at(1)
50
+ .props().children
51
+ ).toBe('OK');
52
+ });
53
+
54
+ it('Should handle on OK button click', () => {
55
+ component
56
+ .find('WithStyles(ForwardRef(Button))')
57
+ .at(1)
58
+ .simulate('click');
59
+ expect(props.onAccept).toHaveBeenCalled();
60
+ });
61
+
62
+ it('Should handle on Cancel button click', () => {
63
+ component
64
+ .find('WithStyles(ForwardRef(Button))')
65
+ .at(0)
66
+ .simulate('click');
67
+ expect(props.onDismiss).toHaveBeenCalled();
68
+ });
69
+ });
70
+
71
+ describe('ModalDialog with Clear Button', () => {
72
+ let component: ShallowWrapper<ModalDialogProps>;
73
+ const props = {
74
+ ...initialProps,
75
+ clearable: true,
76
+ };
77
+
78
+ beforeEach(() => {
79
+ component = shallow(<ModalDialog {...props} />);
80
+ });
81
+
82
+ it('Should handle on Clear button click', () => {
83
+ component
84
+ .find('WithStyles(ForwardRef(Button))')
85
+ .at(0)
86
+ .simulate('click');
87
+ expect(props.onClear).toHaveBeenCalled();
88
+ });
89
+ });
90
+
91
+ describe('ModalDialog with Today Button', () => {
92
+ let component: ShallowWrapper<ModalDialogProps>;
93
+ const props = {
94
+ ...initialProps,
95
+ showTodayButton: true,
96
+ };
97
+
98
+ beforeEach(() => {
99
+ component = shallow(<ModalDialog {...props} />);
100
+ });
101
+
102
+ it('Should handle on Clear button click', () => {
103
+ component
104
+ .find('WithStyles(ForwardRef(Button))')
105
+ .at(0)
106
+ .simulate('click');
107
+ expect(props.onSetToday).toHaveBeenCalled();
108
+ });
109
+ });
@@ -0,0 +1,233 @@
1
+ import * as React from 'react';
2
+ import { ReactWrapper } from 'enzyme';
3
+ import { mount, utilsToUse } from '../test-utils';
4
+ import { DatePicker, DatePickerProps } from '../../DatePicker/DatePicker';
5
+
6
+ describe('e2e - DatePicker default year format', () => {
7
+ let component: ReactWrapper<DatePickerProps>;
8
+ const onChangeMock = jest.fn();
9
+ const date = utilsToUse.date('2018-01-01T00:00:00.000Z');
10
+
11
+ beforeEach(() => {
12
+ jest.clearAllMocks();
13
+ component = mount(
14
+ <DatePicker
15
+ animateYearScrolling={false}
16
+ value={utilsToUse.date('2018-01-01T00:00:00.000')}
17
+ onChange={onChangeMock}
18
+ views={['year']}
19
+ />
20
+ );
21
+ });
22
+
23
+ it('Should use year format by default for year only view', () => {
24
+ expect(component.find('input').props().value).toBe(
25
+ utilsToUse.format(date, utilsToUse.yearFormat)
26
+ );
27
+ });
28
+ });
29
+
30
+ describe('e2e - DatePicker default year month format', () => {
31
+ let component: ReactWrapper<DatePickerProps>;
32
+ const onChangeMock = jest.fn();
33
+ const date = utilsToUse.date('2018-01-01T00:00:00.000Z');
34
+
35
+ beforeEach(() => {
36
+ component = mount(
37
+ <DatePicker onChange={onChangeMock} value={date} views={['year', 'month']} />
38
+ );
39
+ });
40
+
41
+ it('Should use year month format by default for year & month views', () => {
42
+ expect(component.find('input').props().value).toBe(
43
+ utilsToUse.format(date, utilsToUse.yearMonthFormat)
44
+ );
45
+ });
46
+ });
47
+
48
+ describe('e2e - DatePicker default year month day format', () => {
49
+ let component: ReactWrapper<DatePickerProps>;
50
+ const onChangeMock = jest.fn();
51
+ const date = utilsToUse.date('2018-01-01T00:00:00.000Z');
52
+
53
+ beforeEach(() => {
54
+ component = mount(
55
+ <DatePicker onChange={onChangeMock} value={date} views={['year', 'month', 'date']} />
56
+ );
57
+ });
58
+
59
+ it('Should use default for year & month & day views', () => {
60
+ expect(component.find('input').props().value).toBe(
61
+ utilsToUse.format(date, utilsToUse.dateFormat)
62
+ );
63
+ });
64
+ });
65
+
66
+ describe('e2e - DatePicker inline variant', () => {
67
+ let component: ReactWrapper<DatePickerProps>;
68
+ const onChangeMock = jest.fn();
69
+ const onCloseMock = jest.fn();
70
+ const onOpenMock = jest.fn();
71
+
72
+ beforeEach(() => {
73
+ jest.clearAllMocks();
74
+ component = mount(
75
+ <DatePicker
76
+ autoOk
77
+ variant="inline"
78
+ animateYearScrolling={false}
79
+ onChange={onChangeMock}
80
+ onClose={onCloseMock}
81
+ onOpen={onOpenMock}
82
+ value={utilsToUse.date('2018-01-01T00:00:00.000Z')}
83
+ />
84
+ );
85
+ });
86
+
87
+ it('Should renders', () => {
88
+ expect(component).toBeTruthy();
89
+ });
90
+
91
+ it('Should open modal with picker on click', () => {
92
+ component.find('input').simulate('click');
93
+
94
+ expect(component.find('WithStyles(ForwardRef(Popover))').props().open).toBeTruthy();
95
+ expect(onOpenMock).toHaveBeenCalled();
96
+ });
97
+
98
+ it('Should close on popover close request', () => {
99
+ const popoverOnClose = component
100
+ .find('WithStyles(ForwardRef(Popover))')
101
+ .prop('onClose') as () => void;
102
+
103
+ popoverOnClose();
104
+
105
+ expect(component.find('WithStyles(ForwardRef(Popover))').prop('open')).toBeFalsy();
106
+ expect(onCloseMock).toHaveBeenCalled();
107
+ });
108
+
109
+ it('Should dispatch onChange and close on day select', () => {
110
+ component.find('input').simulate('click');
111
+ component
112
+ .find('Day button')
113
+ .at(10)
114
+ .simulate('click');
115
+
116
+ expect(onChangeMock).toHaveBeenCalled();
117
+ expect(component.find('WithStyles(ForwardRef(Popover))').props().open).toBeFalsy();
118
+ });
119
+ });
120
+
121
+ describe('e2e - DatePicker without month change', () => {
122
+ let component: ReactWrapper<DatePickerProps>;
123
+ const onChangeMock = jest.fn();
124
+ const date = utilsToUse.date('2018-01-01T00:00:00.000Z');
125
+
126
+ beforeEach(() => {
127
+ component = mount(<DatePicker open onChange={onChangeMock} value={date} />);
128
+ });
129
+
130
+ it('Should not add to loading queue if callback is undefined', () => {
131
+ component
132
+ .find('CalendarHeader button')
133
+ .first()
134
+ .simulate('click');
135
+ expect(
136
+ component
137
+ .find('Calendar')
138
+ .first()
139
+ .state('loadingQueue')
140
+ ).toEqual(0);
141
+ });
142
+ });
143
+
144
+ describe('e2e - DatePicker month change sync', () => {
145
+ let component: ReactWrapper<DatePickerProps>;
146
+ const onChangeMock = jest.fn();
147
+ const onMonthChangeMock = jest.fn();
148
+ const date = utilsToUse.date('2018-01-01T00:00:00.000Z');
149
+
150
+ beforeEach(() => {
151
+ component = mount(
152
+ <DatePicker open onChange={onChangeMock} onMonthChange={onMonthChangeMock} value={date} />
153
+ );
154
+ });
155
+
156
+ it('Should not add to loading queue when synchronous', () => {
157
+ component
158
+ .find('CalendarHeader button')
159
+ .first()
160
+ .simulate('click');
161
+ expect(
162
+ component
163
+ .find('Calendar')
164
+ .first()
165
+ .state('loadingQueue')
166
+ ).toEqual(0);
167
+ });
168
+ });
169
+
170
+ describe('e2e - DatePicker month change async', () => {
171
+ let component: ReactWrapper<DatePickerProps>;
172
+ const onChangeMock = jest.fn();
173
+
174
+ const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));
175
+ const promise = sleep(50);
176
+ const onMonthChangeAsyncMock = jest.fn(async () => {
177
+ await promise;
178
+ });
179
+
180
+ const date = utilsToUse.date('2018-01-01T00:00:00.000Z');
181
+
182
+ beforeEach(() => {
183
+ component = mount(
184
+ <DatePicker
185
+ open
186
+ onChange={onChangeMock}
187
+ onMonthChange={onMonthChangeAsyncMock}
188
+ value={date}
189
+ />
190
+ );
191
+ });
192
+
193
+ it('Should add to loading queue when loading asynchronous data', () => {
194
+ component
195
+ .find('CalendarHeader button')
196
+ .first()
197
+ .simulate('click');
198
+
199
+ expect(
200
+ component
201
+ .find('Calendar')
202
+ .first()
203
+ .state('loadingQueue')
204
+ ).toEqual(1);
205
+ });
206
+
207
+ it('Should empty loading queue after loading asynchronous data', async () => {
208
+ component
209
+ .find('CalendarHeader button')
210
+ .first()
211
+ .simulate('click');
212
+ await sleep(100);
213
+ expect(
214
+ component
215
+ .find('Calendar')
216
+ .first()
217
+ .state('loadingQueue')
218
+ ).toEqual(0);
219
+ });
220
+ });
221
+
222
+ test('Custom toolbar component', () => {
223
+ const component = mount(
224
+ <DatePicker
225
+ open
226
+ value={new Date()}
227
+ onChange={jest.fn()}
228
+ ToolbarComponent={() => <div id="custom-toolbar" />}
229
+ />
230
+ );
231
+
232
+ expect(component.find('#custom-toolbar').length).toBe(1);
233
+ });
@@ -0,0 +1,18 @@
1
+ import * as React from 'react';
2
+ import { mount, utilsToUse } from '../test-utils';
3
+ import { DatePicker } from '../../DatePicker/DatePicker';
4
+
5
+ describe('DatePicker - different props', () => {
6
+ it('Should not render toolbar if onlyCalendar = true', () => {
7
+ const component = mount(
8
+ <DatePicker
9
+ open
10
+ disableToolbar
11
+ onChange={jest.fn()}
12
+ value={utilsToUse.date('2018-01-01T00:00:00.000Z')}
13
+ />
14
+ );
15
+
16
+ expect(component.find('WithStyles(PickerToolbar)').length).toBe(0);
17
+ });
18
+ });