@@ -6,9 +6,11 @@ import DatePicker from "../index";
66
77import {
88 getKey ,
9+ getResizeObserverCallback ,
910 SafeElementWrapper ,
1011 safeQuerySelector ,
1112 safeQuerySelectorAll ,
13+ setupMockResizeObserver ,
1214} from "./test_utils" ;
1315
1416const MIN_TIME_LI_LEN = 2 ;
@@ -19,10 +21,65 @@ describe("TimePicker", () => {
1921 let onChangeMoment : Date | undefined ;
2022 let instance : DatePicker | null = null ;
2123
24+ let mockObserve : jest . Mock , mockDisconnect : jest . Mock ;
25+
26+ beforeAll ( ( ) => {
27+ const { observe, disconnect } = setupMockResizeObserver ( ) ;
28+ mockObserve = observe ;
29+ mockDisconnect = disconnect ;
30+ } ) ;
31+
2232 beforeEach ( ( ) => {
2333 div = document . createElement ( "div" ) ;
2434 } ) ;
2535
36+ describe ( "Re-adjust height on Calendar Height Change" , ( ) => {
37+ beforeEach ( ( ) => {
38+ mockObserve . mockReset ( ) ;
39+ mockDisconnect . mockReset ( ) ;
40+ } ) ;
41+
42+ it ( "calls observe on mount" , async ( ) => {
43+ render (
44+ < DatePicker
45+ inline
46+ selected = { new Date ( ) }
47+ showTimeSelect
48+ timeIntervals = { 15 }
49+ /> ,
50+ ) ;
51+ await waitFor ( ( ) => {
52+ expect ( mockObserve ) . toHaveBeenCalledTimes ( 1 ) ;
53+
54+ const resizeObserverCallback = getResizeObserverCallback ( ) ;
55+ const mockObserveElement = mockObserve . mock . calls [ 0 ] [ 0 ] ;
56+ expect ( typeof resizeObserverCallback ) . toBe ( "function" ) ;
57+
58+ if ( resizeObserverCallback ) {
59+ resizeObserverCallback ( [ ] , mockObserveElement ) ;
60+ }
61+ } ) ;
62+ } ) ;
63+
64+ it ( "calls disconnect on unmount" , async ( ) => {
65+ const component = render (
66+ < DatePicker
67+ inline
68+ selected = { new Date ( ) }
69+ showTimeSelect
70+ timeIntervals = { 15 }
71+ /> ,
72+ ) ;
73+
74+ component . unmount ( ) ;
75+ await waitFor ( ( ) => {
76+ expect ( mockDisconnect ) . toHaveBeenCalledTimes ( 1 ) ;
77+ const resizeObserverCallback = getResizeObserverCallback ( ) ;
78+ expect ( resizeObserverCallback ) . toBe ( null ) ;
79+ } ) ;
80+ } ) ;
81+ } ) ;
82+
2683 it ( "should update on input time change" , ( ) => {
2784 renderDatePicker ( "February 28, 2018 4:43 PM" ) ;
2885 expect ( getInputString ( ) ) . toBe ( "February 28, 2018 4:43 PM" ) ;
0 commit comments