diff --git a/lib/geocoder/lookups/yandex.rb b/lib/geocoder/lookups/yandex.rb index e999a3786402c2179411efce4e638a9c09339f1a..25c31015f42c85b5c8edbdecbe781c09e4bdcd7c 100644 --- a/lib/geocoder/lookups/yandex.rb +++ b/lib/geocoder/lookups/yandex.rb @@ -8,6 +8,10 @@ module Geocoder::Lookup def results(query, reverse = false) return [] unless doc = fetch_data(query, reverse) + if err = doc['error'] + warn "Yandex Geocoding API error: #{err['status']} (#{err['message']})." + return [] + end if doc = doc['response']['GeoObjectCollection'] meta = doc['metaDataProperty']['GeocoderResponseMetaData'] return meta['found'].to_i > 0 ? doc['featureMember'] : [] diff --git a/test/fixtures/yandex_invalid_key.json b/test/fixtures/yandex_invalid_key.json new file mode 100644 index 0000000000000000000000000000000000000000..c6174d7fd4b82f65904a36b601df7b0d69ddd12b --- /dev/null +++ b/test/fixtures/yandex_invalid_key.json @@ -0,0 +1 @@ +{"error":{"status":401,"message":"invalid key"}} diff --git a/test/geocoder_test.rb b/test/geocoder_test.rb index 264647e2d1b3c7102c1f613705c2f656399e9c0a..1d18853eb95c29d420d14b4cbe7f2b6eaf31fef2 100644 --- a/test/geocoder_test.rb +++ b/test/geocoder_test.rb @@ -369,6 +369,17 @@ class GeocoderTest < Test::Unit::TestCase end + # --- Yandex --- + + def test_yandex_with_invalid_key + # keep test output clean: suppress timeout warning + orig = $VERBOSE; $VERBOSE = nil + Geocoder::Configuration.lookup = :yandex + assert_equal [], Geocoder.search("invalid key") + $VERBOSE = orig + end + + # --- Geocoder.ca --- def test_geocoder_ca_result_components diff --git a/test/test_helper.rb b/test/test_helper.rb index e638e780f36e8891a77b9471e0d6507f7f9022a5..958fad52f4b44f275cf9e746ddedfd5b6102f4b0 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -75,7 +75,10 @@ module Geocoder private #----------------------------------------------------------------- def fetch_raw_data(query, reverse = false) raise TimeoutError if query == "timeout" - file = query == "no results" ? :no_results : :madison_square_garden + file = case query + when "no results"; :no_results + else :madison_square_garden + end read_fixture "yahoo_#{file}.json" end end @@ -84,7 +87,11 @@ module Geocoder private #----------------------------------------------------------------- def fetch_raw_data(query, reverse = false) raise TimeoutError if query == "timeout" - file = query == "no results" ? :no_results : :kremlin + file = case query + when "no results"; :no_results + when "invalid key"; :invalid_key + else :kremlin + end read_fixture "yandex_#{file}.json" end end @@ -96,7 +103,10 @@ module Geocoder if reverse read_fixture "geocoder_ca_reverse.json" else - file = query == "no results" ? :no_results : :madison_square_garden + file = case query + when "no results"; :no_results + else :madison_square_garden + end read_fixture "geocoder_ca_#{file}.json" end end