Skip to content

Commit 127ac61

Browse files
authored
Now supporting get parameters (#281)
1 parent 28f479e commit 127ac61

File tree

3 files changed

+54
-5
lines changed

3 files changed

+54
-5
lines changed

Sources/Networking/Networking+HTTPRequests.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ public extension Networking {
4141
await cancelRequest(.data, requestType: .get, url: url)
4242
}
4343

44-
func newGet<T: Decodable>(_ path: String) async -> Result<T, NetworkingError> {
45-
return await handle(.get, path: path, parameters: nil)
44+
func newGet<T: Decodable>(_ path: String, parameters: Any? = nil) async -> Result<T, NetworkingError> {
45+
return await handle(.get, path: path, parameters: parameters)
4646
}
4747

4848
func newPost<T: Decodable>(_ path: String, parameters: [String: Any]) async -> Result<T, NetworkingError> {

Sources/Networking/Networking+New.swift

+28-3
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,35 @@ extension Networking {
3030
}
3131

3232
private func createRequest(path: String, requestType: RequestType, parameters: Any?) throws -> URLRequest {
33-
let parameterType: Networking.ParameterType? = parameters != nil ? .json : nil
34-
var request = URLRequest(url: try composedURL(with: path), requestType: requestType, path: path, parameterType: parameterType, responseType: .json, boundary: boundary, authorizationHeaderValue: authorizationHeaderValue, token: token, authorizationHeaderKey: authorizationHeaderKey, headerFields: headerFields)
33+
guard var urlComponents = URLComponents(string: try composedURL(with: path).absoluteString) else {
34+
throw URLError(.badURL)
35+
}
36+
37+
if requestType == .get, let queryParameters = parameters as? [String: Any] {
38+
urlComponents.queryItems = queryParameters.map { key, value in
39+
URLQueryItem(name: key, value: "\(value)")
40+
}
41+
}
42+
43+
guard let url = urlComponents.url else {
44+
throw URLError(.badURL)
45+
}
3546

36-
if let parameters = parameters {
47+
let parameterType: Networking.ParameterType? = (requestType == .get || parameters == nil) ? nil : .json
48+
var request = URLRequest(
49+
url: url,
50+
requestType: requestType,
51+
path: path,
52+
parameterType: parameterType,
53+
responseType: .json,
54+
boundary: boundary,
55+
authorizationHeaderValue: authorizationHeaderValue,
56+
token: token,
57+
authorizationHeaderKey: authorizationHeaderKey,
58+
headerFields: headerFields
59+
)
60+
61+
if requestType != .get, let parameters = parameters {
3762
request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: [])
3863
}
3964

Tests/NetworkingTests/NewNetworkingTests.swift

+24
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import Foundation
22
import XCTest
3+
import CoreLocation
34
@testable import Networking
45

56
class NewNetworkingTests: XCTestCase {
@@ -18,6 +19,29 @@ class NewNetworkingTests: XCTestCase {
1819
}
1920
}
2021

22+
func testNewGETWithParams() async throws {
23+
let networking = Networking(baseURL: baseURL)
24+
25+
let pickupCoordinate = CLLocationCoordinate2D(latitude: 59.91700978556453, longitude: 10.760668740407757)
26+
let deliveryCoordinate = CLLocationCoordinate2D(latitude: 59.937611066825674, longitude: 10.735343079276985)
27+
28+
let parameters = [
29+
"pickup_latitude": pickupCoordinate.latitude,
30+
"pickup_longitude": pickupCoordinate.longitude,
31+
"delivery_latitude": deliveryCoordinate.latitude,
32+
"delivery_longitude": deliveryCoordinate.longitude
33+
]
34+
35+
let result: Result<Friend, NetworkingError> = await networking.newGet("/get", parameters: parameters)
36+
37+
switch result {
38+
case .success(_):
39+
print("Test passed")
40+
case .failure(let error):
41+
print("error \(error)")
42+
}
43+
}
44+
2145
func testNewPOST() async throws {
2246
let networking = Networking(baseURL: baseURL)
2347

0 commit comments

Comments
 (0)