             }
             
             func makeExpectedTabViewControllerRoots() -> [UIViewController] {
-                return [newsModuleFactory.stubInterface, knowledgeListModuleProviding.stubInterface]
+                return [newsModule.stubInterface, knowledgeListModule.stubInterface]
             }
             
             func rootNavigationTabControllers() -> [UINavigationController] {
-                return tabModuleFactory.capturedTabModules.flatMap({ $0 as? UINavigationController })
+                return tabModule.capturedTabModules.flatMap({ $0 as? UINavigationController })
+            }
+            
+            func navigationController(for viewController: UIViewController) -> CapturingNavigationController? {
+                return tabModule.navigationController(for: viewController)
             }
             
         }
         
         private let director: ApplicationDirector
-        private let rootModuleFactory: StubRootModuleFactory
-        private let tutorialModuleFactory: StubTutorialModuleFactory
-        private let preloadModuleFactory: StubPreloadModuleFactory
-        private let tabModuleFactory: StubTabModuleFactory
-        private let newsModuleFactory: StubNewsModuleFactory
-        private let messagesModuleFactory: StubMessagesModuleFactory
-        private let loginModuleFactory: StubLoginModuleFactory
+        private let rootModule: StubRootModuleFactory
+        private let tutorialModule: StubTutorialModuleFactory
+        private let preloadModule: StubPreloadModuleFactory
+        private let tabModule: StubTabModuleFactory
+        private let newsModule: StubNewsModuleFactory
+        private let messagesModule: StubMessagesModuleFactory
+        private let loginModule: StubLoginModuleFactory
         private let windowWireframe: CapturingWindowWireframe
-        private let messageDetailModuleFactory: StubMessageDetailModuleProviding
-        private let knowledgeListModuleProviding: StubKnowledgeListModuleProviding
-        private let knowledgeDetailModuleProviding: StubKnowledgeDetailModuleProviding
+        private let messageDetailModule: StubMessageDetailModuleProviding
+        private let knowledgeListModule: StubKnowledgeListModuleProviding
+        private let knowledgeDetailModule: StubKnowledgeDetailModuleProviding
         private let linkRouter: StubLinkRouter
         private let webModuleProviding: StubWebMobuleProviding
         private let urlOpener: CapturingURLOpener
         
         init() {
-            rootModuleFactory = StubRootModuleFactory()
-            tutorialModuleFactory = StubTutorialModuleFactory()
-            preloadModuleFactory = StubPreloadModuleFactory()
+            rootModule = StubRootModuleFactory()
+            tutorialModule = StubTutorialModuleFactory()
+            preloadModule = StubPreloadModuleFactory()
             windowWireframe = CapturingWindowWireframe()
-            tabModuleFactory = StubTabModuleFactory()
-            newsModuleFactory = StubNewsModuleFactory()
-            messagesModuleFactory = StubMessagesModuleFactory()
-            loginModuleFactory = StubLoginModuleFactory()
-            messageDetailModuleFactory = StubMessageDetailModuleProviding()
-            knowledgeListModuleProviding = StubKnowledgeListModuleProviding()
-            knowledgeDetailModuleProviding = StubKnowledgeDetailModuleProviding()
+            tabModule = StubTabModuleFactory()
+            newsModule = StubNewsModuleFactory()
+            messagesModule = StubMessagesModuleFactory()
+            loginModule = StubLoginModuleFactory()
+            messageDetailModule = StubMessageDetailModuleProviding()
+            knowledgeListModule = StubKnowledgeListModuleProviding()
+            knowledgeDetailModule = StubKnowledgeDetailModuleProviding()
             linkRouter = StubLinkRouter()
             webModuleProviding = StubWebMobuleProviding()
             urlOpener = CapturingURLOpener()

        
        struct Context {
            var director: ApplicationDirector
            var rootModuleFactory: StubRootModuleFactory
            var tutorialModuleFactory: StubTutorialModuleFactory
            var preloadModuleFactory: StubPreloadModuleFactory
            var tabModuleFactory: StubTabModuleFactory
            var newsModuleFactory: StubNewsModuleFactory
            var messagesModuleFactory: StubMessagesModuleFactory
            var loginModuleFactory: StubLoginModuleFactory
            var windowWireframe: CapturingWindowWireframe
            var messageDetailModuleFactory: StubMessageDetailModuleProviding
            var knowledgeListModuleProviding: StubKnowledgeListModuleProviding
            var knowledgeDetailModuleProviding: StubKnowledgeDetailModuleProviding
            var linkRouter: StubLinkRouter
            var webModuleProviding: StubWebMobuleProviding
            var urlOpener: CapturingURLOpener
            
            func navigateToTabController() {
                rootModuleFactory.delegate?.rootModuleDidDetermineStoreShouldRefresh()
                preloadModuleFactory.simulatePreloadFinished()
            }
            
            var rootNavigationController: UINavigationController {

    }
    
    func testWhenRootModuleIndicatesUserNeedsToWitnessTutorialTheTutorialModuleIsSetOntoRootNavigationController() {
        context.rootModule.simulateTutorialShouldBePresented()
        XCTAssertEqual([context.tutorialModule.stubInterface], context.rootNavigationController.viewControllers)
    }
    
    func testWhenRootModuleIndicatesStoreShouldPreloadThePreloadModuleIsSetAsRoot() {
        context.rootModule.simulateStoreShouldBeRefreshed()
        XCTAssertEqual([context.preloadModule.stubInterface], context.rootNavigationController.viewControllers)
    }
    
    func testWhenTheTutorialFinishesThePreloadModuleIsSetAsRoot() {
        context.rootModule.simulateTutorialShouldBePresented()
        context.tutorialModule.simulateTutorialFinished()
        
        XCTAssertEqual([context.preloadModule.stubInterface], context.rootNavigationController.viewControllers)
    }
    
    func testWhenPreloadingFailsAfterFinishingTutorialTheTutorialIsRedisplayed() {
        context.rootModule.simulateTutorialShouldBePresented()
        context.tutorialModule.simulateTutorialFinished()
        context.preloadModule.simulatePreloadCancelled()
        
        XCTAssertEqual([context.tutorialModule.stubInterface], context.rootNavigationController.viewControllers)
    }
    
    func testWhenPreloadingSucceedsAfterFinishingTutorialTheTabWireframeIsSetAsTheRoot() {
        context.rootModule.simulateTutorialShouldBePresented()
        context.tutorialModule.simulateTutorialFinished()
        context.preloadModule.simulatePreloadFinished()
        
        XCTAssertEqual([context.tabModule.stubInterface], context.rootNavigationController.viewControllers)
    }
    
    func testWhenPresentingTabControllerTheDissolveTransitionIsUsed() {
        context.rootModule.simulateTutorialShouldBePresented()
        context.tutorialModule.simulateTutorialFinished()
        context.preloadModule.simulatePreloadFinished()
        let transition = context.rootNavigationController.delegate?.navigationController?(context.rootNavigationController, animationControllerFor: .push, from: context.preloadModule.stubInterface, to: context.tabModule.stubInterface)

        XCTAssertTrue(transition is ViewControllerDissolveTransitioning)
    }
