lib/calabash-cucumber/connection_helpers.rb in calabash-cucumber-0.16.4 vs lib/calabash-cucumber/connection_helpers.rb in calabash-cucumber-0.17.0
- old
+ new
@@ -1,10 +1,12 @@
require 'calabash-cucumber/connection'
module Calabash
module Cucumber
+ class ResponseError < RuntimeError ; end
+
# @!visibility private
module ConnectionHelpers
# @!visibility private
def http(*args)
@@ -14,8 +16,55 @@
# @!visibility private
def connection
Calabash::Cucumber::Connection.instance
end
+ # @!visibility private
+ def response_body_to_hash(body)
+ if body.nil? || body == ""
+ raise ResponseError,
+ "Server replied with an empty response. Your app has probably crashed"
+ end
+
+ begin
+ hash = JSON.parse(body)
+ rescue TypeError, JSON::ParserError => e
+ raise ResponseError,
+%Q{Could not parse server response '#{body}':
+
+#{e}
+
+This usually means your app has crashed.
+}
+ end
+
+ outcome = hash['outcome']
+
+ case outcome
+ when 'FAILURE'
+ reason = hash['reason']
+ if reason.nil? || reason.empty?
+ hash['reason'] = 'Server provided no reason.'
+ end
+
+ details = hash['details']
+ if details.nil? || details.empty?
+ hash['details'] = 'Server provided no details.'
+ end
+
+ when 'SUCCESS'
+ if !hash.has_key?('results')
+ raise ResponseError,
+%Q{Server responded with '#{outcome}'
+but response #{hash} does not contain 'results' key
+}
+ end
+ else
+ raise ResponseError,
+%Q{Server responded with an invalid outcome: '#{hash["outcome"]}'}
+ end
+ hash
+ end
+
end
end
-end
\ No newline at end of file
+end