                     let newRequest = newEndpoint.urlRequest
                     let newEncodedRequest = try? encoding.encode(newRequest!, with: parameters)
 
-                    expect(request?.httpBody).to(equal(newEncodedRequest?.httpBody))
-                    expect(request?.url?.absoluteString).to(equal(newEncodedRequest?.url?.absoluteString))
-                    expect(request?.allHTTPHeaderFields).to(equal(newEncodedRequest?.allHTTPHeaderFields))
-                    expect(request?.httpMethod).to(equal(newEncodedRequest?.httpMethod))
+                    expect(request.httpBody).to(equal(newEncodedRequest?.httpBody))
+                    expect(request.url?.absoluteString).to(equal(newEncodedRequest?.url?.absoluteString))
+                    expect(request.allHTTPHeaderFields).to(equal(newEncodedRequest?.allHTTPHeaderFields))
+                    expect(request.httpMethod).to(equal(newEncodedRequest?.httpMethod))
                 }
             }
 
             context("when task is .requestCompositeData") {
                 var parameters: [String: Any]!
                 var data: Data!
-                var request: URLRequest?
+                var request: URLRequest!
 
                 beforeEach {
                     parameters = ["Nemesis": "Harvey"]

                    let newRequest = newEndpoint.urlRequest
                    let newEncodedRequest = try? encoding.encode(newRequest!, with: bodyParameters)

                    expect(request?.httpBody).to(equal(newEncodedRequest?.httpBody))
                    expect(request?.allHTTPHeaderFields).to(equal(newEncodedRequest?.allHTTPHeaderFields))
                    expect(request?.httpMethod).to(equal(newEncodedRequest?.httpMethod))
                }
            }
        }


        describe("converting to urlRequest") {
            context("when task is .requestPlain") {
                itBehavesLike("endpoint with no request property changed") {
                    return ["task": Task.requestPlain, "endpoint": self.simpleGitHubEndpoint]
                }
            }

            context("when task is .uploadFile") {
                itBehavesLike("endpoint with no request property changed") {
                    return ["task": Task.uploadFile(URL(string: "https://google.com")!), "endpoint": self.simpleGitHubEndpoint]
                }
            }

            context("when task is .uploadMultipart") {
                itBehavesLike("endpoint with no request property changed") {
                    return ["task": Task.uploadMultipart([]), "endpoint": self.simpleGitHubEndpoint]
                }
            }

            context("when task is .downloadDestination") {
                itBehavesLike("endpoint with no request property changed") {
                    let destination: DownloadDestination = { url, response in
                        return (destinationURL: url, options: [])
                    }
                    return ["task": Task.downloadDestination(destination), "endpoint": self.simpleGitHubEndpoint]
                }
            }

            context("when task is .requestData") {
                var data: Data!
                var request: URLRequest!

                beforeEach {
                    data = "test data".data(using: .utf8)
