@@ -16,7 +16,7 @@ class MoviesListViewModelTests: XCTestCase {
16
16
} ( )
17
17
18
18
class SearchMoviesUseCaseMock : SearchMoviesUseCase {
19
- var callCount : Int = 0
19
+ var executeCallCount : Int = 0
20
20
21
21
typealias ExecuteBlock = (
22
22
SearchMoviesUseCaseRequestValue ,
@@ -33,7 +33,7 @@ class MoviesListViewModelTests: XCTestCase {
33
33
cached: @escaping ( MoviesPage ) -> Void ,
34
34
completion: @escaping ( Result < MoviesPage , Error > ) -> Void
35
35
) -> Cancellable ? {
36
- callCount += 1
36
+ executeCallCount += 1
37
37
_execute ( requestValue, cached, completion)
38
38
return nil
39
39
}
@@ -58,7 +58,8 @@ class MoviesListViewModelTests: XCTestCase {
58
58
XCTAssertEqual ( viewModel. currentPage, 1 )
59
59
XCTAssertFalse ( viewModel. hasMorePages)
60
60
XCTAssertTrue ( viewModel. items. value. isEmpty)
61
- XCTAssertEqual ( searchMoviesUseCaseMock. callCount, 1 )
61
+ XCTAssertEqual ( searchMoviesUseCaseMock. executeCallCount, 1 )
62
+ addTeardownBlock { [ weak viewModel] in XCTAssertNil ( viewModel) }
62
63
}
63
64
64
65
func test_whenSearchMoviesUseCaseRetrievesFirstPage_thenViewModelContainsOnlyFirstPage( ) {
@@ -83,7 +84,8 @@ class MoviesListViewModelTests: XCTestCase {
83
84
XCTAssertEqual ( viewModel. items. value, expectedItems)
84
85
XCTAssertEqual ( viewModel. currentPage, 1 )
85
86
XCTAssertTrue ( viewModel. hasMorePages)
86
- XCTAssertEqual ( searchMoviesUseCaseMock. callCount, 1 )
87
+ XCTAssertEqual ( searchMoviesUseCaseMock. executeCallCount, 1 )
88
+ addTeardownBlock { [ weak viewModel] in XCTAssertNil ( viewModel) }
87
89
}
88
90
89
91
func test_whenSearchMoviesUseCaseRetrievesFirstAndSecondPage_thenViewModelContainsTwoPages( ) {
@@ -99,7 +101,7 @@ class MoviesListViewModelTests: XCTestCase {
99
101
)
100
102
// when
101
103
viewModel. didSearch ( query: " query " )
102
- XCTAssertEqual ( searchMoviesUseCaseMock. callCount , 1 )
104
+ XCTAssertEqual ( searchMoviesUseCaseMock. executeCallCount , 1 )
103
105
104
106
searchMoviesUseCaseMock. _execute = { requestValue, _, completion in
105
107
XCTAssertEqual ( requestValue. page, 2 )
@@ -115,7 +117,8 @@ class MoviesListViewModelTests: XCTestCase {
115
117
XCTAssertEqual ( viewModel. items. value, expectedItems)
116
118
XCTAssertEqual ( viewModel. currentPage, 2 )
117
119
XCTAssertFalse ( viewModel. hasMorePages)
118
- XCTAssertEqual ( searchMoviesUseCaseMock. callCount, 2 )
120
+ XCTAssertEqual ( searchMoviesUseCaseMock. executeCallCount, 2 )
121
+ addTeardownBlock { [ weak viewModel] in XCTAssertNil ( viewModel) }
119
122
}
120
123
121
124
func test_whenSearchMoviesUseCaseReturnsError_thenViewModelContainsError( ) {
@@ -135,7 +138,8 @@ class MoviesListViewModelTests: XCTestCase {
135
138
// then
136
139
XCTAssertNotNil ( viewModel. error)
137
140
XCTAssertTrue ( viewModel. items. value. isEmpty)
138
- XCTAssertEqual ( searchMoviesUseCaseMock. callCount, 1 )
141
+ XCTAssertEqual ( searchMoviesUseCaseMock. executeCallCount, 1 )
142
+ addTeardownBlock { [ weak viewModel] in XCTAssertNil ( viewModel) }
139
143
}
140
144
141
145
func test_whenLastPage_thenHasNoPageIsTrue( ) {
@@ -150,7 +154,7 @@ class MoviesListViewModelTests: XCTestCase {
150
154
)
151
155
// when
152
156
viewModel. didSearch ( query: " query " )
153
- XCTAssertEqual ( searchMoviesUseCaseMock. callCount , 1 )
157
+ XCTAssertEqual ( searchMoviesUseCaseMock. executeCallCount , 1 )
154
158
155
159
searchMoviesUseCaseMock. _execute = { requestValue, _, completion in
156
160
XCTAssertEqual ( requestValue. page, 2 )
@@ -162,7 +166,8 @@ class MoviesListViewModelTests: XCTestCase {
162
166
// then
163
167
XCTAssertEqual ( viewModel. currentPage, 2 )
164
168
XCTAssertFalse ( viewModel. hasMorePages)
165
- XCTAssertEqual ( searchMoviesUseCaseMock. callCount, 2 )
169
+ XCTAssertEqual ( searchMoviesUseCaseMock. executeCallCount, 2 )
170
+ addTeardownBlock { [ weak viewModel] in XCTAssertNil ( viewModel) }
166
171
}
167
172
168
173
func test_whenSearchMoviesUseCaseReturnsCachedData_thenViewModelShowsFirstCachedDataAndAfterFreshData( ) {
@@ -179,7 +184,8 @@ class MoviesListViewModelTests: XCTestCase {
179
184
mainQueue: DispatchQueueTypeMock ( )
180
185
)
181
186
182
- let testItemsBeforeFreshData = {
187
+ let testItemsBeforeFreshData = { [ weak viewModel] in
188
+ guard let viewModel else { return }
183
189
let expectedItems = cachedPage
184
190
. movies
185
191
. map { MoviesListItemViewModel ( movie: $0) }
@@ -204,7 +210,8 @@ class MoviesListViewModelTests: XCTestCase {
204
210
XCTAssertEqual ( viewModel. items. value, expectedItems)
205
211
XCTAssertEqual ( viewModel. currentPage, 1 )
206
212
XCTAssertTrue ( viewModel. hasMorePages)
207
- XCTAssertEqual ( searchMoviesUseCaseMock. callCount, 1 )
213
+ XCTAssertEqual ( searchMoviesUseCaseMock. executeCallCount, 1 )
214
+ addTeardownBlock { [ weak viewModel] in XCTAssertNil ( viewModel) }
208
215
}
209
216
210
217
func test_whenSearchMoviesUseCaseReturnsError_thenViewModelShowsCachedData( ) {
@@ -237,7 +244,8 @@ class MoviesListViewModelTests: XCTestCase {
237
244
XCTAssertEqual ( viewModel. items. value, expectedItems)
238
245
XCTAssertEqual ( viewModel. currentPage, 1 )
239
246
XCTAssertTrue ( viewModel. hasMorePages)
240
- XCTAssertEqual ( searchMoviesUseCaseMock. callCount, 1 )
247
+ XCTAssertEqual ( searchMoviesUseCaseMock. executeCallCount, 1 )
248
+ addTeardownBlock { [ weak viewModel] in XCTAssertNil ( viewModel) }
241
249
}
242
250
243
251
}
0 commit comments