@@ -344,11 +344,31 @@ describe('Select test', () => {
344344 wrapper . update ( ) ;
345345
346346 expect ( state . value ) . toEqual ( [
347+ { label : 'Select all' , selectAll : true } ,
347348 { label : 'Dogs' , value : 'd' } ,
348349 { label : 'Cats' , value : 'c' } ,
349350 { label : 'Hamsters' , value : 'h' }
350351 ] ) ;
351352 expect ( inputValue ) . toEqual ( [ 'd' , 'c' , 'h' ] ) ;
353+
354+ // remove hamsters
355+ await act ( async ( ) => {
356+ wrapper
357+ . find ( '#onChange' )
358+ . props ( )
359+ . onClick ( [
360+ { label : 'Select all' , selectAll : true } ,
361+ { label : 'Dogs' , value : 'd' } ,
362+ { label : 'Cats' , value : 'c' }
363+ ] ) ;
364+ } ) ;
365+ wrapper . update ( ) ;
366+
367+ expect ( state . value ) . toEqual ( [
368+ { label : 'Dogs' , value : 'd' } ,
369+ { label : 'Cats' , value : 'c' }
370+ ] ) ;
371+ expect ( inputValue ) . toEqual ( [ 'd' , 'c' ] ) ;
352372 } ) ;
353373
354374 it ( 'selects none' , async ( ) => {
@@ -380,8 +400,86 @@ describe('Select test', () => {
380400 } ) ;
381401 wrapper . update ( ) ;
382402
383- expect ( state . value ) . toEqual ( [ ] ) ;
403+ expect ( state . value ) . toEqual ( [ { label : 'Select none' , selectNone : true } ] ) ;
384404 expect ( inputValue ) . toEqual ( '' ) ;
405+
406+ // adds one
407+ await act ( async ( ) => {
408+ wrapper
409+ . find ( '#onChange' )
410+ . props ( )
411+ . onClick ( [
412+ { label : 'Select none' , selectNone : true } ,
413+ { label : 'Dogs' , value : 'd' }
414+ ] ) ;
415+ } ) ;
416+ wrapper . update ( ) ;
417+
418+ expect ( state . value ) . toEqual ( [ { label : 'Dogs' , value : 'd' } ] ) ;
419+ expect ( inputValue ) . toEqual ( [ 'd' ] ) ;
420+ } ) ;
421+
422+ it ( 'with select all and select none at that same time' , async ( ) => {
423+ field = {
424+ ...field ,
425+ isMulti : true ,
426+ options : [
427+ { label : 'Select all' , selectAll : true , value : 'select-all' } ,
428+ { label : 'Select none' , selectNone : true , value : 'select-none' } ,
429+ ...field . options
430+ ]
431+ } ;
432+
433+ await act ( async ( ) => {
434+ wrapper = mount (
435+ < FormRenderer
436+ { ...rendererProps }
437+ schema = { {
438+ fields : [
439+ {
440+ ...field ,
441+ component : componentTypes . SELECT ,
442+ name : 'select'
443+ }
444+ ]
445+ } }
446+ />
447+ ) ;
448+ } ) ;
449+ wrapper . update ( ) ;
450+
451+ await act ( async ( ) => {
452+ wrapper
453+ . find ( '#onChange' )
454+ . props ( )
455+ . onClick ( [ { label : 'Select all' , selectAll : true , value : 'select-all' } ] ) ;
456+ } ) ;
457+ wrapper . update ( ) ;
458+
459+ expect ( state . value ) . toEqual ( [
460+ { label : 'Select all' , selectAll : true , value : 'select-all' } ,
461+ { label : 'Dogs' , value : 'd' } ,
462+ { label : 'Cats' , value : 'c' } ,
463+ { label : 'Hamsters' , value : 'h' }
464+ ] ) ;
465+ expect ( inputValue ) . toEqual ( [ 'd' , 'c' , 'h' ] ) ;
466+
467+ await act ( async ( ) => {
468+ wrapper
469+ . find ( '#onChange' )
470+ . props ( )
471+ . onClick ( [
472+ { label : 'Select all' , selectAll : true } ,
473+ { label : 'Dogs' , value : 'd' } ,
474+ { label : 'Cats' , value : 'c' } ,
475+ { label : 'Hamsters' , value : 'h' } ,
476+ { label : 'Select none' , selectNone : true , value : 'select-none' }
477+ ] ) ;
478+ } ) ;
479+ wrapper . update ( ) ;
480+
481+ expect ( state . value ) . toEqual ( [ { label : 'Select none' , selectNone : true , value : 'select-none' } ] ) ;
482+ expect ( inputValue ) . toEqual ( [ ] ) ;
385483 } ) ;
386484 } ) ;
387485
0 commit comments