diff --git a/.travis.yml b/.travis.yml index 06bf19c..3b1da1b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ sudo: false language: ruby rvm: - - 2.4.2 + - 2.6.0 before_install: gem install bundler -v 1.16.1 diff --git a/lib/bitcoiner/client.rb b/lib/bitcoiner/client.rb index cfcbca1..f255324 100644 --- a/lib/bitcoiner/client.rb +++ b/lib/bitcoiner/client.rb @@ -71,10 +71,11 @@ def parse_body(response) if response.success? JSON.parse(response.body) else - error_message = %i[code return_code].map do |attr| - "#{attr}: `#{response.send(attr)}`" - end.join(', ') - raise JSONRPCError, "unsuccessful response; #{error_message}" + error_messages = %i[code return_code].each_with_object({}) do |attr, hash| + hash[attr] = response.send(attr) + end + error_messages[:body] = response.body + raise JSONRPCError, error_messages.map {|k, v| "#{k}: `#{v}`"}.join("; ") end end end diff --git a/test/client_test.rb b/test/client_test.rb index 0ed920f..c700a43 100644 --- a/test/client_test.rb +++ b/test/client_test.rb @@ -64,8 +64,11 @@ class ClientTest < Minitest::Test context 'response is not successful' do setup do response = Typhoeus::Response.new( - code: 0, - return_code: :couldnt_connect + code: 500, + return_code: :ok, + # response supposedly includes body + # https://github.com/bitcoin/bitcoin/issues/12673#issuecomment-372334718 + body: {some: "body"}.to_json, ) Typhoeus.stub('http://127.0.0.1:8332', userpwd: "testuser:testpass"). and_return(response) @@ -76,12 +79,16 @@ class ClientTest < Minitest::Test end should 'raise JSONRPCError' do - assert_raises( - Bitcoiner::Client::JSONRPCError, - 'unsuccessful response; code: `0`, return_code: `couldnt_connect`' - ) do + error = assert_raises(Bitcoiner::Client::JSONRPCError) do @bcd.request('listtransactions') end + + expected_error_message = [ + 'code: `500`', + 'return_code: `ok`', + 'body: `{"some":"body"}`', + ].join("; ") + assert_equal expected_error_message, error.message end end