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..4d1ad3d09f7a935483dd3c0e3c267cce8865ad0b 100644 --- a/test/unit/lookup_test.rb +++ b/test/unit/lookup_test.rb @@ -56,12 +56,19 @@ class LookupTest < GeocoderTestCase 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) + 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