-
Notifications
You must be signed in to change notification settings - Fork 4
/
MonthlyStatementsListPresenterTest.swift
112 lines (90 loc) · 3.04 KB
/
MonthlyStatementsListPresenterTest.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
//
// MonthlyStatementsListPresenterTest.swift
// AptoSDK
//
// Created by Takeichi Kanzaki on 23/09/2019.
//
import XCTest
@testable import AptoSDK
@testable import AptoUISDK
import Bond
class MonthlyStatementsListPresenterTest: XCTestCase {
private var sut: MonthlyStatementsListPresenter! // swiftlint:disable:this implicitly_unwrapped_optional
// Collaborators
private let router = MonthlyStatementsListModuleSpy(serviceLocator: ServiceLocatorFake())
private let interactor = MonthlyStatementsListInteractorFake()
private let analyticsManager = AnalyticsManagerSpy()
private let dataProvider = ModelDataProvider.provider
override func setUp() {
super.setUp()
sut = MonthlyStatementsListPresenter()
sut.router = router
sut.interactor = interactor
sut.analyticsManager = analyticsManager
}
func testViewLoadedTrackAnalyticsEvent() {
// When
sut.viewLoaded()
// Then
XCTAssertTrue(analyticsManager.trackCalled)
XCTAssertEqual(Event.monthlyStatementsListStart, analyticsManager.lastEvent)
}
func testViewLoadedLoadPeriod() {
// When
sut.viewLoaded()
// Then
XCTAssertTrue(router.showLoadingViewCalled)
XCTAssertTrue(interactor.fetchStatementsPeriodCalled)
}
func testLoadPeriodSucceedUpdateViewModelMonths() {
// Given
let period = MonthlyStatementsPeriod(start: Month(month: 12, year: 2018), end: Month(month: 1, year: 2019))
interactor.nextFetchStatementsPeriodResult = .success(period)
// When
sut.viewLoaded()
// Then
let months = sut.viewModel.months
XCTAssertTrue(sut.viewModel.dataLoaded.value)
XCTAssertEqual(2, months.numberOfSections)
XCTAssertEqual(1, months.numberOfItems(inSection: 0))
XCTAssertEqual(1, months.numberOfItems(inSection: 1))
XCTAssertEqual("2019", months.sections[0].metadata)
XCTAssertEqual("2018", months.sections[1].metadata)
XCTAssertEqual(period.end, months[IndexPath(row: 0, section: 0)])
XCTAssertEqual(period.start, months[IndexPath(row: 0, section: 1)])
}
func testLoadPeriodSucceedWithEmptyPeriodUpdateViewModelMonths() {
// Given
let period = MonthlyStatementsPeriod(start: Month(month: 2, year: 2019), end: Month(month: 1, year: 2019))
interactor.nextFetchStatementsPeriodResult = .success(period)
// When
sut.viewLoaded()
// Then
let months = sut.viewModel.months
XCTAssertEqual(0, months.numberOfSections)
}
func testLoadPeriodFailsUpdateViewModelError() {
// Given
let error = BackendError(code: .other)
interactor.nextFetchStatementsPeriodResult = .failure(error)
// When
sut.viewLoaded()
// Then
XCTAssertEqual(error, sut.viewModel.error.value)
XCTAssertFalse(sut.viewModel.dataLoaded.value)
}
func testCloseTappedCallClose() {
// When
sut.closeTapped()
// Then
XCTAssertTrue(router.closeCalled)
}
func testMonthSelectedCallInteractor() {
// Given
let month = dataProvider.month
// When
sut.monthSelected(month)
// Then
XCTAssertTrue(router.showStatementReportCalled)
}
}