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