@@ -473,6 +473,136 @@ describe("Side Navigation interaction", () => {
473473 cy . url ( ) . should ( "not.include" , "#test" ) ;
474474 } ) ;
475475
476+ it ( "Tests preventDefault of 'click' event" , ( ) => {
477+ const handleClick = ( event : Event ) => {
478+ event . preventDefault ( ) ;
479+ } ;
480+
481+ const handleSelectionChange = cy . stub ( ) . as ( "selectionChangeHandler" ) ;
482+
483+ cy . mount (
484+ < SideNavigation id = "sideNav" onClick = { handleClick } onSelectionChange = { handleSelectionChange } >
485+ < SideNavigationItem id = "linkItem" text = "external link" unselectable = { true } href = "#preventDefault" />
486+ < SideNavigationItem id = "item" text = "item" />
487+ </ SideNavigation >
488+ ) ;
489+
490+ cy . url ( )
491+ . should ( "not.include" , "#preventDefault" ) ;
492+
493+ // Act
494+ cy . get ( "#linkItem" ) . realClick ( ) ;
495+
496+ // Assert
497+ cy . get ( "@selectionChangeHandler" ) . should ( "not.have.been.called" ) ;
498+ cy . url ( )
499+ . should ( "not.include" , "#preventDefault" ) ;
500+
501+ cy . get ( "#item" ) . realClick ( ) ;
502+
503+ // Assert
504+ cy . get ( "@selectionChangeHandler" ) . should ( "not.have.been.called" ) ;
505+ cy . url ( )
506+ . should ( "not.include" , "#preventDefault" ) ;
507+ } ) ;
508+
509+ it ( "Tests preventDefault of items in overflow menu" , ( ) => {
510+ const handleClick = ( event : Event ) => {
511+ event . preventDefault ( ) ;
512+ } ;
513+
514+ const handleSelectionChange = cy . stub ( ) . as ( "selectionChangeHandler" ) ;
515+
516+ cy . mount (
517+ < SideNavigation id = "sideNav" collapsed = { true } onClick = { handleClick } onSelectionChange = { handleSelectionChange } >
518+ < SideNavigationItem unselectable = { true } href = "#test" text = "link" > </ SideNavigationItem >
519+ < SideNavigationItem text = "item" > </ SideNavigationItem >
520+ </ SideNavigation >
521+ ) ;
522+
523+ cy . get ( "#sideNav" )
524+ . invoke ( "attr" , "style" , "height: 50px" ) ;
525+
526+ cy . get ( "#sideNav" )
527+ . shadow ( )
528+ . find ( ".ui5-sn-item-overflow" )
529+ . realClick ( ) ;
530+
531+ cy . get ( "#sideNav" )
532+ . shadow ( )
533+ . find ( ".ui5-side-navigation-overflow-menu [ui5-navigation-menu-item][text='link']" )
534+ . realClick ( ) ;
535+
536+ cy . url ( )
537+ . should ( "not.include" , "#test" ) ;
538+
539+ cy . get ( "#sideNav" )
540+ . shadow ( )
541+ . find ( ".ui5-side-navigation-overflow-menu [ui5-navigation-menu-item][text='item']" )
542+ . realClick ( ) ;
543+
544+ cy . get ( "@selectionChangeHandler" ) . should ( "not.have.been.called" ) ;
545+ } ) ;
546+
547+ it ( "Tests preventDefault on child items in collapsed side navigation" , ( ) => {
548+ const handleClick = ( event : Event ) => {
549+ event . preventDefault ( ) ;
550+ } ;
551+
552+ const handleSelectionChange = cy . stub ( ) . as ( "selectionChangeHandler" ) ;
553+
554+ cy . mount (
555+ < SideNavigation onClick = { handleClick } onSelectionChange = { handleSelectionChange } id = "sideNav" collapsed = { true } >
556+ < SideNavigationItem id = "parentItem" text = "2" >
557+ < SideNavigationItem text = "child" />
558+ < SideNavigationItem href = "#test" text = "link" > </ SideNavigationItem >
559+ </ SideNavigationItem >
560+ </ SideNavigation >
561+ ) ;
562+
563+ cy . get ( "#parentItem" )
564+ . realClick ( ) ;
565+
566+ cy . get ( "#sideNav" )
567+ . shadow ( )
568+ . find ( "[ui5-responsive-popover] [ui5-side-navigation-sub-item][text='child']" )
569+ . realClick ( ) ;
570+
571+ // Assert
572+ cy . get ( "@selectionChangeHandler" ) . should ( "not.have.been.called" ) ;
573+
574+ cy . get ( "#sideNav" )
575+ . shadow ( )
576+ . find ( "[ui5-responsive-popover] [ui5-side-navigation-sub-item][text='link']" )
577+ . realClick ( ) ;
578+
579+ cy . get ( "@selectionChangeHandler" ) . should ( "not.have.been.called" ) ;
580+ cy . url ( )
581+ . should ( "not.include" , "#test" ) ;
582+ } ) ;
583+
584+ it ( "Tests key modifiers when item is clicked" , ( ) => {
585+ const handleClick = cy . stub ( ) . as ( "clickHandler" ) ;
586+
587+ cy . mount (
588+ < SideNavigation id = "sideNav" onClick = { e => { e . preventDefault ( ) ; handleClick ( e ) ; } } >
589+ < SideNavigationItem id = "linkItem" text = "external link" />
590+ </ SideNavigation >
591+ ) ;
592+
593+ const keyModifiers = [
594+ { key : "ctrlKey" , options : { ctrlKey : true } } ,
595+ { key : "metaKey" , options : { metaKey : true } } ,
596+ { key : "altKey" , options : { altKey : true } } ,
597+ { key : "shiftKey" , options : { shiftKey : true } } ,
598+ ] ;
599+
600+ keyModifiers . forEach ( ( { key, options } ) => {
601+ cy . get ( "#sideNav" ) . realClick ( options ) ;
602+ cy . get ( "@clickHandler" ) . should ( "be.calledWithMatch" , { detail : { [ key ] : true } } ) ;
603+ } ) ;
604+ } ) ;
605+
476606 it ( "Tests 'selection-change' event" , ( ) => {
477607 cy . mount (
478608 < SideNavigation id = "sideNav" >
0 commit comments