marshroute

Форк
0
256 строк · 13.1 Кб
1
import XCTest
2
@testable import Marshroute
3

4
final class MasterlRouterTests: XCTestCase
5
{
6
    var masterAnimatingTransitionsHandlerSpy: AnimatingTransitionsHandlerSpy!
7
    var detailAnimatingTransitionsHandlerSpy: AnimatingTransitionsHandlerSpy!
8
    
9
    var targetViewController: UIViewController!
10
    
11
    var router: MasterRouter!
12
    
13
    override func setUp() {
14
        super.setUp()
15
        
16
        let transitionIdGenerator = TransitionIdGeneratorImpl()
17
        
18
        let peekAndPopTransitionsCoordinator = PeekAndPopUtilityImpl()
19
        
20
        let transitionsCoordinator = TransitionsCoordinatorImpl(
21
            stackClientProvider: TransitionContextsStackClientProviderImpl(),
22
            peekAndPopTransitionsCoordinator: peekAndPopTransitionsCoordinator
23
        )
24
        
25
        masterAnimatingTransitionsHandlerSpy = AnimatingTransitionsHandlerSpy(
26
            transitionsCoordinator: transitionsCoordinator
27
        )
28
        
29
        detailAnimatingTransitionsHandlerSpy = AnimatingTransitionsHandlerSpy(
30
            transitionsCoordinator: transitionsCoordinator
31
        )
32
        
33
        targetViewController = UIViewController()
34
        
35
        router = BaseMasterDetailRouter(
36
            routerSeed: MasterDetailRouterSeed(
37
                masterTransitionsHandlerBox: .init(
38
                    animatingTransitionsHandler: masterAnimatingTransitionsHandlerSpy
39
                ),
40
                detailTransitionsHandlerBox: .init(
41
                    animatingTransitionsHandler: detailAnimatingTransitionsHandlerSpy
42
                ),
43
                transitionId: transitionIdGenerator.generateNewTransitionId(),
44
                presentingTransitionsHandler: nil,
45
                transitionsHandlersProvider: transitionsCoordinator,
46
                transitionIdGenerator: transitionIdGenerator,
47
                controllersProvider: RouterControllersProviderImpl(),
48
                routerTransitionDelegate: nil
49
            )
50
        )
51
    }
52
    
53
    // MARK: - Master Transitions Handler
54
    
55
    func testThatMasterDetailRouterCallsItsMasterTransitionsHandlerOn_SetMasterViewControllerDerivedFrom_WithCorrectResettingContext() {
56
        // Given
57
        var nextMasterDetailModuleRouterSeed: MasterDetailRouterSeed!
58
        
59
        // When
60
        router.setMasterViewControllerDerivedFrom { (routerSeed) -> UIViewController in
61
            nextMasterDetailModuleRouterSeed = routerSeed
62
            return targetViewController
63
        }
64
        
65
        // Then
66
        XCTAssert(masterAnimatingTransitionsHandlerSpy.resetWithTransitionCalled)
67
        
68
        let resettingContext = masterAnimatingTransitionsHandlerSpy.resetWithTransitionContextParameter
69
        XCTAssertEqual(resettingContext?.transitionId, nextMasterDetailModuleRouterSeed.transitionId)
70
        XCTAssert(resettingContext?.targetViewController === targetViewController)
71
        XCTAssert(resettingContext?.targetTransitionsHandlerBox.unbox() === masterAnimatingTransitionsHandlerSpy)
72
        XCTAssertNil(resettingContext?.storableParameters)
73
        if case .some(.resettingNavigationRoot(let launchingContext)) = resettingContext?.resettingAnimationLaunchingContextBox {
74
            XCTAssert(launchingContext.rootViewController! == targetViewController)
75
        } else { XCTFail() }
76
    }
77
    
78
    func testThatMasterDetailRouterCallsItsMasterTransitionsHandlerOn_SetMasterViewControllerDerivedFrom_WithCorrectResettingContext_IfCustomAnimator() {
79
        // Given
80
        var nextMasterDetailModuleRouterSeed: MasterDetailRouterSeed!
81
        let resetNavigationTransitionsAnimator = ResetNavigationTransitionsAnimator()
82
        
83
        // When
84
        router.setMasterViewControllerDerivedFrom( { (routerSeed) -> UIViewController in
85
            nextMasterDetailModuleRouterSeed = routerSeed
86
            return targetViewController
87
            }, animator: resetNavigationTransitionsAnimator
88
        )
89
        
90
        // Then
91
        XCTAssert(masterAnimatingTransitionsHandlerSpy.resetWithTransitionCalled)
92
        
93
        let resettingContext = masterAnimatingTransitionsHandlerSpy.resetWithTransitionContextParameter
94
        XCTAssertEqual(resettingContext?.transitionId, nextMasterDetailModuleRouterSeed.transitionId)
95
        XCTAssert(resettingContext?.targetViewController === targetViewController)
96
        XCTAssert(resettingContext?.targetTransitionsHandlerBox.unbox() === masterAnimatingTransitionsHandlerSpy)
97
        XCTAssertNil(resettingContext?.storableParameters)
98
        if case .some(.resettingNavigationRoot(let launchingContext)) = resettingContext?.resettingAnimationLaunchingContextBox {
99
            XCTAssert(launchingContext.animator === resetNavigationTransitionsAnimator)
100
            XCTAssert(launchingContext.rootViewController! === targetViewController)
101
        } else { XCTFail() }
102
    }
103
    
104
    func testThatMasterDetailRouterCallsItsMasterTransitionsHandlerOn_PushMasterViewControllerDerivedFrom_WithCorrectPresentationContext() {
105
        // Given
106
        var nextMasterDetailModuleRouterSeed: MasterDetailRouterSeed!
107
        
108
        // When
109
        router.pushMasterViewControllerDerivedFrom { (routerSeed) -> UIViewController in
110
            nextMasterDetailModuleRouterSeed = routerSeed
111
            return targetViewController
112
        }
113
        
114
        // Then
115
        XCTAssert(masterAnimatingTransitionsHandlerSpy.performTransitionCalled)
116
        
117
        let presentationContext = masterAnimatingTransitionsHandlerSpy.perFormTransitionContextParameter
118
        XCTAssertEqual(presentationContext?.transitionId, nextMasterDetailModuleRouterSeed.transitionId)
119
        XCTAssert(presentationContext?.targetViewController === targetViewController)
120
        if case .some(.pendingAnimating) = presentationContext?.targetTransitionsHandlerBox {} else { XCTFail() }
121
        XCTAssertNil(presentationContext?.storableParameters)
122
        if case .some(.push(let launchingContext)) = presentationContext?.presentationAnimationLaunchingContextBox {
123
            XCTAssert(launchingContext.targetViewController! == targetViewController)
124
        } else { XCTFail() }
125
    }
126
    
127
    func testThatMasterDetailRouterCallsItsMasterTransitionsHandlerOn_PushMasterViewControllerDerivedFrom_WithCorrectPresentationContext_IfCustomAnimator() {
128
        // Given
129
        var nextMasterDetailModuleRouterSeed: MasterDetailRouterSeed!
130
        let navigationTransitionsAnimator = NavigationTransitionsAnimator()
131
        
132
        // When
133
        router.pushMasterViewControllerDerivedFrom( { (routerSeed) -> UIViewController in
134
            nextMasterDetailModuleRouterSeed = routerSeed
135
            return targetViewController
136
            }, animator: navigationTransitionsAnimator
137
        )
138
        
139
        // Then
140
        XCTAssert(masterAnimatingTransitionsHandlerSpy.performTransitionCalled)
141
        
142
        let presentationContext = masterAnimatingTransitionsHandlerSpy.perFormTransitionContextParameter
143
        XCTAssertEqual(presentationContext?.transitionId, nextMasterDetailModuleRouterSeed.transitionId)
144
        XCTAssert(presentationContext?.targetViewController === targetViewController)
145
        if case .some(.pendingAnimating) = presentationContext?.targetTransitionsHandlerBox {} else { XCTFail() }
146
        XCTAssertNil(presentationContext?.storableParameters)
147
        if case .some(.push(let launchingContext)) = presentationContext?.presentationAnimationLaunchingContextBox {
148
            XCTAssert(launchingContext.animator === navigationTransitionsAnimator)
149
            XCTAssert(launchingContext.targetViewController! === targetViewController)
150
        } else { XCTFail() }
151
    }
152
    
153
    // MARK: - Detail Transitions Handler
154
    
155
    func testThatMasterDetailRouterCallsItsDetailTransitionsHandlerOn_SetDetailViewControllerDerivedFrom_WithCorrectResettingContext() {
156
        // Given
157
        var nextModuleRouterSeed: RouterSeed!
158
        
159
        // When
160
        router.setDetailViewControllerDerivedFrom { (routerSeed) -> UIViewController in
161
            nextModuleRouterSeed = routerSeed
162
            return targetViewController
163
        }
164
        
165
        // Then
166
        XCTAssert(detailAnimatingTransitionsHandlerSpy.resetWithTransitionCalled)
167
        
168
        let resettingContext = detailAnimatingTransitionsHandlerSpy.resetWithTransitionContextParameter
169
        XCTAssertEqual(resettingContext?.transitionId, nextModuleRouterSeed.transitionId)
170
        XCTAssertEqual(resettingContext?.transitionId, nextModuleRouterSeed.transitionId)
171
        XCTAssert(resettingContext?.targetViewController === targetViewController)
172
        XCTAssert(resettingContext?.targetTransitionsHandlerBox.unbox() === detailAnimatingTransitionsHandlerSpy)
173
        XCTAssertNil(resettingContext?.storableParameters)
174
        if case .some(.resettingNavigationRoot(let launchingContext)) = resettingContext?.resettingAnimationLaunchingContextBox {
175
            XCTAssert(launchingContext.rootViewController! == targetViewController)
176
        } else { XCTFail() }
177
    }
178
    
179
    func testThatMasterDetailRouterCallsItsDetailTransitionsHandlerOn_SetDetailViewControllerDerivedFrom_WithCorrectResettingContext_IfCustomAnimator() {
180
        // Given
181
        var nextModuleRouterSeed: RouterSeed!
182
        let resetNavigationTransitionsAnimator = ResetNavigationTransitionsAnimator()
183
        
184
        // When
185
        router.setDetailViewControllerDerivedFrom( { (routerSeed) -> UIViewController in
186
            nextModuleRouterSeed = routerSeed
187
            return targetViewController
188
            }, animator: resetNavigationTransitionsAnimator
189
        )
190
        
191
        // Then
192
        XCTAssert(detailAnimatingTransitionsHandlerSpy.resetWithTransitionCalled)
193
        
194
        let resettingContext = detailAnimatingTransitionsHandlerSpy.resetWithTransitionContextParameter
195
        XCTAssertEqual(resettingContext?.transitionId, nextModuleRouterSeed.transitionId)
196
        XCTAssertEqual(resettingContext?.transitionId, nextModuleRouterSeed.transitionId)
197
        XCTAssert(resettingContext?.targetViewController === targetViewController)
198
        XCTAssert(resettingContext?.targetTransitionsHandlerBox.unbox() === detailAnimatingTransitionsHandlerSpy)
199
        XCTAssertNil(resettingContext?.storableParameters)
200
        if case .some(.resettingNavigationRoot(let launchingContext)) = resettingContext?.resettingAnimationLaunchingContextBox {
201
            XCTAssert(launchingContext.animator === resetNavigationTransitionsAnimator)
202
            XCTAssert(launchingContext.rootViewController! === targetViewController)
203
        } else { XCTFail() }
204
    }
205
    
206
    func testThatMasterDetailRouterCallsItsDetailTransitionsHandlerOn_PushDetailViewControllerDerivedFrom_WithCorrectPresentationContext() {
207
        // Given
208
        var nextModuleRouterSeed: RouterSeed!
209
        
210
        // When
211
        router.pushDetailViewControllerDerivedFrom { (routerSeed) -> UIViewController in
212
            nextModuleRouterSeed = routerSeed
213
            return targetViewController
214
        }
215
        
216
        // Then
217
        XCTAssert(detailAnimatingTransitionsHandlerSpy.performTransitionCalled)
218
        
219
        let presentationContext = detailAnimatingTransitionsHandlerSpy.perFormTransitionContextParameter
220
        XCTAssertEqual(presentationContext?.transitionId, nextModuleRouterSeed.transitionId)
221
        XCTAssertEqual(presentationContext?.transitionId, nextModuleRouterSeed.transitionId)
222
        XCTAssert(presentationContext?.targetViewController === targetViewController)
223
        if case .some(.pendingAnimating) = presentationContext?.targetTransitionsHandlerBox {} else { XCTFail() }
224
        XCTAssertNil(presentationContext?.storableParameters)
225
        if case .some(.push(let launchingContext)) = presentationContext?.presentationAnimationLaunchingContextBox {
226
            XCTAssert(launchingContext.targetViewController! == targetViewController)
227
        } else { XCTFail() }
228
    }
229
    
230
    func testThatMasterDetailRouterCallsItsDetailTransitionsHandlerOn_PushDetailViewControllerDerivedFrom_WithCorrectPresentationContext_IfCustomAnimator() {
231
        // Given
232
        var nextModuleRouterSeed: RouterSeed!
233
        let navigationTransitionsAnimator = NavigationTransitionsAnimator()
234
        
235
        // When
236
        router.pushDetailViewControllerDerivedFrom( { (routerSeed) -> UIViewController in
237
            nextModuleRouterSeed = routerSeed
238
            return targetViewController
239
            }, animator: navigationTransitionsAnimator
240
        )
241
        
242
        // Then
243
        XCTAssert(detailAnimatingTransitionsHandlerSpy.performTransitionCalled)
244
        
245
        let presentationContext = detailAnimatingTransitionsHandlerSpy.perFormTransitionContextParameter
246
        XCTAssertEqual(presentationContext?.transitionId, nextModuleRouterSeed.transitionId)
247
        XCTAssertEqual(presentationContext?.transitionId, nextModuleRouterSeed.transitionId)
248
        XCTAssert(presentationContext?.targetViewController === targetViewController)
249
        if case .some(.pendingAnimating) = presentationContext?.targetTransitionsHandlerBox {} else { XCTFail() }
250
        XCTAssertNil(presentationContext?.storableParameters)
251
        if case .some(.push(let launchingContext)) = presentationContext?.presentationAnimationLaunchingContextBox {
252
            XCTAssert(launchingContext.animator === navigationTransitionsAnimator)
253
            XCTAssert(launchingContext.targetViewController! === targetViewController)
254
        } else { XCTFail() }
255
    }
256
}
257

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.