@@ -10,18 +10,27 @@ import { DateTimeRangePicker, dateForInput } from './DateTimeRangePicker'
1010const now = new Date ( 2020 , 1 , 1 )
1111
1212function renderLastDay ( ) {
13- const onChange = vi . fn ( )
13+ const setStartTime = vi . fn ( )
14+ const setEndTime = vi . fn ( )
1415 render (
1516 < DateTimeRangePicker
1617 initialPreset = "lastDay"
1718 startTime = { subDays ( now , 1 ) }
1819 endTime = { now }
19- onChange = { onChange }
20+ setStartTime = { setStartTime }
21+ setEndTime = { setEndTime }
2022 />
2123 )
22- return { onChange }
24+ return { setStartTime , setEndTime }
2325}
2426
27+ beforeAll ( ( ) => {
28+ vi . useFakeTimers ( )
29+ vi . setSystemTime ( now )
30+
31+ return ( ) => vi . useRealTimers ( )
32+ } )
33+
2534describe ( 'useDateTimeRangePicker' , ( ) => {
2635 it . each ( [
2736 [ 'lastHour' , subHours ( now , 1 ) ] ,
@@ -30,13 +39,13 @@ describe('useDateTimeRangePicker', () => {
3039 [ 'lastWeek' , subDays ( now , 7 ) ] ,
3140 [ 'last30Days' , subDays ( now , 30 ) ] ,
3241 ] ) ( 'sets initial start and end' , ( preset , start ) => {
33- const onChange = vi . fn ( )
3442 render (
3543 < DateTimeRangePicker
3644 initialPreset = { preset as RangeKey }
3745 startTime = { start }
3846 endTime = { now }
39- onChange = { onChange }
47+ setStartTime = { ( ) => { } }
48+ setEndTime = { ( ) => { } }
4049 />
4150 )
4251
@@ -52,36 +61,33 @@ it.each([
5261 [ 'Last week' , subDays ( now , 7 ) ] ,
5362 [ 'Last 30 days' , subDays ( now , 30 ) ] ,
5463] ) ( 'choosing a preset sets the times' , ( option , start ) => {
55- vi . useFakeTimers ( )
56- vi . setSystemTime ( now )
57-
58- const { onChange } = renderLastDay ( )
64+ const { setStartTime, setEndTime } = renderLastDay ( )
5965
6066 clickByRole ( 'button' , 'Choose a time range' )
6167 clickByRole ( 'option' , option )
6268
63- expect ( onChange ) . toBeCalledWith ( start , now )
64-
65- vi . useRealTimers ( )
69+ expect ( setStartTime ) . toBeCalledWith ( start )
70+ expect ( setEndTime ) . toBeCalledWith ( now )
6671} )
6772
6873describe ( 'custom mode' , ( ) => {
6974 it ( 'enables datetime inputs' , ( ) => {
70- const { onChange } = renderLastDay ( )
75+ const { setStartTime , setEndTime } = renderLastDay ( )
7176
7277 expect ( screen . getByLabelText ( 'Start time' ) ) . toBeDisabled ( )
7378
7479 clickByRole ( 'button' , 'Choose a time range' )
7580 clickByRole ( 'option' , 'Custom...' )
7681
77- expect ( onChange ) . not . toBeCalled ( )
82+ expect ( setStartTime ) . not . toBeCalled ( )
83+ expect ( setEndTime ) . not . toBeCalled ( )
7884 expect ( screen . getByLabelText ( 'Start time' ) ) . toBeEnabled ( )
7985 expect ( screen . getByRole ( 'button' , { name : 'Reset' } ) ) . toHaveClass ( 'visually-disabled' )
8086 expect ( screen . getByRole ( 'button' , { name : 'Load' } ) ) . toHaveClass ( 'visually-disabled' )
8187 } )
8288
8389 it ( 'clicking load after changing date changes range' , async ( ) => {
84- const { onChange } = renderLastDay ( )
90+ const { setStartTime , setEndTime } = renderLastDay ( )
8591
8692 expect ( screen . getByLabelText ( 'Start time' ) ) . toHaveValue ( dateForInput ( subDays ( now , 1 ) ) )
8793 expect ( screen . getByLabelText ( 'End time' ) ) . toHaveValue ( dateForInput ( now ) )
@@ -98,15 +104,17 @@ describe('custom mode', () => {
98104 fireEvent . change ( endInput , { target : { value : '2020-01-17T00:00' } } )
99105
100106 // changing the input value without clicking Load doesn't do anything
101- expect ( onChange ) . not . toBeCalled ( )
107+ expect ( setStartTime ) . not . toBeCalled ( )
108+ expect ( setEndTime ) . not . toBeCalled ( )
102109
103- // clicking Load calls onChange
110+ // clicking Load calls setTime with the new range
104111 clickByRole ( 'button' , 'Load' )
105- expect ( onChange ) . toBeCalledWith ( new Date ( 2020 , 0 , 15 ) , new Date ( 2020 , 0 , 17 ) )
112+ expect ( setStartTime ) . toBeCalledWith ( new Date ( 2020 , 0 , 15 ) )
113+ expect ( setEndTime ) . toBeCalledWith ( new Date ( 2020 , 0 , 17 ) )
106114 } )
107115
108116 it ( 'clicking reset after changing inputs resets inputs' , async ( ) => {
109- const { onChange } = renderLastDay ( )
117+ const { setStartTime , setEndTime } = renderLastDay ( )
110118
111119 expect ( screen . getByLabelText ( 'Start time' ) ) . toHaveValue ( dateForInput ( subDays ( now , 1 ) ) )
112120 expect ( screen . getByLabelText ( 'End time' ) ) . toHaveValue ( dateForInput ( now ) )
@@ -127,8 +135,8 @@ describe('custom mode', () => {
127135 expect ( startInput ) . toHaveValue ( '2020-01-31T00:00' )
128136 expect ( endInput ) . toHaveValue ( '2020-02-01T00:00' )
129137
130- // onChange is never called
131- expect ( onChange ) . not . toBeCalled ( )
138+ expect ( setStartTime ) . not . toBeCalled ( )
139+ expect ( setEndTime ) . not . toBeCalled ( )
132140 } )
133141
134142 it ( 'shows error for invalid range' , ( ) => {
0 commit comments