diff --git a/lib/geocoder/lookups/base.rb b/lib/geocoder/lookups/base.rb index 115f914db6ed08cdd309815da0189023d70d8a41..6d1a75abd962ddc272886a201a55e139986adc78 100644 --- a/lib/geocoder/lookups/base.rb +++ b/lib/geocoder/lookups/base.rb @@ -225,9 +225,15 @@ module Geocoder end def check_response_for_errors!(response) - if response.code.to_i == 401 + if response.code.to_i == 400 + raise_error(Geocoder::InvalidRequest) || + warn("Geocoding API error: 400 Invalid Request") + elsif response.code.to_i == 401 raise_error(Geocoder::RequestDenied) || warn("Geocoding API error: 401 Unauthorized") + elsif response.code.to_i == 402 + raise_error(Geocoder::OverQueryLimitError) || + warn("Geocoding API error: 402 Forbidden") end end diff --git a/test/unit/lookup_test.rb b/test/unit/lookup_test.rb index 5ece0de4b2c6936aecbbbdf81dafb10712e6b94f..1eb249f78fc642ab8c0661366a61abdfe70834de 100644 --- a/test/unit/lookup_test.rb +++ b/test/unit/lookup_test.rb @@ -56,7 +56,32 @@ class LookupTest < GeocoderTestCase end end - def test_raises_exception_on_401_response + def test_raises_exception_on_error_http_status + error_statuses = { + '400' => Geocoder::InvalidRequest, + '401' => Geocoder::RequestDenied, + '402' => Geocoder::OverQueryLimitError + } + Geocoder.configure(always_raise: error_statuses.values) + error_statuses.each do |code, err| + assert_raises err do + lookup = Geocoder::Lookup.get(:smarty_streets) + response = MockHttpResponse.new(code: code.to_i) + lookup.send(:check_response_for_errors!, response) + end + end + end + + def test_raises_exception_on_401_response + Geocoder.configure(always_raise: [Geocoder::RequestDenied]) + assert_raises Geocoder::RequestDenied do + lookup = Geocoder::Lookup.get(:smarty_streets) + response = MockHttpResponse.new(code: 401) + lookup.send(:check_response_for_errors!, response) + end + end + + def test_raises_exception_on_402_response Geocoder.configure(always_raise: [Geocoder::RequestDenied]) assert_raises Geocoder::RequestDenied do lookup = Geocoder::Lookup.get(:smarty_streets)