@@ -78,6 +78,114 @@ describe("Components / Datepicker", () => {
78
78
await userEvent . click ( document . body ) ;
79
79
} ) ;
80
80
81
+ it ( "should render 1990 - 2100 year range when selecting decade" , async ( ) => {
82
+ const testDate = new Date ( 2024 , 6 , 20 ) ;
83
+ render ( < Datepicker value = { testDate . getTime ( ) } /> ) ;
84
+
85
+ const textBox = screen . getByRole ( "textbox" ) ;
86
+ await userEvent . click ( textBox ) ;
87
+
88
+ const titleButton = screen . getByText ( "July 2024" ) ;
89
+ await userEvent . click ( titleButton ) ;
90
+ expect ( titleButton . textContent ) . toBe ( "2024" ) ;
91
+ await userEvent . click ( titleButton ) ;
92
+ expect ( titleButton . textContent ) . toBe ( "2020 - 2031" ) ;
93
+ await userEvent . click ( titleButton ) ;
94
+ expect ( titleButton . textContent ) . toBe ( "1990 - 2100" ) ;
95
+ } ) ;
96
+
97
+ it ( "should allow selecting earlier decades when setting max date" , async ( ) => {
98
+ const testDate = new Date ( 2024 , 6 , 20 ) ;
99
+ render ( < Datepicker value = { testDate . getTime ( ) } maxDate = { testDate } /> ) ;
100
+
101
+ const textBox = screen . getByRole ( "textbox" ) ;
102
+ await userEvent . click ( textBox ) ;
103
+
104
+ const titleButton = screen . getByText ( "July 2024" ) ;
105
+ await userEvent . click ( titleButton ) ;
106
+ await userEvent . click ( titleButton ) ;
107
+ await userEvent . click ( titleButton ) ;
108
+
109
+ const earlierDecadeButton = screen . getByText ( "2010" ) ;
110
+ expect ( earlierDecadeButton ) . instanceOf ( HTMLButtonElement ) ;
111
+ expect ( earlierDecadeButton ) . toBeEnabled ( ) ;
112
+ } ) ;
113
+
114
+ it ( "should disallow selecting later decades when setting max date" , async ( ) => {
115
+ const testDate = new Date ( 2024 , 6 , 20 ) ;
116
+ render ( < Datepicker value = { testDate . getTime ( ) } maxDate = { testDate } /> ) ;
117
+
118
+ const textBox = screen . getByRole ( "textbox" ) ;
119
+ await userEvent . click ( textBox ) ;
120
+
121
+ const titleButton = screen . getByText ( "July 2024" ) ;
122
+ await userEvent . click ( titleButton ) ;
123
+ await userEvent . click ( titleButton ) ;
124
+ await userEvent . click ( titleButton ) ;
125
+
126
+ const laterDecadeButton = screen . getByText ( "2030" ) ;
127
+ expect ( laterDecadeButton ) . instanceOf ( HTMLButtonElement ) ;
128
+ expect ( laterDecadeButton ) . toBeDisabled ( ) ;
129
+ } ) ;
130
+
131
+ it ( "should disallow selecting earlier decades when setting min date" , async ( ) => {
132
+ const testDate = new Date ( 2024 , 6 , 20 ) ;
133
+ render ( < Datepicker value = { testDate . getTime ( ) } minDate = { testDate } /> ) ;
134
+
135
+ const textBox = screen . getByRole ( "textbox" ) ;
136
+ await userEvent . click ( textBox ) ;
137
+
138
+ const titleButton = screen . getByText ( "July 2024" ) ;
139
+ await userEvent . click ( titleButton ) ;
140
+ await userEvent . click ( titleButton ) ;
141
+ await userEvent . click ( titleButton ) ;
142
+
143
+ const earlierDecadeButton = screen . getByText ( "2010" ) ;
144
+ expect ( earlierDecadeButton ) . instanceOf ( HTMLButtonElement ) ;
145
+ expect ( earlierDecadeButton ) . toBeDisabled ( ) ;
146
+ } ) ;
147
+
148
+ it ( "should allow selecting later decades when setting min date" , async ( ) => {
149
+ const testDate = new Date ( 2024 , 6 , 20 ) ;
150
+ render ( < Datepicker value = { testDate . getTime ( ) } minDate = { testDate } /> ) ;
151
+
152
+ const textBox = screen . getByRole ( "textbox" ) ;
153
+ await userEvent . click ( textBox ) ;
154
+
155
+ const titleButton = screen . getByText ( "July 2024" ) ;
156
+ await userEvent . click ( titleButton ) ;
157
+ await userEvent . click ( titleButton ) ;
158
+ await userEvent . click ( titleButton ) ;
159
+
160
+ const laterDecadeButton = screen . getByText ( "2030" ) ;
161
+ expect ( laterDecadeButton ) . instanceOf ( HTMLButtonElement ) ;
162
+ expect ( laterDecadeButton ) . toBeEnabled ( ) ;
163
+ } ) ;
164
+
165
+ it ( "should allow selecting decades within the range set by max date and min date and disallow selecting outside the range" , async ( ) => {
166
+ const minDate = new Date ( 2010 , 1 , 1 ) ;
167
+ const maxDate = new Date ( 2030 , 1 , 1 ) ;
168
+ const testDate = new Date ( 2024 , 6 , 1 ) ;
169
+
170
+ render ( < Datepicker value = { testDate . getTime ( ) } minDate = { minDate } maxDate = { maxDate } /> ) ;
171
+
172
+ const textBox = screen . getByRole ( "textbox" ) ;
173
+ await userEvent . click ( textBox ) ;
174
+
175
+ const titleButton = screen . getByText ( "July 2024" ) ;
176
+ await userEvent . click ( titleButton ) ;
177
+ await userEvent . click ( titleButton ) ;
178
+ await userEvent . click ( titleButton ) ;
179
+
180
+ const inRange = screen . getByText ( "2010" ) ;
181
+ expect ( inRange ) . instanceOf ( HTMLButtonElement ) ;
182
+ expect ( inRange ) . toBeEnabled ( ) ;
183
+
184
+ const outsideRange = screen . getByText ( "2000" ) ;
185
+ expect ( outsideRange ) . instanceOf ( HTMLButtonElement ) ;
186
+ expect ( outsideRange ) . toBeDisabled ( ) ;
187
+ } ) ;
188
+
81
189
it ( "should focus the input when ref.current.focus is called" , ( ) => {
82
190
const {
83
191
result : { current : ref } ,
0 commit comments