Skip to content

Commit 78a253d

Browse files
authored
Merge pull request #7 from MFB-Technologies-Inc/feature/improve-mapping-of-errors
Feature/improve mapping of errors
2 parents 71806bf + 8975952 commit 78a253d

File tree

3 files changed

+11
-14
lines changed

3 files changed

+11
-14
lines changed

Sources/NetworkServiceAsyncBeta/NetworkServiceClient+Start.swift

-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ extension NetworkServiceClient {
2323
}
2424
return result
2525
.httpMap()
26-
.mapToNetworkError()
2726
}
2827

2928
private func response(_ request: URLRequest) async throws -> (Data, URLResponse) {

Sources/NetworkServiceAsyncBeta/Result+NetworkService.swift

+7-9
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,7 @@ extension Result where Success == (Data, URLResponse), Failure == Error {
2323
}
2424
return .success(data)
2525
}
26-
.mapError { error in
27-
guard let failure = error as? NetworkService.Failure else {
28-
return .unknown(error as NSError)
29-
}
30-
return failure
31-
}
26+
.mapToNetworkError()
3227
}
3328
}
3429

@@ -38,10 +33,13 @@ extension Result {
3833
/// - `Publishers.MapError<Self, NetworkService.Failure>`
3934
public func mapToNetworkError() -> Result<Success, NetworkService.Failure> {
4035
mapError { error in
41-
guard let failure = error as? NetworkService.Failure else {
42-
return NetworkService.Failure.unknown(error as NSError)
36+
if let urlError = error as? URLError {
37+
return .urlError(urlError)
38+
} else if let failure = error as? NetworkService.Failure {
39+
return failure
40+
} else {
41+
return .unknown(error as NSError)
4342
}
44-
return failure
4543
}
4644
}
4745
}

Tests/NetworkServiceTestHelperAsyncBetaTests/MockNetworkServiceTests.swift

+4-4
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ final class NetworkServiceTestHelper: XCTestCase {
4242
let mock = MockNetworkService(scheduler: scheduler)
4343
mock.outputs = [RepeatResponse.repeatInfinite(MockingBird.chirp)]
4444
for _ in 0 ..< 5 {
45-
let result: Result<MockingBird, NetworkService.Failure> = await mock.get(try url())
45+
let result: Result<MockingBird, NetworkService.Failure> = try await mock.get(url())
4646
XCTAssertEqual(try result.get(), .chirp)
4747
}
4848
let queuedOutput = try XCTUnwrap(mock.outputs.first as? RepeatResponse)
@@ -58,7 +58,7 @@ final class NetworkServiceTestHelper: XCTestCase {
5858
let mock = MockNetworkService(scheduler: scheduler)
5959
mock.outputs = [RepeatResponse.repeat(MockingBird(chirp: true), count: 5)]
6060
for _ in 0 ..< 5 {
61-
let result: Result<MockingBird, NetworkService.Failure> = await mock.get(try url())
61+
let result: Result<MockingBird, NetworkService.Failure> = try await mock.get(url())
6262
XCTAssertEqual(try result.get(), .chirp)
6363
}
6464
XCTAssert(mock.outputs.isEmpty, "Output queue is empty after the specified number of repititions")
@@ -69,7 +69,7 @@ final class NetworkServiceTestHelper: XCTestCase {
6969
mock.delay = Delay.seconds(2)
7070
mock.outputs = [MockingBird.chirp]
7171
let startTime = Date()
72-
let result: Result<MockingBird, NetworkService.Failure> = await mock.get(try url())
72+
let result: Result<MockingBird, NetworkService.Failure> = try await mock.get(url())
7373
let endTime = Date()
7474
let duration = startTime.distance(to: endTime)
7575
XCTAssertGreaterThan(duration, 2)
@@ -84,7 +84,7 @@ final class NetworkServiceTestHelper: XCTestCase {
8484
let expectation = expectation(description: "Never receive a response")
8585
expectation.isInverted = true
8686
let task = Task {
87-
let result: Result<MockingBird, NetworkService.Failure> = await mock.get(try url())
87+
let result: Result<MockingBird, NetworkService.Failure> = try await mock.get(url())
8888
XCTAssertEqual(try result.get(), MockingBird.chirp)
8989
expectation.fulfill()
9090
}

0 commit comments

Comments
 (0)