@@ -698,3 +698,56 @@ test('dropdown onItemClick triggers inside a modal', async () => {
698698 expect ( onItemClick ) . toHaveBeenCalledTimes ( 1 ) ;
699699 expect ( onItemClick ) . toHaveBeenCalledWith ( { content : 'Option 2' , onItemClick } ) ;
700700} ) ;
701+
702+ test ( 'disabled item does not trigger onItemClick via keyboard Enter' , async ( ) => {
703+ onItemClick . mockClear ( ) ;
704+
705+ render (
706+ < Dropdown
707+ items = { [
708+ { content : 'Enabled 1' , onItemClick } ,
709+ { content : 'Disabled 2' , onItemClick, disabled : true } ,
710+ { content : 'Enabled 3' , onItemClick } ,
711+ ] }
712+ toggle = { < Button > Button</ Button > }
713+ /> ,
714+ ) ;
715+
716+ const toggle = screen . getByRole ( 'button' ) ;
717+
718+ await userEvent . click ( toggle ) ;
719+
720+ // Move highlight to the disabled item (index 1)
721+ await userEvent . keyboard ( '{ArrowDown}' ) ;
722+
723+ // Press Enter; onItemClick should NOT fire
724+ await userEvent . keyboard ( '{Enter}' ) ;
725+
726+ expect ( onItemClick ) . not . toHaveBeenCalled ( ) ;
727+ } ) ;
728+
729+ test ( 'disabled item does not trigger onItemClick via mouse click' , async ( ) => {
730+ onItemClick . mockClear ( ) ;
731+
732+ render (
733+ < Dropdown
734+ items = { [
735+ { content : 'Enabled 1' , onItemClick } ,
736+ { content : 'Disabled 2' , onItemClick, disabled : true } ,
737+ { content : 'Enabled 3' , onItemClick } ,
738+ ] }
739+ toggle = { < Button > Button</ Button > }
740+ /> ,
741+ ) ;
742+
743+ const toggle = screen . getByRole ( 'button' ) ;
744+
745+ await userEvent . click ( toggle ) ;
746+
747+ const options = await screen . findAllByRole ( 'option' ) ;
748+
749+ // Click the disabled option (index 1)
750+ await userEvent . click ( options [ 1 ] ) ;
751+
752+ expect ( onItemClick ) . not . toHaveBeenCalled ( ) ;
753+ } ) ;
0 commit comments