@@ -60,6 +60,7 @@ final class LibraryRefreshViewModelTest: XCTestCase {
60
60
}
61
61
62
62
private func makeOPDSData( zimFileID: UUID ) -> String {
63
+ // swiftlint:disable line_length
63
64
"""
64
65
<feed xmlns= " http://www.w3.org/2005/Atom "
65
66
xmlns:dc= " http://purl.org/dc/terms/ "
@@ -88,6 +89,7 @@ final class LibraryRefreshViewModelTest: XCTestCase {
88
89
</entry>
89
90
</feed>
90
91
"""
92
+ // swiftlint:enable line_length
91
93
}
92
94
93
95
/// Test time out fetching library data.
@@ -96,9 +98,12 @@ final class LibraryRefreshViewModelTest: XCTestCase {
96
98
HTTPTestingURLProtocol . handler = { urlProtocol in
97
99
urlProtocol. client? . urlProtocol ( urlProtocol, didFailWithError: URLError ( URLError . Code. timedOut) )
98
100
}
99
-
101
+ let testDefaults = TestDefaults ( )
102
+ testDefaults. setup ( )
100
103
let viewModel = LibraryViewModel ( urlSession: urlSession,
101
- processFactory: { LibraryProcess ( ) } )
104
+ processFactory: { LibraryProcess ( defaultState: . initial) } ,
105
+ defaults: testDefaults,
106
+ categories: CategoriesToLanguages ( withDefaults: testDefaults) )
102
107
await viewModel. start ( isUserInitiated: true )
103
108
XCTAssert ( viewModel. error is LibraryRefreshError )
104
109
XCTAssertEqual (
@@ -119,8 +124,12 @@ final class LibraryRefreshViewModelTest: XCTestCase {
119
124
urlProtocol. client? . urlProtocolDidFinishLoading ( urlProtocol)
120
125
}
121
126
127
+ let testDefaults = TestDefaults ( )
128
+ testDefaults. setup ( )
122
129
let viewModel = LibraryViewModel ( urlSession: urlSession,
123
- processFactory: { LibraryProcess ( ) } )
130
+ processFactory: { LibraryProcess ( defaultState: . initial) } ,
131
+ defaults: testDefaults,
132
+ categories: CategoriesToLanguages ( withDefaults: testDefaults) )
124
133
await viewModel. start ( isUserInitiated: true )
125
134
XCTAssert ( viewModel. error is LibraryRefreshError )
126
135
XCTAssertEqual (
@@ -137,13 +146,17 @@ final class LibraryRefreshViewModelTest: XCTestCase {
137
146
url: URL . mock ( ) ,
138
147
statusCode: 200 , httpVersion: nil , headerFields: [ : ]
139
148
) !
140
- urlProtocol. client? . urlProtocol ( urlProtocol, didLoad: " Invalid OPDS Data " . data ( using : . utf8) ! )
149
+ urlProtocol. client? . urlProtocol ( urlProtocol, didLoad: Data ( " Invalid OPDS Data " . utf8) )
141
150
urlProtocol. client? . urlProtocol ( urlProtocol, didReceive: response, cacheStoragePolicy: . notAllowed)
142
151
urlProtocol. client? . urlProtocolDidFinishLoading ( urlProtocol)
143
152
}
144
153
154
+ let testDefaults = TestDefaults ( )
155
+ testDefaults. setup ( )
145
156
let viewModel = LibraryViewModel ( urlSession: urlSession,
146
- processFactory: { LibraryProcess ( ) } )
157
+ processFactory: { LibraryProcess ( defaultState: . initial) } ,
158
+ defaults: testDefaults,
159
+ categories: CategoriesToLanguages ( withDefaults: testDefaults) )
147
160
await viewModel. start ( isUserInitiated: true )
148
161
XCTExpectFailure ( " Requires work in dependency to resolve the issue. " )
149
162
XCTAssertEqual (
@@ -154,6 +167,7 @@ final class LibraryRefreshViewModelTest: XCTestCase {
154
167
155
168
/// Test zim file entity is created, and metadata are saved when new zim file becomes available in online catalog.
156
169
@MainActor
170
+ // swiftlint:disable:next function_body_length
157
171
func testNewZimFileAndProperties( ) async throws {
158
172
let zimFileID = UUID ( )
159
173
HTTPTestingURLProtocol . handler = { urlProtocol in
@@ -166,9 +180,12 @@ final class LibraryRefreshViewModelTest: XCTestCase {
166
180
urlProtocol. client? . urlProtocol ( urlProtocol, didReceive: response, cacheStoragePolicy: . notAllowed)
167
181
urlProtocol. client? . urlProtocolDidFinishLoading ( urlProtocol)
168
182
}
169
-
183
+ let testDefaults = TestDefaults ( )
184
+ testDefaults. setup ( )
170
185
let viewModel = LibraryViewModel ( urlSession: urlSession,
171
- processFactory: { LibraryProcess ( ) } )
186
+ processFactory: { LibraryProcess ( defaultState: . initial) } ,
187
+ defaults: testDefaults,
188
+ categories: CategoriesToLanguages ( withDefaults: testDefaults) )
172
189
await viewModel. start ( isUserInitiated: true )
173
190
174
191
// check no error has happened
@@ -185,6 +202,7 @@ final class LibraryRefreshViewModelTest: XCTestCase {
185
202
XCTAssertEqual ( zimFile. id, zimFileID)
186
203
XCTAssertEqual ( zimFile. articleCount, 50001 )
187
204
XCTAssertEqual ( zimFile. category, Category . wikipedia. rawValue)
205
+ // swiftlint:disable:next force_try
188
206
XCTAssertEqual ( zimFile. created, try ! Date ( " 2023-01-07T00:00:00Z " , strategy: . iso8601) )
189
207
XCTAssertEqual (
190
208
zimFile. downloadURL,
@@ -211,14 +229,21 @@ final class LibraryRefreshViewModelTest: XCTestCase {
211
229
XCTAssertEqual ( zimFile. persistentID, " wikipedia_en_top " )
212
230
XCTAssertEqual ( zimFile. requiresServiceWorkers, false )
213
231
XCTAssertEqual ( zimFile. size, 6515656704 )
232
+
233
+ // clean up
234
+ context. delete ( zimFile)
214
235
}
215
236
216
237
/// Test zim file deprecation
217
238
@MainActor
218
239
func testZimFileDeprecation( ) async throws {
240
+ let testDefaults = TestDefaults ( )
241
+ testDefaults. setup ( )
219
242
// refresh library for the first time, which should create one zim file
220
243
let viewModel = LibraryViewModel ( urlSession: urlSession,
221
- processFactory: { LibraryProcess ( ) } )
244
+ processFactory: { LibraryProcess ( defaultState: . initial) } ,
245
+ defaults: testDefaults,
246
+ categories: CategoriesToLanguages ( withDefaults: testDefaults) )
222
247
await viewModel. start ( isUserInitiated: true )
223
248
let context = Database . shared. viewContext
224
249
let zimFile1 = try XCTUnwrap ( try context. fetch ( ZimFile . fetchRequest ( ) ) . first)
@@ -231,7 +256,7 @@ final class LibraryRefreshViewModelTest: XCTestCase {
231
256
XCTAssertNotEqual ( zimFile1. fileID, zimFile2. fileID)
232
257
233
258
// set fileURLBookmark of zim file 2
234
- zimFile2. fileURLBookmark = " /Users/tester/Downloads/file_url.zim " . data ( using : . utf8)
259
+ zimFile2. fileURLBookmark = Data ( " /Users/tester/Downloads/file_url.zim " . utf8)
235
260
try context. save ( )
236
261
237
262
// refresh library for the third time
@@ -241,6 +266,10 @@ final class LibraryRefreshViewModelTest: XCTestCase {
241
266
// check there are two zim files in the database, and zim file 2 is not deprecated
242
267
XCTAssertEqual ( zimFiles. count, 2 )
243
268
XCTAssertEqual ( zimFiles. filter ( { $0. fileID == zimFile2. fileID } ) . count, 1 )
269
+
270
+ // clean up
271
+ context. delete ( zimFile1)
272
+ context. delete ( zimFile2)
244
273
}
245
274
}
246
275
0 commit comments