@@ -150,4 +150,182 @@ describe("DateRangePicker", () => {
150
150
expect ( handleSelectDate ) . not . toHaveBeenCalled ( ) ;
151
151
} ) ;
152
152
} ) ;
153
+
154
+ describe ( "predefined date ranges" , ( ) => {
155
+ beforeEach ( ( ) => {
156
+ vi . setSystemTime ( new Date ( "07-04-2020" ) ) ;
157
+ } ) ;
158
+
159
+ afterEach ( ( ) => {
160
+ vi . useRealTimers ( ) ;
161
+ } ) ;
162
+
163
+ it ( "doesn't show any preselected dates if the value isn't set" , async ( ) => {
164
+ const handleSelectDate = vi . fn ( ) ;
165
+
166
+ const { getByTestId, queryByTestId } = renderCUI (
167
+ < DateRangePicker onSelectDateRange = { handleSelectDate } />
168
+ ) ;
169
+
170
+ await userEvent . click ( getByTestId ( "daterangepicker-input" ) ) ;
171
+
172
+ expect ( queryByTestId ( "predefined-dates-list" ) ) . not . toBeInTheDocument ( ) ;
173
+ } ) ;
174
+
175
+ it ( "shows dates in the past if the value is negative" , async ( ) => {
176
+ const handleSelectDate = vi . fn ( ) ;
177
+
178
+ const { getByTestId, getByText } = renderCUI (
179
+ < DateRangePicker
180
+ onSelectDateRange = { handleSelectDate }
181
+ predefinedDatesCount = { - 6 }
182
+ />
183
+ ) ;
184
+
185
+ await userEvent . click ( getByTestId ( "daterangepicker-input" ) ) ;
186
+
187
+ expect ( getByText ( "Jul 2020" ) ) . toBeInTheDocument ( ) ;
188
+ expect ( getByText ( "Jun 2020" ) ) . toBeInTheDocument ( ) ;
189
+ expect ( getByText ( "May 2020" ) ) . toBeInTheDocument ( ) ;
190
+ expect ( getByText ( "Apr 2020" ) ) . toBeInTheDocument ( ) ;
191
+ expect ( getByText ( "Mar 2020" ) ) . toBeInTheDocument ( ) ;
192
+ expect ( getByText ( "Feb 2020" ) ) . toBeInTheDocument ( ) ;
193
+ } ) ;
194
+
195
+ it ( "shows dates in the future if the value is positive" , async ( ) => {
196
+ const handleSelectDate = vi . fn ( ) ;
197
+
198
+ const { getByTestId, getByText } = renderCUI (
199
+ < DateRangePicker
200
+ onSelectDateRange = { handleSelectDate }
201
+ predefinedDatesCount = { 6 }
202
+ />
203
+ ) ;
204
+
205
+ await userEvent . click ( getByTestId ( "daterangepicker-input" ) ) ;
206
+
207
+ expect ( getByText ( "Jul 2020" ) ) . toBeInTheDocument ( ) ;
208
+ expect ( getByText ( "Aug 2020" ) ) . toBeInTheDocument ( ) ;
209
+ expect ( getByText ( "Sep 2020" ) ) . toBeInTheDocument ( ) ;
210
+ expect ( getByText ( "Oct 2020" ) ) . toBeInTheDocument ( ) ;
211
+ expect ( getByText ( "Nov 2020" ) ) . toBeInTheDocument ( ) ;
212
+ expect ( getByText ( "Dec 2020" ) ) . toBeInTheDocument ( ) ;
213
+ } ) ;
214
+
215
+ it ( "allows showing the full calendar" , async ( ) => {
216
+ const handleSelectDate = vi . fn ( ) ;
217
+
218
+ const { getByTestId, getByText, queryByTestId } = renderCUI (
219
+ < DateRangePicker
220
+ onSelectDateRange = { handleSelectDate }
221
+ predefinedDatesCount = { - 12 }
222
+ />
223
+ ) ;
224
+
225
+ expect ( queryByTestId ( "datepicker-calendar-container" ) ) . not . toBeInTheDocument ( ) ;
226
+
227
+ await userEvent . click ( getByTestId ( "daterangepicker-input" ) ) ;
228
+ await userEvent . click ( getByText ( "Custom time period" ) ) ;
229
+
230
+ expect ( getByTestId ( "datepicker-calendar-container" ) ) . toBeInTheDocument ( ) ;
231
+ } ) ;
232
+
233
+ it ( "shows at maximum six dates in the past or future" , async ( ) => {
234
+ const handleSelectDate = vi . fn ( ) ;
235
+
236
+ const { getByTestId, getByText, queryByText } = renderCUI (
237
+ < DateRangePicker
238
+ onSelectDateRange = { handleSelectDate }
239
+ predefinedDatesCount = { - 12 }
240
+ />
241
+ ) ;
242
+
243
+ await userEvent . click ( getByTestId ( "daterangepicker-input" ) ) ;
244
+
245
+ expect ( getByText ( "Jul 2020" ) ) . toBeInTheDocument ( ) ;
246
+ expect ( getByText ( "Jun 2020" ) ) . toBeInTheDocument ( ) ;
247
+ expect ( getByText ( "May 2020" ) ) . toBeInTheDocument ( ) ;
248
+ expect ( getByText ( "Apr 2020" ) ) . toBeInTheDocument ( ) ;
249
+ expect ( getByText ( "Mar 2020" ) ) . toBeInTheDocument ( ) ;
250
+ expect ( getByText ( "Feb 2020" ) ) . toBeInTheDocument ( ) ;
251
+
252
+ expect ( queryByText ( "Jan 2020" ) ) . not . toBeInTheDocument ( ) ;
253
+ } ) ;
254
+
255
+ it ( "selects up to the current date if the current month is selected" , async ( ) => {
256
+ const handleSelectDate = vi . fn ( ) ;
257
+
258
+ const { getByTestId, getByText } = renderCUI (
259
+ < DateRangePicker
260
+ onSelectDateRange = { handleSelectDate }
261
+ predefinedDatesCount = { - 6 }
262
+ />
263
+ ) ;
264
+
265
+ await userEvent . click ( getByTestId ( "daterangepicker-input" ) ) ;
266
+
267
+ await userEvent . click ( getByText ( "Jul 2020" ) ) ;
268
+ expect ( getByText ( "Jul 01, 2020 – Jul 04, 2020" ) ) . toBeInTheDocument ( ) ;
269
+ } ) ;
270
+
271
+ it ( "selects the full month if a date in the past or future is selected" , async ( ) => {
272
+ const handleSelectDate = vi . fn ( ) ;
273
+
274
+ const { getByTestId, getByText } = renderCUI (
275
+ < DateRangePicker
276
+ onSelectDateRange = { handleSelectDate }
277
+ predefinedDatesCount = { - 6 }
278
+ />
279
+ ) ;
280
+
281
+ await userEvent . click ( getByTestId ( "daterangepicker-input" ) ) ;
282
+
283
+ await userEvent . click ( getByText ( "May 2020" ) ) ;
284
+ expect ( getByText ( "May 01, 2020 – May 31, 2020" ) ) . toBeInTheDocument ( ) ;
285
+ } ) ;
286
+
287
+ it ( "shows the selected month if an entire month is manually selected" , async ( ) => {
288
+ const handleSelectDate = vi . fn ( ) ;
289
+
290
+ const { getByTestId, getAllByText, getByText } = renderCUI (
291
+ < DateRangePicker
292
+ onSelectDateRange = { handleSelectDate }
293
+ predefinedDatesCount = { - 6 }
294
+ />
295
+ ) ;
296
+
297
+ await userEvent . click ( getByTestId ( "daterangepicker-input" ) ) ;
298
+ await userEvent . click ( getByText ( "Custom time period" ) ) ;
299
+ await userEvent . click ( getByTestId ( "calendar-previous-month" ) ) ;
300
+
301
+ await userEvent . click ( getAllByText ( "1" ) [ 0 ] ) ;
302
+ await userEvent . click ( getByText ( "30" ) ) ;
303
+
304
+ expect ( getByText ( "Jun 01, 2020 – Jun 30, 2020" ) ) . toBeInTheDocument ( ) ;
305
+
306
+ await userEvent . click ( getByTestId ( "daterangepicker-input" ) ) ;
307
+ expect ( getByText ( "Jun 2020" ) . getAttribute ( "data-selected" ) ) . toBeTruthy ( ) ;
308
+ } ) ;
309
+
310
+ it ( "shows months wrapping around to the next or previous year" , async ( ) => {
311
+ vi . setSystemTime ( new Date ( "03-04-2020" ) ) ;
312
+ const handleSelectDate = vi . fn ( ) ;
313
+
314
+ const { getByTestId, getByText } = renderCUI (
315
+ < DateRangePicker
316
+ onSelectDateRange = { handleSelectDate }
317
+ predefinedDatesCount = { - 6 }
318
+ />
319
+ ) ;
320
+
321
+ await userEvent . click ( getByTestId ( "daterangepicker-input" ) ) ;
322
+
323
+ expect ( getByText ( "Mar 2020" ) ) . toBeInTheDocument ( ) ;
324
+ expect ( getByText ( "Feb 2020" ) ) . toBeInTheDocument ( ) ;
325
+ expect ( getByText ( "Jan 2020" ) ) . toBeInTheDocument ( ) ;
326
+ expect ( getByText ( "Dec 2019" ) ) . toBeInTheDocument ( ) ;
327
+ expect ( getByText ( "Nov 2019" ) ) . toBeInTheDocument ( ) ;
328
+ expect ( getByText ( "Oct 2019" ) ) . toBeInTheDocument ( ) ;
329
+ } ) ;
330
+ } ) ;
153
331
} ) ;
0 commit comments