diff --git a/lib/faraday/response/raise_error.rb b/lib/faraday/response/raise_error.rb index 9b624c828..be792fb10 100644 --- a/lib/faraday/response/raise_error.rb +++ b/lib/faraday/response/raise_error.rb @@ -13,25 +13,34 @@ class RaiseError < Middleware def on_complete(env) case env[:status] when 400 - raise Faraday::BadRequestError, response_values(env) + raise Faraday::BadRequestError + .new(response_values(env), nil, env.response) when 401 - raise Faraday::UnauthorizedError, response_values(env) + raise Faraday::UnauthorizedError + .new(response_values(env), nil, env.response) when 403 - raise Faraday::ForbiddenError, response_values(env) + raise Faraday::ForbiddenError + .new(response_values(env), nil, env.response) when 404 - raise Faraday::ResourceNotFound, response_values(env) + raise Faraday::ResourceNotFound + .new(response_values(env), nil, env.response) when 407 # mimic the behavior that we get with proxy requests with HTTPS msg = %(407 "Proxy Authentication Required") - raise Faraday::ProxyAuthError.new(msg, response_values(env)) + raise Faraday::ProxyAuthError + .new(msg, response_values(env), env.response) when 409 - raise Faraday::ConflictError, response_values(env) + raise Faraday::ConflictError + .new(response_values(env), nil, env.response) when 422 - raise Faraday::UnprocessableEntityError, response_values(env) + raise Faraday::UnprocessableEntityError + .new(response_values(env), nil, env.response) when ClientErrorStatuses - raise Faraday::ClientError, response_values(env) + raise Faraday::ClientError + .new(response_values(env), nil, env.response) when ServerErrorStatuses - raise Faraday::ServerError, response_values(env) + raise Faraday::ServerError + .new(response_values(env), nil, env.response) when nil raise Faraday::NilStatusError, response_values(env) end diff --git a/spec/faraday/response/raise_error_spec.rb b/spec/faraday/response/raise_error_spec.rb index c8331b6e8..011213d6a 100644 --- a/spec/faraday/response/raise_error_spec.rb +++ b/spec/faraday/response/raise_error_spec.rb @@ -29,6 +29,9 @@ expect(ex.message).to eq('the server responded with status 400') expect(ex.response[:headers]['X-Reason']).to eq('because') expect(ex.response[:status]).to eq(400) + expect(ex.response_status).to eq(400) + expect(ex.response_body).to eq('keep looking') + expect(ex.response_headers['X-Reason']).to eq('because') end end @@ -37,6 +40,9 @@ expect(ex.message).to eq('the server responded with status 401') expect(ex.response[:headers]['X-Reason']).to eq('because') expect(ex.response[:status]).to eq(401) + expect(ex.response_status).to eq(401) + expect(ex.response_body).to eq('keep looking') + expect(ex.response_headers['X-Reason']).to eq('because') end end @@ -45,6 +51,9 @@ expect(ex.message).to eq('the server responded with status 403') expect(ex.response[:headers]['X-Reason']).to eq('because') expect(ex.response[:status]).to eq(403) + expect(ex.response_status).to eq(403) + expect(ex.response_body).to eq('keep looking') + expect(ex.response_headers['X-Reason']).to eq('because') end end @@ -53,6 +62,9 @@ expect(ex.message).to eq('the server responded with status 404') expect(ex.response[:headers]['X-Reason']).to eq('because') expect(ex.response[:status]).to eq(404) + expect(ex.response_status).to eq(404) + expect(ex.response_body).to eq('keep looking') + expect(ex.response_headers['X-Reason']).to eq('because') end end @@ -61,6 +73,9 @@ expect(ex.message).to eq('407 "Proxy Authentication Required"') expect(ex.response[:headers]['X-Reason']).to eq('because') expect(ex.response[:status]).to eq(407) + expect(ex.response_status).to eq(407) + expect(ex.response_body).to eq('keep looking') + expect(ex.response_headers['X-Reason']).to eq('because') end end @@ -69,6 +84,9 @@ expect(ex.message).to eq('the server responded with status 409') expect(ex.response[:headers]['X-Reason']).to eq('because') expect(ex.response[:status]).to eq(409) + expect(ex.response_status).to eq(409) + expect(ex.response_body).to eq('keep looking') + expect(ex.response_headers['X-Reason']).to eq('because') end end @@ -77,6 +95,9 @@ expect(ex.message).to eq('the server responded with status 422') expect(ex.response[:headers]['X-Reason']).to eq('because') expect(ex.response[:status]).to eq(422) + expect(ex.response_status).to eq(422) + expect(ex.response_body).to eq('keep looking') + expect(ex.response_headers['X-Reason']).to eq('because') end end @@ -93,6 +114,9 @@ expect(ex.message).to eq('the server responded with status 499') expect(ex.response[:headers]['X-Reason']).to eq('because') expect(ex.response[:status]).to eq(499) + expect(ex.response_status).to eq(499) + expect(ex.response_body).to eq('keep looking') + expect(ex.response_headers['X-Reason']).to eq('because') end end @@ -101,6 +125,9 @@ expect(ex.message).to eq('the server responded with status 500') expect(ex.response[:headers]['X-Error']).to eq('bailout') expect(ex.response[:status]).to eq(500) + expect(ex.response_status).to eq(500) + expect(ex.response_body).to eq('fail') + expect(ex.response_headers['X-Error']).to eq('bailout') end end end