@@ -610,6 +610,151 @@ class ConfigExtensionsKtTest : RobolectricTest() {
610610 Assert .assertTrue(slotNavOptions.captured.shouldLaunchSingleTop())
611611 }
612612
613+ @Test
614+ fun testCreateRegisterNavigationOptionsWithPopBackStackFalse () {
615+ val actionConfig =
616+ ActionConfig (
617+ trigger = ActionTrigger .ON_CLICK ,
618+ workflow = ApplicationWorkflow .LAUNCH_REGISTER .name,
619+ id = " registerId" ,
620+ popNavigationBackStack = false ,
621+ )
622+ every { navController.currentBackStackEntry } returns
623+ mockk { every { destination } returns mockk { every { id } returns 1234 } }
624+
625+ val navOptions = createRegisterNavigationOptions(actionConfig, navController)
626+
627+ Assert .assertTrue(navOptions.shouldLaunchSingleTop())
628+ Assert .assertFalse(navOptions.isPopUpToInclusive())
629+ }
630+
631+ @Test
632+ fun testCreateRegisterNavigationOptionsWithPopBackStackTrue () {
633+ val actionConfig =
634+ ActionConfig (
635+ trigger = ActionTrigger .ON_CLICK ,
636+ workflow = ApplicationWorkflow .LAUNCH_REGISTER .name,
637+ id = " registerId" ,
638+ popNavigationBackStack = true ,
639+ )
640+ every { navController.currentBackStackEntry } returns
641+ mockk { every { destination } returns mockk { every { id } returns 1234 } }
642+
643+ val navOptions = createRegisterNavigationOptions(actionConfig, navController)
644+
645+ Assert .assertTrue(navOptions.shouldLaunchSingleTop())
646+ Assert .assertTrue(navOptions.isPopUpToInclusive())
647+ Assert .assertEquals(1234 , navOptions.popUpToId)
648+ }
649+
650+ @Test
651+ fun testCreateRegisterNavigationOptionsWithPopBackStackNull () {
652+ val actionConfig =
653+ ActionConfig (
654+ trigger = ActionTrigger .ON_CLICK ,
655+ workflow = ApplicationWorkflow .LAUNCH_REGISTER .name,
656+ id = " registerId" ,
657+ popNavigationBackStack = null ,
658+ )
659+ every { navController.currentBackStackEntry } returns
660+ mockk { every { destination } returns mockk { every { id } returns 1234 } }
661+
662+ val navOptions = createRegisterNavigationOptions(actionConfig, navController)
663+
664+ Assert .assertTrue(navOptions.shouldLaunchSingleTop())
665+ Assert .assertFalse(navOptions.isPopUpToInclusive())
666+ }
667+
668+ @Test
669+ fun testCreateRegisterNavigationOptionsWithNullCurrentBackStackEntry () {
670+ val actionConfig =
671+ ActionConfig (
672+ trigger = ActionTrigger .ON_CLICK ,
673+ workflow = ApplicationWorkflow .LAUNCH_REGISTER .name,
674+ id = " registerId" ,
675+ popNavigationBackStack = true ,
676+ )
677+ every { navController.currentBackStackEntry } returns null
678+
679+ val navOptions = createRegisterNavigationOptions(actionConfig, navController)
680+
681+ Assert .assertTrue(navOptions.shouldLaunchSingleTop())
682+ Assert .assertFalse(navOptions.isPopUpToInclusive())
683+ }
684+
685+ @Test
686+ fun testCreateRegisterNavigationOptionsWithNullDestinationId () {
687+ val actionConfig =
688+ ActionConfig (
689+ trigger = ActionTrigger .ON_CLICK ,
690+ workflow = ApplicationWorkflow .LAUNCH_REGISTER .name,
691+ id = " registerId" ,
692+ popNavigationBackStack = true ,
693+ )
694+ every { navController.currentBackStackEntry } returns
695+ mockk { every { destination } returns mockk { every { id } returns 0 } }
696+
697+ val navOptions = createRegisterNavigationOptions(actionConfig, navController)
698+
699+ Assert .assertTrue(navOptions.shouldLaunchSingleTop())
700+ Assert .assertTrue(navOptions.isPopUpToInclusive())
701+ Assert .assertEquals(0 , navOptions.popUpToId)
702+ }
703+
704+ @Test
705+ fun testLaunchRegisterAllowsNavigationWhenCurrentRegisterIdIsNull () {
706+ val clickAction =
707+ ActionConfig (
708+ id = " registerId" ,
709+ trigger = ActionTrigger .ON_CLICK ,
710+ workflow = ApplicationWorkflow .LAUNCH_REGISTER .name,
711+ popNavigationBackStack = false ,
712+ )
713+ every { navController.currentBackStackEntry } returns mockk { every { arguments } returns null }
714+ every { navController.previousBackStackEntry } returns
715+ mockk { every { arguments } returns bundleOf(NavigationArg .REGISTER_ID to " registerId" ) }
716+ every { navController.currentDestination } returns null
717+
718+ listOf (clickAction).handleClickEvent(navController = navController, resourceData = resourceData)
719+
720+ val slotInt = slot<Int >()
721+ val slotBundle = slot<Bundle >()
722+ val slotNavOptions = slot<NavOptions >()
723+ verify {
724+ navController.navigate(capture(slotInt), capture(slotBundle), capture(slotNavOptions))
725+ }
726+ Assert .assertEquals(MainNavigationScreen .Home .route, slotInt.captured)
727+ Assert .assertTrue(slotNavOptions.captured.shouldLaunchSingleTop())
728+ }
729+
730+ @Test
731+ fun testLaunchRegisterAllowsNavigationWhenPreviousRegisterIdIsNull () {
732+ val clickAction =
733+ ActionConfig (
734+ id = " registerId" ,
735+ trigger = ActionTrigger .ON_CLICK ,
736+ workflow = ApplicationWorkflow .LAUNCH_REGISTER .name,
737+ popNavigationBackStack = false ,
738+ )
739+ every { navController.currentBackStackEntry } returns
740+ mockk {
741+ every { arguments } returns bundleOf(NavigationArg .REGISTER_ID to " currentRegisterId" )
742+ }
743+ every { navController.previousBackStackEntry } returns null
744+ every { navController.currentDestination } returns null
745+
746+ listOf (clickAction).handleClickEvent(navController = navController, resourceData = resourceData)
747+
748+ val slotInt = slot<Int >()
749+ val slotBundle = slot<Bundle >()
750+ val slotNavOptions = slot<NavOptions >()
751+ verify {
752+ navController.navigate(capture(slotInt), capture(slotBundle), capture(slotNavOptions))
753+ }
754+ Assert .assertEquals(MainNavigationScreen .Home .route, slotInt.captured)
755+ Assert .assertTrue(slotNavOptions.captured.shouldLaunchSingleTop())
756+ }
757+
613758 @Test
614759 fun testDeviceToDeviceSyncActionOnClick () {
615760 val clickAction =
0 commit comments