Skip to content

Commit 3175c51

Browse files
authored
fix: avoid JSON::ParserError for all server errors (#582)
1 parent b978077 commit 3175c51

File tree

2 files changed

+10
-9
lines changed

2 files changed

+10
-9
lines changed

Diff for: lib/twilio-ruby/http/http_client.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ def _request(request)
4444
@last_response = nil
4545

4646
response = send(request)
47-
if response.status == 504
48-
object = { message: 'Request timeout', code: 504 }.to_json
47+
if (500..599).include?(response.status)
48+
object = { message: "Server error (#{response.status})", code: response.status }.to_json
4949
elsif response.body && !response.body.empty?
5050
object = response.body
5151
elsif response.status == 400

Diff for: spec/http/http_client_spec.rb

+8-7
Original file line numberDiff line numberDiff line change
@@ -143,19 +143,20 @@
143143
expect(@client.last_response).to be_nil
144144
end
145145

146-
context 'when the response returns a timeout' do
146+
context 'when there is a server error' do
147+
let(:faraday_connection) { Faraday::Connection.new }
147148
let(:twilio_response) { @client.request('host', 'port', 'GET', 'url') }
148149

149150
before do
150-
faraday_connection = Faraday::Connection.new
151-
152151
allow(Faraday).to receive(:new).and_return(faraday_connection)
153-
allow(faraday_connection).to receive(:send).and_return(double('response', status: 504, body: { message: 'any message' }, headers: {}))
154152
end
155153

156-
it 'adds a Request timeout message to the response and avoids non-JSON response to raise Json::ParserError' do
157-
expect(twilio_response.body).to eq({ 'message' => 'Request timeout', 'code' => 504 })
158-
expect(twilio_response.status_code).to eq 504
154+
(500..599).each do |status_code|
155+
it 'generates a JSON-parseable body' do
156+
allow(faraday_connection).to receive(:send).and_return(double('response', status: status_code, body: { message: 'any message' }, headers: {}))
157+
expect(twilio_response.body).to eq({ 'message' => "Server error (#{status_code})", 'code' => status_code })
158+
expect(twilio_response.status_code).to eq status_code
159+
end
159160
end
160161
end
161162
end

0 commit comments

Comments
 (0)