@@ -233,10 +233,10 @@ class JSONPackageCollectionProviderTests: XCTestCase {
233
233
} )
234
234
}
235
235
236
- func testUnsuccessfulHead ( ) throws {
236
+ func testUnsuccessfulHead_unavailable ( ) throws {
237
237
let url = URL ( string: " https://www.test.com/collection.json " ) !
238
238
let source = PackageCollectionsModel . CollectionSource ( type: . json, url: url)
239
- let statusCode = Int . random ( in: 201 ... 550 )
239
+ let statusCode = Int . random ( in: 500 ... 550 ) // Don't use 404 because it leads to a different error message
240
240
241
241
let handler : HTTPClient . Handler = { request, _, completion in
242
242
XCTAssertEqual ( request. url, url, " url should match " )
@@ -253,10 +253,10 @@ class JSONPackageCollectionProviderTests: XCTestCase {
253
253
} )
254
254
}
255
255
256
- func testUnsuccessfulGet ( ) throws {
256
+ func testUnsuccessfulGet_unavailable ( ) throws {
257
257
let url = URL ( string: " https://www.test.com/collection.json " ) !
258
258
let source = PackageCollectionsModel . CollectionSource ( type: . json, url: url)
259
- let statusCode = Int . random ( in: 201 ... 550 )
259
+ let statusCode = Int . random ( in: 500 ... 550 ) // Don't use 404 because it leads to a different error message
260
260
261
261
let handler : HTTPClient . Handler = { request, _, completion in
262
262
XCTAssertEqual ( request. url, url, " url should match " )
@@ -279,6 +279,50 @@ class JSONPackageCollectionProviderTests: XCTestCase {
279
279
} )
280
280
}
281
281
282
+ func testUnsuccessfulHead_notFound( ) throws {
283
+ let url = URL ( string: " https://www.test.com/collection.json " ) !
284
+ let source = PackageCollectionsModel . CollectionSource ( type: . json, url: url)
285
+
286
+ let handler : HTTPClient . Handler = { request, _, completion in
287
+ XCTAssertEqual ( request. url, url, " url should match " )
288
+ XCTAssertEqual ( request. method, . head, " method should match " )
289
+ completion ( . success( . init( statusCode: 404 ) ) )
290
+ }
291
+
292
+ var httpClient = HTTPClient ( handler: handler)
293
+ httpClient. configuration. circuitBreakerStrategy = . none
294
+ httpClient. configuration. retryStrategy = . none
295
+ let provider = JSONPackageCollectionProvider ( httpClient: httpClient, diagnosticsEngine: DiagnosticsEngine ( ) )
296
+ XCTAssertThrowsError ( try tsc_await { callback in provider. get ( source, callback: callback) } , " expected error " , { error in
297
+ XCTAssertEqual ( error as? JSONPackageCollectionProvider . Errors , . collectionNotFound( url) )
298
+ } )
299
+ }
300
+
301
+ func testUnsuccessfulGet_notFound( ) throws {
302
+ let url = URL ( string: " https://www.test.com/collection.json " ) !
303
+ let source = PackageCollectionsModel . CollectionSource ( type: . json, url: url)
304
+
305
+ let handler : HTTPClient . Handler = { request, _, completion in
306
+ XCTAssertEqual ( request. url, url, " url should match " )
307
+ switch request. method {
308
+ case . head:
309
+ completion ( . success( . init( statusCode: 200 , headers: . init( [ . init( name: " Content-Length " , value: " 1 " ) ] ) ) ) )
310
+ case . get:
311
+ completion ( . success( . init( statusCode: 404 ) ) )
312
+ default :
313
+ XCTFail ( " method should match " )
314
+ }
315
+ }
316
+
317
+ var httpClient = HTTPClient ( handler: handler)
318
+ httpClient. configuration. circuitBreakerStrategy = . none
319
+ httpClient. configuration. retryStrategy = . none
320
+ let provider = JSONPackageCollectionProvider ( httpClient: httpClient, diagnosticsEngine: DiagnosticsEngine ( ) )
321
+ XCTAssertThrowsError ( try tsc_await { callback in provider. get ( source, callback: callback) } , " expected error " , { error in
322
+ XCTAssertEqual ( error as? JSONPackageCollectionProvider . Errors , . collectionNotFound( url) )
323
+ } )
324
+ }
325
+
282
326
func testBadJSON( ) throws {
283
327
let url = URL ( string: " https://www.test.com/collection.json " ) !
284
328
let data = " blah " . data ( using: . utf8) !
0 commit comments