-
Notifications
You must be signed in to change notification settings - Fork 4
/
ExternalOAuthPresenterTest.swift
144 lines (114 loc) · 3.73 KB
/
ExternalOAuthPresenterTest.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
//
// ExternalOAuthPresenterTest.swift
// AptoSDK
//
// Created by Takeichi Kanzaki on 04/07/2018.
//
//
import XCTest
import AptoSDK
@testable import AptoUISDK
class ExternalOAuthPresenterTest: XCTestCase {
private var sut: ExternalOAuthPresenter! // swiftlint:disable:this implicitly_unwrapped_optional
// Collaborators
private lazy var dataProvider: ModelDataProvider = ModelDataProvider.provider
private lazy var balanceType: AllowedBalanceType = dataProvider.balanceType
private let url = URL(string: "https://shitfpayments.com")! // swiftlint:disable:this force_unwrapping
private let interactor = ExternalOAuthInteractorFake()
private let router = ExternalOAuthModuleFake(serviceLocator: ServiceLocatorFake())
private let analyticsManager: AnalyticsManagerSpy = AnalyticsManagerSpy()
override func setUp() {
super.setUp()
sut = ExternalOAuthPresenter(config: dataProvider.externalOauthModuleConfig)
sut.router = router
sut.interactor = interactor
sut.analyticsManager = analyticsManager
}
func testViewLoadedUpdateViewModel() {
// When
sut.viewLoaded()
// Then
XCTAssertNotNil(sut.viewModel.title.value)
XCTAssertNotNil(sut.viewModel.explanation.value)
XCTAssertNotNil(sut.viewModel.callToAction.value)
XCTAssertNotNil(sut.viewModel.newUserAction.value)
XCTAssertNotNil(sut.viewModel.allowedBalanceTypes.value)
XCTAssertNotNil(sut.viewModel.assetUrl)
XCTAssertNil(sut.viewModel.error.value)
}
func testCustodianTappedCallInteractor() {
// When
sut.balanceTypeTapped(balanceType)
// Then
XCTAssertTrue(interactor.balanceTypeSelectedCalled)
}
func testBackTappedCallRouter() {
// When
sut.closeTapped()
// Then
XCTAssertTrue(router.backInExternalOAuthCalled)
}
func testOauthInteractorGenericErrorDoesntCallRouter() {
// Given
interactor.nextVerifyOauthAttemptStatusResult = .failure(NSError())
// When
sut.show(url: url)
// Then
XCTAssertFalse(router.oauthSucceededCalled)
XCTAssertNil(router.lastOauthCustodian)
}
func testOauthErrorDoesntCallRouter() {
// Given
interactor.nextVerifyOauthAttemptStatusResult = .success(dataProvider.oauthErrorAttempt)
// When
sut.show(url: url)
// Then
XCTAssertFalse(router.oauthSucceededCalled)
XCTAssertNil(router.lastOauthCustodian)
}
func testOauthSuccessCallRouter() {
// Given
sut.balanceTypeTapped(dataProvider.balanceType)
interactor.nextVerifyOauthAttemptStatusResult = .success(dataProvider.oauthAttempt)
// When
sut.show(url: url)
// Then
XCTAssertTrue(router.oauthSucceededCalled)
XCTAssertNotNil(router.lastOauthCustodian)
}
func testShowUrlCallRouter() {
// When
sut.show(url: url)
// Then
XCTAssertTrue(router.showUrlCalled)
XCTAssertNotNil(router.lastUrlShown)
}
func testShowUrlRouterCallbackCalledShowLoadingViewAndCallInteractor() {
// When
sut.show(url: url)
// Then
XCTAssertTrue(router.showLoadingViewCalled)
XCTAssertTrue(interactor.verifyOauthAttemptStatus)
}
func testNewUserCalledCallRouter() {
// When
sut.newUserTapped(url: url)
// Then
XCTAssertTrue(router.showUrlCalled)
XCTAssertEqual(url, router.lastUrlShown)
}
func testViewLoadedLogSelectBalanceStoreLoginEvent() {
// When
sut.viewLoaded()
// Then
XCTAssertTrue(analyticsManager.trackCalled)
XCTAssertEqual(analyticsManager.lastEvent, Event.selectBalanceStoreLogin)
}
func testOnBalanceTappedLogselectBalanceStoreLoginConnect() {
// When
sut.balanceTypeTapped(balanceType)
// Then
XCTAssertTrue(analyticsManager.trackCalled)
XCTAssertEqual(analyticsManager.lastEvent, Event.selectBalanceStoreLoginConnectTap)
}
}