diff --git a/Sources/Networking/NetworkingRequest.swift b/Sources/Networking/NetworkingRequest.swift index 7b43d52..8fce024 100644 --- a/Sources/Networking/NetworkingRequest.swift +++ b/Sources/Networking/NetworkingRequest.swift @@ -121,7 +121,9 @@ public class NetworkingRequest: NSObject { urlString = getURLWithParams() } - let url = URL(string: urlString)! + guard let url = URL(string: urlString) else { + return nil + } var request = URLRequest(url: url) if httpVerb != .get && multipartData == nil { diff --git a/Tests/NetworkingTests/NetworkingTests.swift b/Tests/NetworkingTests/NetworkingTests.swift index 9df1401..674b5cc 100644 --- a/Tests/NetworkingTests/NetworkingTests.swift +++ b/Tests/NetworkingTests/NetworkingTests.swift @@ -81,6 +81,26 @@ final class NetworkingTests: XCTestCase { }).store(in: &cancellables) waitForExpectations(timeout: 3, handler: nil) } + + func testBadURLDoesntCrash() { + let exp = expectation(description: "call") + let client = NetworkingClient(baseURL: "https://jsonplaceholder.typicode.com") + client.get("/forge a bad url") + .sink(receiveCompletion: { completion in + switch completion { + case .finished: + print("finished") + case .failure(let error): + if let e = error as? NetworkingError, e.status == .unableToParseRequest { + exp.fulfill() + } + } + }, + receiveValue: { (json: Any) in + print(json) + }).store(in: &cancellables) + waitForExpectations(timeout: 1, handler: nil) + } // // func testGetDecodableModels() { // let exp = expectation(description: "call")