@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.
- package/.size-snapshot.json +11 -11
- package/9db1cba1a61cb58db53f38425bbd1f95.7z +0 -0
- package/build/DatePicker/DatePicker.d.ts +2 -2
- package/build/DatePicker/DatePicker.js +1 -1
- package/build/DateTimePicker/DateTimePicker.js +1 -1
- package/build/Picker/Picker.js +1 -1
- package/build/TimePicker/TimePicker.js +1 -1
- package/build/_helpers/text-field-helper.d.ts +1 -1
- package/build/_shared/KeyboardDateInput.js +1 -1
- package/build/_shared/ModalDialog.d.ts +2 -2
- package/build/_shared/PureDateInput.js +1 -1
- package/build/_shared/ToolbarButton.d.ts +2 -2
- package/build/_shared/hooks/useKeyboardPickerState.js +2 -2
- package/build/constants/prop-types.js +2 -2
- package/build/dist/material-ui-pickers.esm.js +12 -12
- package/build/dist/material-ui-pickers.esm.js.map +1 -1
- package/build/dist/material-ui-pickers.js +62 -62
- package/build/dist/material-ui-pickers.js.map +1 -1
- package/build/dist/material-ui-pickers.umd.js +5790 -4511
- package/build/dist/material-ui-pickers.umd.min.js +1 -1
- package/build/package.json +1 -1
- package/build/views/Calendar/Calendar.js +2 -2
- package/build/views/Clock/Clock.d.ts +1 -1
- package/build/views/Clock/ClockPointer.d.ts +1 -1
- package/package.json +1 -1
- package/src/DatePicker/DatePicker.tsx +91 -0
- package/src/DatePicker/DatePickerToolbar.tsx +75 -0
- package/src/DatePicker/index.ts +7 -0
- package/src/DateTimePicker/DateTimePicker.tsx +72 -0
- package/src/DateTimePicker/DateTimePickerTabs.tsx +86 -0
- package/src/DateTimePicker/DateTimePickerToolbar.tsx +123 -0
- package/src/DateTimePicker/index.ts +7 -0
- package/src/MuiPickersUtilsProvider.tsx +39 -0
- package/src/Picker/Picker.tsx +275 -0
- package/src/Picker/WrappedKeyboardPicker.tsx +136 -0
- package/src/Picker/WrappedPurePicker.tsx +128 -0
- package/src/Rifm/Rifm.ts +213 -0
- package/src/TimePicker/TimePicker.tsx +67 -0
- package/src/TimePicker/TimePickerToolbar.tsx +180 -0
- package/src/TimePicker/index.tsx +7 -0
- package/src/__tests__/DatePicker/Calendar.test.tsx +51 -0
- package/src/__tests__/DatePicker/Month.test.tsx +36 -0
- package/src/__tests__/DatePicker/MonthSelection.test.tsx +37 -0
- package/src/__tests__/MuiPickersUtilsProvider.test.tsx +21 -0
- package/src/__tests__/TimePicker/Clock.test.tsx +68 -0
- package/src/__tests__/_helpers/date-utils.test.tsx +197 -0
- package/src/__tests__/_helpers/text-field-helper.test.tsx +34 -0
- package/src/__tests__/_shared/ModalDialog.test.tsx +109 -0
- package/src/__tests__/e2e/DatePicker.test.tsx +233 -0
- package/src/__tests__/e2e/DatePickerProps.test.tsx +18 -0
- package/src/__tests__/e2e/DatePickerRoot.test.tsx +154 -0
- package/src/__tests__/e2e/DateTimePicker.test.tsx +86 -0
- package/src/__tests__/e2e/DateTimePickerRoot.test.tsx +72 -0
- package/src/__tests__/e2e/KeyboardDatePicker.test.tsx +140 -0
- package/src/__tests__/e2e/KeyboardDateTimePicker.test.tsx +48 -0
- package/src/__tests__/e2e/Theme.test.tsx +30 -0
- package/src/__tests__/e2e/TimePicker.test.tsx +121 -0
- package/src/__tests__/e2e/commands.tsx +8 -0
- package/src/__tests__/setup.js +26 -0
- package/src/__tests__/test-utils.tsx +45 -0
- package/src/__tests__/tsconfig.json +5 -0
- package/src/_helpers/date-utils.ts +92 -0
- package/src/_helpers/text-field-helper.ts +239 -0
- package/src/_helpers/time-utils.ts +83 -0
- package/src/_helpers/utils.ts +8 -0
- package/src/_shared/KeyboardDateInput.tsx +161 -0
- package/src/_shared/ModalDialog.tsx +114 -0
- package/src/_shared/PickerToolbar.tsx +52 -0
- package/src/_shared/PureDateInput.tsx +45 -0
- package/src/_shared/ToolbarButton.tsx +63 -0
- package/src/_shared/ToolbarText.tsx +49 -0
- package/src/_shared/WithUtils.tsx +19 -0
- package/src/_shared/hooks/useIsLandscape.tsx +27 -0
- package/src/_shared/hooks/useKeyDown.ts +34 -0
- package/src/_shared/hooks/useKeyboardPickerState.ts +72 -0
- package/src/_shared/hooks/useOpenState.ts +22 -0
- package/src/_shared/hooks/usePickerState.ts +134 -0
- package/src/_shared/hooks/useUtils.ts +20 -0
- package/src/_shared/hooks/useViews.tsx +31 -0
- package/src/_shared/icons/ArrowLeftIcon.tsx +11 -0
- package/src/_shared/icons/ArrowRightIcon.tsx +11 -0
- package/src/_shared/icons/DateRangeIcon.tsx +11 -0
- package/src/_shared/icons/KeyboardIcon.tsx +11 -0
- package/src/_shared/icons/TimeIcon.tsx +12 -0
- package/src/constants/ClockType.ts +11 -0
- package/src/constants/dimensions.ts +5 -0
- package/src/constants/prop-types.ts +37 -0
- package/src/index.ts +48 -0
- package/src/typings/BasePicker.tsx +60 -0
- package/src/typings/date.ts +3 -0
- package/src/typings/extendMui.ts +10 -0
- package/src/typings/overrides.ts +44 -0
- package/src/views/Calendar/Calendar.tsx +361 -0
- package/src/views/Calendar/CalendarHeader.tsx +141 -0
- package/src/views/Calendar/Day.tsx +97 -0
- package/src/views/Calendar/DayWrapper.tsx +33 -0
- package/src/views/Calendar/SlideTransition.tsx +100 -0
- package/src/views/Clock/Clock.tsx +172 -0
- package/src/views/Clock/ClockNumber.tsx +91 -0
- package/src/views/Clock/ClockNumbers.tsx +76 -0
- package/src/views/Clock/ClockPointer.tsx +104 -0
- package/src/views/Clock/ClockView.tsx +105 -0
- package/src/views/Month/Month.tsx +76 -0
- package/src/views/Month/MonthView.tsx +94 -0
- package/src/views/Year/Year.tsx +77 -0
- package/src/views/Year/YearView.tsx +91 -0
- package/src/wrappers/InlineWrapper.tsx +80 -0
- package/src/wrappers/ModalWrapper.tsx +113 -0
- package/src/wrappers/StaticWrapper.tsx +22 -0
- package/src/wrappers/Wrapper.tsx +75 -0
- package/coverage/clover.xml +0 -601
- package/coverage/coverage-final.json +0 -22
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -79
- package/coverage/lcov-report/index.html +0 -201
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -170
- package/coverage/lcov-report/src/MuiPickersUtilsProvider.tsx.html +0 -186
- package/coverage/lcov-report/src/_helpers/date-utils.ts.html +0 -345
- package/coverage/lcov-report/src/_helpers/index.html +0 -123
- package/coverage/lcov-report/src/_helpers/time-utils.ts.html +0 -318
- package/coverage/lcov-report/src/_helpers/utils.ts.html +0 -93
- package/coverage/lcov-report/src/_shared/ModalDialog.tsx.html +0 -411
- package/coverage/lcov-report/src/_shared/WithUtils.tsx.html +0 -126
- package/coverage/lcov-report/src/_shared/hooks/index.html +0 -110
- package/coverage/lcov-report/src/_shared/hooks/useKeyDown.ts.html +0 -171
- package/coverage/lcov-report/src/_shared/hooks/useUtils.ts.html +0 -129
- package/coverage/lcov-report/src/_shared/icons/ArrowLeftIcon.tsx.html +0 -102
- package/coverage/lcov-report/src/_shared/icons/ArrowRightIcon.tsx.html +0 -102
- package/coverage/lcov-report/src/_shared/icons/index.html +0 -110
- package/coverage/lcov-report/src/_shared/index.html +0 -110
- package/coverage/lcov-report/src/constants/ClockType.ts.html +0 -102
- package/coverage/lcov-report/src/constants/dimensions.ts.html +0 -84
- package/coverage/lcov-report/src/constants/index.html +0 -110
- package/coverage/lcov-report/src/index.html +0 -97
- package/coverage/lcov-report/src/views/Calendar/Calendar.tsx.html +0 -1152
- package/coverage/lcov-report/src/views/Calendar/CalendarHeader.tsx.html +0 -492
- package/coverage/lcov-report/src/views/Calendar/Day.tsx.html +0 -360
- package/coverage/lcov-report/src/views/Calendar/DayWrapper.tsx.html +0 -168
- package/coverage/lcov-report/src/views/Calendar/SlideTransition.tsx.html +0 -369
- package/coverage/lcov-report/src/views/Calendar/index.html +0 -149
- package/coverage/lcov-report/src/views/Clock/Clock.tsx.html +0 -585
- package/coverage/lcov-report/src/views/Clock/ClockPointer.tsx.html +0 -381
- package/coverage/lcov-report/src/views/Clock/index.html +0 -110
- package/coverage/lcov-report/src/views/Month/Month.tsx.html +0 -297
- package/coverage/lcov-report/src/views/Month/MonthView.tsx.html +0 -351
- package/coverage/lcov-report/src/views/Month/index.html +0 -110
- 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
|
+
});
|