Skip to content

Commit 6c1f4a6

Browse files
committed
Adds support for asny await
1 parent c285f16 commit 6c1f4a6

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed

Source/NetworkService+Async.swift

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
//
2+
// File.swift
3+
//
4+
//
5+
// Created by Lukas Schmidt on 19.12.21.
6+
//
7+
8+
import Foundation
9+
10+
@available(watchOS 6.0, *)
11+
@available(macOS 10.15.0, *)
12+
@available(iOS 13.0.0, *)
13+
public extension NetworkService {
14+
15+
@discardableResult
16+
func request<Result>(_ resource: Resource<Result>) async throws -> (Result, HTTPURLResponse) {
17+
return try await withCheckedThrowingContinuation({ coninuation in
18+
request(resource: resource, onCompletionWithResponse: {
19+
coninuation.resume(with: $0)
20+
})
21+
})
22+
}
23+
24+
}

Tests/NetworkServiceTest.swift

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,4 +238,38 @@ class NetworkServiceTest: XCTestCase {
238238
}
239239
XCTAssertEqual(networkAccess.request?.url?.absoluteString, "https://bahn.de/train")
240240
}
241+
242+
@available(watchOS 6.0, *)
243+
@available(macOS 10.15.0, *)
244+
@available(iOS 13.0.0, *)
245+
func testGIVEN_aRequest_WHEN_requestWithAsyncResultAndResponse_THEN_ShouldRespond() async throws {
246+
// GIVEN
247+
networkAccess.changeMock(data: Train.validJSONData, response: .defaultMock, error: nil)
248+
249+
//When
250+
let (result, response) = try await networkService.request(resource)
251+
252+
253+
//Then
254+
XCTAssertEqual(result.name, self.trainName)
255+
XCTAssertEqual(response, .defaultMock)
256+
XCTAssertEqual(networkAccess.request?.url?.absoluteString, "https://bahn.de/train")
257+
}
258+
259+
@available(watchOS 6.0, *)
260+
@available(macOS 10.15.0, *)
261+
@available(iOS 13.0.0, *)
262+
func testGIVEN_aRequest_WHEN_requestWithAsyncResultAndResponse_THEN_ShouldThwo() async {
263+
// GIVEN
264+
let error = NSError(domain: "", code: 0, userInfo: nil)
265+
networkAccess.changeMock(data: nil, response: nil, error: error)
266+
267+
//When
268+
do {
269+
try await networkService.request(resource)
270+
XCTFail("Schould throw")
271+
} catch let error {
272+
XCTAssertTrue(error is NetworkError)
273+
}
274+
}
241275
}

0 commit comments

Comments
 (0)