Skip to content

Commit a9d10cc

Browse files
committed
Merge pull request #125 from intercom/jo/raise-on-html-response
raise errors on html response
2 parents b694545 + dc11221 commit a9d10cc

File tree

3 files changed

+30
-33
lines changed

3 files changed

+30
-33
lines changed

lib/intercom/request.rb

+19-5
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,8 @@ def execute(target_base_url=nil)
6262
begin
6363
response = http.request(net_http_method)
6464
set_rate_limit_details(response)
65-
decoded = decode(response['content-encoding'], response.body)
66-
unless decoded.strip.empty?
67-
parsed_body = JSON.parse(decoded)
68-
raise_application_errors_on_failure(parsed_body, response.code.to_i) if parsed_body['type'] == 'error.list'
69-
end
65+
decoded_body = decode_body(response)
66+
parsed_body = parse_body(decoded_body, response)
7067
raise_errors_on_failure(response)
7168
parsed_body
7269
rescue Timeout::Error
@@ -77,6 +74,23 @@ def execute(target_base_url=nil)
7774
raise Intercom::ServiceConnectionError.new('Failed to connect to service [connection attempt timed out]')
7875
end
7976
end
77+
78+
def decode_body(response)
79+
decode(response['content-encoding'], response.body)
80+
end
81+
82+
def parse_body(decoded_body, response)
83+
parsed_body = nil
84+
unless decoded_body.strip.empty?
85+
begin
86+
parsed_body = JSON.parse(decoded_body)
87+
rescue JSON::ParserError => e
88+
raise_errors_on_failure(response)
89+
end
90+
raise_application_errors_on_failure(parsed_body, response.code.to_i) if parsed_body['type'] == 'error.list'
91+
end
92+
parsed_body
93+
end
8094

8195
def set_rate_limit_details(response)
8296
rate_limit_details = {}

spec/unit/intercom/request_spec.rb

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
require 'spec_helper'
2+
require 'ostruct'
3+
4+
describe 'Intercom::Request' do
5+
it 'raises an error when a html error page rendered' do
6+
response = OpenStruct.new(:code => 500)
7+
req = Intercom::Request.new('path/', 'GET')
8+
proc {req.parse_body('<html>somethjing</html>', response)}.must_raise(Intercom::ServerError)
9+
end
10+
end

spec/unit/intercom/user_spec.rb

+1-28
Original file line numberDiff line numberDiff line change
@@ -219,32 +219,5 @@
219219
it "returns the total number of users" do
220220
Intercom::Count.expects(:user_count).returns('count_info')
221221
Intercom::User.count
222-
end
223-
224-
##TODO: Investigate
225-
#it "converts company created_at values to unix timestamps" do
226-
# time = Time.now
227-
228-
# user = Intercom::User.new("companies" => [
229-
# { "created_at" => time },
230-
# { "created_at" => time.to_i }
231-
# ])
232-
233-
# as_hash = user.to_hash
234-
# require 'ruby-debug' ; debugger
235-
# first_company_as_hash = as_hash["companies"][0]
236-
# second_company_as_hash = as_hash["companies"][1]
237-
238-
# first_company_as_hash["created_at"].must_equal time.to_i
239-
# second_company_as_hash["created_at"].must_equal time.to_i
240-
#end
241-
242-
# it "tracks events" do
243-
# user = Intercom::User.new("email" => "[email protected]", :user_id => "12345", :created_at => Time.now, :name => "Jim Bob")
244-
# Intercom::Event.expects(:create).with(:event_name => 'registration', :user => user)
245-
# event = user.track_event('registration')
246-
247-
# Intercom::Event.expects(:create).with(:event_name => 'another', :user => user, :created_at => 1391691571)
248-
# event = user.track_event("another", {:created_at => 1391691571})
249-
# end
222+
end
250223
end

0 commit comments

Comments
 (0)