func test422ValidationError()

in source/UberRidesTests/RequestLayerTests.swift [156:193]


    func test422ValidationError() {
        let message = "Invalid request."
        let code = "validation_failed"
        let fields = ["latitude": ["Must be between -90.0 and 90.0"], "longitude": ["Must be between -90.0 and 90.0"]]
        
        stub(condition: isHost("sandbox-api.uber.com")) { _ in
            let json = ["message": message, "code": code, "fields": fields] as [String : Any]
            return HTTPStubsResponse(jsonObject: json, statusCode: 422, headers: self.headers)
        }
        
        let expectation = self.expectation(description: "422 error response")
        let endpoint = Products.getProduct(productID: productID)
        guard let request = Request(session: client.session, endpoint: endpoint) else {
            XCTFail("Unable to create request")
            return
        }
        request.execute({ response in
            XCTAssertEqual(response.statusCode, 422)
            XCTAssertNotNil(response.error)
            XCTAssertTrue(response.error is UberClientError)
            XCTAssertEqual(response.error!.title, message)
            XCTAssertEqual(response.error!.code, code)
            
            let fields = response.error!.meta! as! [String: [String]]
            XCTAssertEqual(fields.count, 2)
            XCTAssertEqual(fields["latitude"]![0], "Must be between -90.0 and 90.0")
            XCTAssertEqual(fields["longitude"]![0], "Must be between -90.0 and 90.0")
            
            expectation.fulfill()
        })
        
        waitForExpectations(timeout: timeout, handler: { error in
            if let error = error {
                print("Error: \(error.localizedDescription)")
            }
            request.cancelTasks()
        })
    }