Skip to content

Commit ae85ab8

Browse files
committed
Fix adapting a request during retry
1 parent bbb342f commit ae85ab8

File tree

3 files changed

+15
-11
lines changed

3 files changed

+15
-11
lines changed

Sources/NetworkLayer/Classes/Core/Services/RequestProcessor/RequestProcessor.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//
22
// network-layer
3-
// Copyright © 2023 Space Code. All rights reserved.
3+
// Copyright © 2025 Space Code. All rights reserved.
44
//
55

66
import Foundation
@@ -75,15 +75,15 @@ actor RequestProcessor {
7575
_ request: T,
7676
strategy: RetryPolicyStrategy? = nil,
7777
delegate: URLSessionDelegate?,
78-
configure: ((inout URLRequest) throws -> Void)?
78+
configure: (@Sendable (inout URLRequest) throws -> Void)?
7979
) async throws -> Response<Data> {
80-
guard var urlRequest = try requestBuilder.build(request, configure) else {
81-
throw NetworkLayerError.badURL
82-
}
80+
try await performRequest(strategy: strategy) { [weak self] in
81+
guard let self, var urlRequest = try requestBuilder.build(request, configure) else {
82+
throw NetworkLayerError.badURL
83+
}
8384

84-
try await adapt(request, urlRequest: &urlRequest, session: session)
85+
try await adapt(request, urlRequest: &urlRequest, session: session)
8586

86-
return try await performRequest(strategy: strategy) { [urlRequest] in
8787
try await self.delegate?.wrappedValue?.requestProcessor(self, willSendRequest: urlRequest)
8888

8989
let task = session.dataTask(with: urlRequest)

Sources/NetworkLayerInterfaces/Classes/Core/Services/IRequestBuilder.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//
22
// network-layer
3-
// Copyright © 2023 Space Code. All rights reserved.
3+
// Copyright © 2025 Space Code. All rights reserved.
44
//
55

66
import Foundation
@@ -12,5 +12,5 @@ public protocol IRequestBuilder: Sendable {
1212
/// - Parameter request: The request object that defines the request details.
1313
///
1414
/// - Returns: A `URLRequest` constructed based on the given data.
15-
func build(_ request: IRequest, _ configure: ((inout URLRequest) throws -> Void)?) throws -> URLRequest?
15+
func build(_ request: IRequest, _ configure: (@Sendable (inout URLRequest) throws -> Void)?) throws -> URLRequest?
1616
}

Tests/NetworkLayerTests/Classes/Tests/IntegrationTests/RequestProcessorAuthenticationTests.swift

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//
22
// network-layer
3-
// Copyright © 2023 Space Code. All rights reserved.
3+
// Copyright © 2025 Space Code. All rights reserved.
44
//
55

66
import Foundation
@@ -60,7 +60,11 @@ final class RequestProcessorAuthenicationTests: XCTestCase {
6060
}
6161

6262
func test_thatRequestProcessorThrowsAnError_whenInterceptorAdaptDidFail() async throws {
63-
try await test_failAuthentication(adaptError: URLError(.unknown), refreshError: nil, expectedError: URLError(.unknown))
63+
try await test_failAuthentication(
64+
adaptError: URLError(.unknown),
65+
refreshError: nil,
66+
expectedError: RetryPolicyError.retryLimitExceeded
67+
)
6468
}
6569

6670
func test_thatRequestProcessorThrowsAnError_whenInterceptorRefreshDidFail() async throws {

0 commit comments

Comments
 (0)