Skip to content

Commit 7a0784c

Browse files
committed
Merge branch 'release/4.0' of https://github.com/dbsystel/DBNetworkStack into release/4.0
2 parents f3f4a43 + b7b5f80 commit 7a0784c

14 files changed

+70
-39
lines changed

Source/NetworkError.swift

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public enum NetworkError: Error, Sendable {
3636
/// Error on the server (HTTP Error 500...511)
3737
case serverError(response: HTTPURLResponse?, data: Data?)
3838
/// Parsing the body into expected type failed.
39-
case serializationError(error: Error, data: Data?)
39+
case serializationError(error: Error, response: HTTPURLResponse, data: Data?)
4040
/// Complete request failed.
4141
case requestError(error: Error)
4242

@@ -75,21 +75,21 @@ extension NetworkError: CustomDebugStringConvertible {
7575
case .cancelled:
7676
return "Request cancelled"
7777
case .unauthorized(let response, let data):
78-
return "Authorization error: \(response), response: ".appendingContentsOf(data: data)
78+
return "Authorization error, response headers: \(response), response body: ".appendingContentsOf(data: data)
7979
case .clientError(let response, let data):
8080
if let response = response {
81-
return "Client error: \((response)), response: ".appendingContentsOf(data: data)
81+
return "Client error, response headers: \((response)), response body: ".appendingContentsOf(data: data)
8282
}
83-
return "Client error, response: ".appendingContentsOf(data: data)
84-
case .serializationError(let description, let data):
85-
return "Serialization error: \(description), response: ".appendingContentsOf(data: data)
83+
return "Client error, response headers: nil, response body: ".appendingContentsOf(data: data)
84+
case .serializationError(let error, let response, let data):
85+
return "Serialization error: \(error), response headers: \(response), response body: ".appendingContentsOf(data: data)
8686
case .requestError(let error):
8787
return "Request error: \(error)"
8888
case .serverError(let response, let data):
89-
if let response = response {
90-
return "Server error: \(String(describing: response)), response: ".appendingContentsOf(data: data)
89+
if let response {
90+
return "Server error, response headers: \(String(describing: response)), response body: ".appendingContentsOf(data: data)
9191
} else {
92-
return "Server error: nil, response: ".appendingContentsOf(data: data)
92+
return "Server error: nil, response body: ".appendingContentsOf(data: data)
9393
}
9494
}
9595
}

Source/NetworkServices/BasicNetworkService.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public final class BasicNetworkService: NetworkService {
8686
do {
8787
return .success((try resource.parse(data), response))
8888
} catch let error {
89-
return .failure(.serializationError(error: error, data: data))
89+
return .failure(.serializationError(error: error, response: response, data: data))
9090
}
9191
} catch let error {
9292
if case URLError.cancelled = error {

Source/Resource+Decodable.swift

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,11 @@ extension Resource where Model: Decodable {
3333
/// - decoder: a decoder which can decode the payload into the model type
3434
/// - mapError: a closure which maps to Error
3535
public init(request: URLRequest, decoder: JSONDecoder, mapError: @escaping @Sendable (_ networkError: NetworkError) -> E) {
36-
self.init(request: request, parse: { try decoder.decode(Model.self, from: $0) }, mapError: mapError)
36+
self.init(request: request, parse: {
37+
try decoder.decode(Model.self, from: $0)
38+
},
39+
mapError: mapError
40+
)
3741
}
3842
}
3943

@@ -47,6 +51,12 @@ extension Resource where Model: Decodable, E: NetworkErrorConvertible {
4751
/// - decoder: a decoder which can decode the payload into the model type
4852
/// - mapError: a closure which maps to Error
4953
public init(request: URLRequest, decoder: JSONDecoder) {
50-
self.init(request: request, parse: { try decoder.decode(Model.self, from: $0) }, mapError: { E(networkError: $0) })
54+
self.init(request: request, parse: {
55+
try decoder.decode(Model.self, from: $0)
56+
},
57+
mapError: {
58+
E(networkError: $0)
59+
}
60+
)
5161
}
5262
}

Source/Resource+Inspect.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ extension Resource {
3636
- parameter inspector: closure which gets passed the data
3737
- returns: a new resource which gets instepcted before parsing
3838
*/
39-
public func inspectData(_ inspector: @escaping @Sendable (Data) -> Void) -> Resource<Model, E> {
39+
public func inspectData(_ inspector: @escaping @Sendable (Data) -> Void) -> Resource<Model, E> {
4040
let parse: @Sendable (Data) throws -> Model = { data in
4141
inspector(data)
4242
return try self.parse(data)

Source/Resource+Map.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ extension Resource {
3030
public func map<T>(transform: @escaping @Sendable (Model) throws -> T) -> Resource<T, E> {
3131
return Resource<T, E>(
3232
request: request,
33-
parse: { return try transform(try self.parse($0)) },
33+
parse: { data in
34+
return try transform(try self.parse(data))
35+
},
3436
mapError: mapError
3537
)
3638
}

Tests/DecodableResoureTest.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class DecodableResoureTest: XCTestCase {
3434
func testResource_withValidData() {
3535
//When
3636
let fetchedTrain = try? resource.parse(Train.validJSONData)
37-
37+
3838
//Then
3939
XCTAssertEqual(fetchedTrain?.name, "ICE")
4040
}
@@ -43,7 +43,7 @@ class DecodableResoureTest: XCTestCase {
4343
//When
4444
let nameResource = resource.map { $0.name }
4545
let fetchedTrainName = try? nameResource.parse(Train.validJSONData)
46-
46+
4747
//Then
4848
XCTAssertEqual(fetchedTrainName, "ICE")
4949
}

Tests/ModifyRequestNetworkService.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,12 @@ class ModifyRequestNetworkServiceTest: XCTestCase {
3636
let networkService = ModifyRequestNetworkService(networkService: networkServiceMock, requestModifications: modification)
3737
let request = URLRequest(path: "/trains", baseURL: .defaultMock)
3838
let resource = Resource<Int, NetworkError>(request: request, parse: { _ in return 1 })
39-
39+
4040
//When
4141
await networkService.requestResult(for: resource)
4242

4343
//Then
44-
let lastRequest = await networkServiceMock.lastRequest
44+
let lastRequest = networkServiceMock.lastRequest
4545
let lastRequestURL = try XCTUnwrap(lastRequest?.url)
4646
XCTAssert(lastRequestURL.absoluteString.contains("key=1"))
4747
}

Tests/NetworkErrorTest.swift

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,8 @@ class NetworkErrorTest: XCTestCase {
135135
let debugDescription = error.debugDescription
136136

137137
//Then
138-
XCTAssert(debugDescription.hasPrefix("Authorization error: <NSHTTPURLResponse: "))
139-
XCTAssert(debugDescription.hasSuffix("response: dataString"))
138+
XCTAssert(debugDescription.hasPrefix("Authorization error, response headers: <NSHTTPURLResponse: "), debugDescription)
139+
XCTAssert(debugDescription.hasSuffix("response body: dataString"), debugDescription)
140140
}
141141

142142
func testUnknownError_clientError_description() {
@@ -149,21 +149,22 @@ class NetworkErrorTest: XCTestCase {
149149
let debugDescription = error.debugDescription
150150

151151
//Then
152-
XCTAssert(debugDescription.hasPrefix("Client error: <NSHTTPURLResponse: "))
153-
XCTAssert(debugDescription.hasSuffix("response: dataString"))
152+
XCTAssert(debugDescription.hasPrefix("Client error, response headers: <NSHTTPURLResponse: "), debugDescription)
153+
XCTAssert(debugDescription.hasSuffix("response body: dataString"), debugDescription)
154154
}
155155

156156
func testUnknownError_serializationError_description() {
157157
//Given
158158
let nserror = NSError(domain: "TestError", code: 0, userInfo: nil)
159159
let data = "dataString".data(using: .utf8)
160-
let error: NetworkError = .serializationError(error: nserror, data: data)
161-
160+
let error: NetworkError = .serializationError(error: nserror, response: HTTPURLResponse.defaultMock, data: data)
161+
162162
//When
163163
let debugDescription = error.debugDescription
164164

165165
//Then
166-
XCTAssertEqual(debugDescription, "Serialization error: Error Domain=TestError Code=0 \"(null)\", response: dataString")
166+
XCTAssert(debugDescription.hasPrefix("Serialization error: Error Domain=TestError Code=0 \"(null)\", response headers: <NSHTTPURLResponse:"), debugDescription)
167+
XCTAssert(debugDescription.hasSuffix("response body: dataString"), debugDescription)
167168
}
168169

169170
func testUnknownError_requestError_description() {

Tests/NetworkServiceMockTest.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class NetworkServiceMockTest: XCTestCase {
4141
try await networkServiceMock.request(resource)
4242

4343
//Then
44-
let requestCount = await networkServiceMock.requestCount
44+
let requestCount = networkServiceMock.requestCount
4545
XCTAssertEqual(requestCount, 2)
4646
}
4747

@@ -57,7 +57,7 @@ class NetworkServiceMockTest: XCTestCase {
5757
try await networkServiceMock.request(resource)
5858

5959
//Then
60-
let lastRequests = await networkServiceMock.lastRequests
60+
let lastRequests = networkServiceMock.lastRequests
6161
XCTAssertEqual(lastRequests, [resource.request, resource.request])
6262
}
6363

Tests/NetworkServiceTest.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class NetworkServiceTest: XCTestCase {
5959
let result = await networkService.requestResult(for: resource)
6060

6161
//Then
62-
if case .failure(.serializationError(_, let data)) = result {
62+
if case .failure(.serializationError(_, _, let data)) = result {
6363
XCTAssertEqual(data, Train.JSONDataWithInvalidKey)
6464
} else {
6565
XCTFail("Expects serializationError")

0 commit comments

Comments
 (0)