diff options
| -rw-r--r-- | lib/tom_tom/matrix.rb | 19 | ||||
| -rw-r--r-- | spec/lib/tom_tom/matrix_spec.rb | 64 | 
2 files changed, 63 insertions, 20 deletions
| diff --git a/lib/tom_tom/matrix.rb b/lib/tom_tom/matrix.rb index 40191aa56..d0b476d84 100644 --- a/lib/tom_tom/matrix.rb +++ b/lib/tom_tom/matrix.rb @@ -24,14 +24,12 @@ module TomTom          req.body = build_request_body(points)        end -      matrix_json = JSON.parse(response.body) - -      check_for_error_response(matrix_json) +      check_for_error_response(response)        extract_costs_to_way_costs!(          way_costs,          points_with_ids, -        matrix_json +        JSON.parse(response.body)        )      end @@ -84,9 +82,16 @@ module TomTom        })      end -    def check_for_error_response(matrix_json) -      if matrix_json.has_key?('error') -        raise RemoteError, matrix_json['error']['description'] +    def check_for_error_response(response) +      if response.status != 200 +        raise RemoteError, "status: #{response.status}, body: #{response.body}" +      end + +      json = JSON.parse(response.body) + +      if json.has_key?('error') +        raise RemoteError, +          "status: #{response.status}, message: #{json['error']['description']}"        end      end diff --git a/spec/lib/tom_tom/matrix_spec.rb b/spec/lib/tom_tom/matrix_spec.rb index 7000b56c8..6564b82fd 100644 --- a/spec/lib/tom_tom/matrix_spec.rb +++ b/spec/lib/tom_tom/matrix_spec.rb @@ -151,29 +151,67 @@ RSpec.describe TomTom::Matrix do    describe "#check_for_error_response" do      it "raises a RemoteError when an 'error' key is present in the response" do -      response_body = { -        'formatVersion' => '0.0.1', -        'error' => { -          'description' => 'Output format: csv is unsupported.' -        } -      } +      response = double( +        'response', +        status: 200, +        body: JSON.dump({ +          'formatVersion' => '0.0.1', +          'error' => { +            'description' => 'Output format: csv is unsupported.' +          } +        }) +      ) + +      expect { +        matrix.check_for_error_response(response) +      }.to raise_error( +        TomTom::Matrix::RemoteError, +        "status: #{response.status}, message: Output format: csv is unsupported." +      ) +    end + +    it "raises a RemoteError when response status is not 200" do +      response = double( +        'response', +        status: 403, +        body: '<h1>Developer Inactive</h1>' +      )        expect { -        matrix.check_for_error_response(response_body) +        matrix.check_for_error_response(response)        }.to raise_error(          TomTom::Matrix::RemoteError, -        'Output format: csv is unsupported.' +        "status: #{response.status}, body: <h1>Developer Inactive</h1>" +      ) +    end + +    it "doesn't raise an error when response status is 200" do +      response = double( +        'response', +        status: 200, +        body: JSON.dump({ +          'formatVersion' => '0.0.1', +          'matrix' => [] +        })        ) + +      expect { +        matrix.check_for_error_response(response) +      }.not_to raise_error      end      it "doesn't raise errors with a normal response" do -      response_body = { -        'formatVersion' => '0.0.1', -        'matrix' => [] -      } +      response = double( +        'response', +        status: 200, +        body: JSON.dump({ +          'formatVersion' => '0.0.1', +          'matrix' => [] +        }) +      )        expect { -        matrix.check_for_error_response(response_body) +        matrix.check_for_error_response(response)        }.to_not raise_error      end    end | 
