@@ -437,4 +437,116 @@ describe('EuiFlyout', () => {
437437 ) . not . toBeTruthy ( ) ;
438438 } ) ;
439439 } ) ;
440+
441+ describe ( 'flyout routing logic' , ( ) => {
442+ // Mock the manager hooks to control routing behavior
443+ const mockUseHasActiveSession = jest . fn ( ) ;
444+ const mockUseIsInManagedFlyout = jest . fn ( ) ;
445+
446+ beforeEach ( ( ) => {
447+ jest . clearAllMocks ( ) ;
448+ // Mock the manager hooks
449+ jest . doMock ( './manager' , ( ) => ( {
450+ ...jest . requireActual ( './manager' ) ,
451+ useHasActiveSession : mockUseHasActiveSession ,
452+ useIsInManagedFlyout : mockUseIsInManagedFlyout ,
453+ } ) ) ;
454+ } ) ;
455+
456+ afterEach ( ( ) => {
457+ jest . dontMock ( './manager' ) ;
458+ } ) ;
459+
460+ it ( 'routes to child flyout when session is undefined and there is an active session' , ( ) => {
461+ // Setup: There's an active session but flyout is not in managed context
462+ mockUseHasActiveSession . mockReturnValue ( true ) ;
463+ mockUseIsInManagedFlyout . mockReturnValue ( false ) ;
464+
465+ const { getByTestSubject } = render (
466+ < EuiFlyout
467+ onClose = { ( ) => { } }
468+ data-test-subj = "child-flyout"
469+ // session is undefined (not explicitly set)
470+ />
471+ ) ;
472+
473+ // Should render as child flyout (EuiFlyoutChild)
474+ const flyout = getByTestSubject ( 'child-flyout' ) ;
475+ expect ( flyout ) . toBeInTheDocument ( ) ;
476+ } ) ;
477+
478+ it ( 'routes to main flyout when session is explicitly true' , ( ) => {
479+ // Setup: There's an active session and flyout is not in managed context
480+ mockUseHasActiveSession . mockReturnValue ( true ) ;
481+ mockUseIsInManagedFlyout . mockReturnValue ( false ) ;
482+
483+ const { getByTestSubject } = render (
484+ < EuiFlyout
485+ onClose = { ( ) => { } }
486+ data-test-subj = "main-flyout"
487+ session = { true } // Explicitly creating a new session
488+ flyoutMenuProps = { { title : 'Test Main Flyout' } } // Required for managed flyouts
489+ />
490+ ) ;
491+
492+ // Should render as main flyout (EuiFlyoutMain)
493+ const flyout = getByTestSubject ( 'main-flyout' ) ;
494+ expect ( flyout ) . toBeInTheDocument ( ) ;
495+ } ) ;
496+
497+ it ( 'routes to main flyout when session is explicitly false and there is an active session' , ( ) => {
498+ // Setup: There's an active session and flyout is not in managed context
499+ mockUseHasActiveSession . mockReturnValue ( true ) ;
500+ mockUseIsInManagedFlyout . mockReturnValue ( false ) ;
501+
502+ const { getByTestSubject } = render (
503+ < EuiFlyout
504+ onClose = { ( ) => { } }
505+ data-test-subj = "main-flyout"
506+ session = { false } // Explicitly not creating a new session, but still routes to main
507+ flyoutMenuProps = { { title : 'Test Main Flyout' } } // Required for managed flyouts
508+ />
509+ ) ;
510+
511+ // Should render as main flyout (EuiFlyoutMain)
512+ const flyout = getByTestSubject ( 'main-flyout' ) ;
513+ expect ( flyout ) . toBeInTheDocument ( ) ;
514+ } ) ;
515+
516+ it ( 'routes to child flyout when in managed context and there is an active session' , ( ) => {
517+ // Setup: There's an active session and flyout is in managed context
518+ mockUseHasActiveSession . mockReturnValue ( true ) ;
519+ mockUseIsInManagedFlyout . mockReturnValue ( true ) ;
520+
521+ const { getByTestSubject } = render (
522+ < EuiFlyout
523+ onClose = { ( ) => { } }
524+ data-test-subj = "child-flyout"
525+ session = { undefined } // Not explicitly set
526+ />
527+ ) ;
528+
529+ // Should render as child flyout (EuiFlyoutChild)
530+ const flyout = getByTestSubject ( 'child-flyout' ) ;
531+ expect ( flyout ) . toBeInTheDocument ( ) ;
532+ } ) ;
533+
534+ it ( 'routes to standard flyout when there is no active session' , ( ) => {
535+ // Setup: No active session
536+ mockUseHasActiveSession . mockReturnValue ( false ) ;
537+ mockUseIsInManagedFlyout . mockReturnValue ( false ) ;
538+
539+ const { getByTestSubject } = render (
540+ < EuiFlyout
541+ onClose = { ( ) => { } }
542+ data-test-subj = "standard-flyout"
543+ session = { undefined } // Not explicitly set
544+ />
545+ ) ;
546+
547+ // Should render as standard flyout (EuiFlyoutComponent)
548+ const flyout = getByTestSubject ( 'standard-flyout' ) ;
549+ expect ( flyout ) . toBeInTheDocument ( ) ;
550+ } ) ;
551+ } ) ;
440552} ) ;
0 commit comments