@@ -238,6 +238,76 @@ describe('The Select component', () => {
238238 expect ( handleChange ) . toHaveBeenCalledWith ( [ '1' ] ) ;
239239 } ) ;
240240
241+ it ( 'handles range selection mode' , async ( ) => {
242+ const handleChange = jest . fn ( ) ;
243+
244+ render ( < Select color = "black" options = { mockOptions } isRange = { true } onChange = { handleChange } /> ) ;
245+
246+ const toggleButton = screen . getByRole ( 'combobox' ) ;
247+
248+ await act ( async ( ) => {
249+ fireEvent . click ( toggleButton ) ;
250+ } ) ;
251+
252+ expect ( screen . getByText ( 'From' ) ) . toBeInTheDocument ( ) ;
253+ expect ( screen . getByText ( 'To' ) ) . toBeInTheDocument ( ) ;
254+
255+ const inputFields = screen . getAllByRole ( 'spinbutton' ) ;
256+
257+ fireEvent . change ( inputFields [ 0 ] , {
258+ target : { value : '1' } ,
259+ } ) ;
260+ fireEvent . change ( inputFields [ 1 ] , {
261+ target : { value : '100' } ,
262+ } ) ;
263+
264+ expect ( handleChange ) . toHaveBeenCalledWith ( [ '1' , '100' ] ) ;
265+ } ) ;
266+
267+ it ( 'displays error messages when the range is invalid' , async ( ) => {
268+ render (
269+ < Select color = "black" options = { mockOptions } isRange = { true } rangeMin = { 5 } rangeMax = { 10 } />
270+ ) ;
271+
272+ const toggleButton = screen . getByRole ( 'combobox' ) ;
273+ await act ( async ( ) => {
274+ fireEvent . click ( toggleButton ) ;
275+ } ) ;
276+
277+ const inputFields = screen . getAllByRole ( 'spinbutton' ) ;
278+ fireEvent . change ( inputFields [ 0 ] , {
279+ target : { value : '4' } ,
280+ } ) ;
281+ fireEvent . change ( inputFields [ 1 ] , {
282+ target : { value : '11' } ,
283+ } ) ;
284+
285+ expect ( screen . getByText ( 'Value must be at least 5' ) ) . toBeInTheDocument ( ) ;
286+ expect ( screen . getByText ( 'Value must be at most 10' ) ) . toBeInTheDocument ( ) ;
287+ } ) ;
288+
289+ it ( 'displays an error message when the min value of the range is greater than the max value' , async ( ) => {
290+ render (
291+ < Select color = "black" options = { mockOptions } isRange = { true } rangeMin = { 0 } rangeMax = { 10 } />
292+ ) ;
293+ const toggleButton = screen . getByRole ( 'combobox' ) ;
294+ await act ( async ( ) => {
295+ fireEvent . click ( toggleButton ) ;
296+ } ) ;
297+
298+ const inputFields = screen . getAllByRole ( 'spinbutton' ) ;
299+ fireEvent . change ( inputFields [ 0 ] , {
300+ target : { value : '9' } ,
301+ } ) ;
302+ fireEvent . change ( inputFields [ 1 ] , {
303+ target : { value : '4' } ,
304+ } ) ;
305+
306+ expect (
307+ screen . getByText ( 'The minimum value cannot be greater than the maximum value' )
308+ ) . toBeInTheDocument ( ) ;
309+ } ) ;
310+
241311 it ( 'prevents deselection when preventDeselection is true' , async ( ) => {
242312 const handleChange = jest . fn ( ) ;
243313
0 commit comments