test/test_google_geocoder.rb in geokit-1.8.5 vs test/test_google_geocoder.rb in geokit-1.9.0
- old
+ new
@@ -1,32 +1,29 @@
# -*- coding: utf-8 -*-
require File.join(File.dirname(__FILE__), 'helper')
class GoogleGeocoderTest < BaseGeocoderTest #:nodoc: all
-
def setup
super
@full_address = '100 Spear St Apt. 5, San Francisco, CA, 94105-1522, US'
@full_address_short_zip = '100 Spear St Apt. 5, San Francisco, CA, 94105, US'
- @google_full_hash = {:street_address=>"100 Spear St Apt. 5", :city=>"San Francisco", :state=>"CA", :zip=>"94105", :country_code=>"US"}
- @google_city_hash = {:city=>"San Francisco", :state=>"CA"}
+ @google_full_hash = {street_address: '100 Spear St Apt. 5', city: 'San Francisco', state: 'CA', zip: '94105', country_code: 'US'}
+ @google_city_hash = {city: 'San Francisco', state: 'CA'}
@google_full_loc = Geokit::GeoLoc.new(@google_full_hash)
@google_city_loc = Geokit::GeoLoc.new(@google_city_hash)
end
-
# Example from:
# https://developers.google.com/maps/documentation/business/webservices#signature_examples
def test_google_signature
cryptographic_key = 'vNIXE0xscrmjlyV-12Nj_BvUPaw='
query_string = '/maps/api/geocode/json?address=New+York&sensor=false&client=clientID'
signature = Geokit::Geocoders::GoogleGeocoder.send(:sign_gmap_bus_api_url, query_string, cryptographic_key)
assert_equal 'KrU1TzVQM7Ur0i8i7K3huiw3MsA=', signature
end
-
# Example from:
# https://developers.google.com/maps/documentation/business/webservices#signature_examples
def test_google_signature_and_url
Geokit::Geocoders::GoogleGeocoder.client_id = 'clientID'
Geokit::Geocoders::GoogleGeocoder.cryptographic_key = 'vNIXE0xscrmjlyV-12Nj_BvUPaw='
@@ -50,209 +47,246 @@
assert_equal 'http://maps.google.com/maps/api/geocode/json?sensor=false&address=New+York', url
end
def test_google_full_address
VCR.use_cassette('google_full_short') do
- url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=#{Geokit::Inflector::url_escape(@address)}"
+ url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=#{Geokit::Inflector.url_escape(@address)}"
TestHelper.expects(:last_url).with(url)
- res=Geokit::Geocoders::GoogleGeocoder.geocode(@address)
- assert_equal "CA", res.state
- assert_equal "San Francisco", res.city
+ res = Geokit::Geocoders::GoogleGeocoder.geocode(@address)
+ assert_equal 'CA', res.state
+ assert_equal 'San Francisco', res.city
assert_array_in_delta [37.7749295, -122.4194155], res.to_a # slightly dif from yahoo
assert res.is_us?
- assert_equal "San Francisco, CA, USA", res.full_address #slightly different from yahoo
- assert_equal "google", res.provider
+ assert_equal 'San Francisco, CA, USA', res.full_address # slightly different from yahoo
+ assert_equal 'google', res.provider
end
end
def test_google_full_address_with_geo_loc
- VCR.use_cassette('google_full') do
- url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=#{Geokit::Inflector::url_escape(@full_address_short_zip)}"
- TestHelper.expects(:last_url).with(url)
- res=Geokit::Geocoders::GoogleGeocoder.geocode(@google_full_loc)
- assert_equal "CA", res.state
- assert_equal "San Francisco", res.city
- assert_array_in_delta [37.7921509, -122.394], res.to_a # slightly dif from yahoo
- assert res.is_us?
- assert_equal "100 Spear Street #5, San Francisco, CA 94105, USA", res.full_address #slightly different from yahoo
- assert_equal "google", res.provider
- end
- end
+ VCR.use_cassette('google_full') do
+ url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=#{Geokit::Inflector.url_escape(@full_address_short_zip)}"
+ TestHelper.expects(:last_url).with(url)
+ res = Geokit::Geocoders::GoogleGeocoder.geocode(@google_full_loc)
+ assert_equal 'CA', res.state
+ assert_equal 'San Francisco', res.city
+ assert_array_in_delta [37.7921509, -122.394], res.to_a # slightly dif from yahoo
+ assert res.is_us?
+ assert_equal '100 Spear Street #5, San Francisco, CA 94105, USA', res.full_address # slightly different from yahoo
+ assert_equal 'google', res.provider
+ end
+ end
- def test_google_full_address_accuracy
- VCR.use_cassette('google_full') do
- url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=#{Geokit::Inflector::url_escape(@full_address_short_zip)}"
- TestHelper.expects(:last_url).with(url)
- res=Geokit::Geocoders::GoogleGeocoder.geocode(@google_full_loc)
+ def test_google_full_address_accuracy
+ VCR.use_cassette('google_full') do
+ url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=#{Geokit::Inflector.url_escape(@full_address_short_zip)}"
+ TestHelper.expects(:last_url).with(url)
+ res = Geokit::Geocoders::GoogleGeocoder.geocode(@google_full_loc)
- assert_equal 9, res.accuracy
- end
- end
+ assert_equal 9, res.accuracy
+ end
+ end
- def test_google_city
- VCR.use_cassette('google_city') do
- url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=#{Geokit::Inflector::url_escape(@address)}"
+ def test_google_city
+ VCR.use_cassette('google_city') do
+ url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=#{Geokit::Inflector.url_escape(@address)}"
+ TestHelper.expects(:last_url).with(url)
+ res = Geokit::Geocoders::GoogleGeocoder.do_geocode(@address)
+ assert_nil res.street_address
+ assert_equal 'CA', res.state
+ assert_equal 'San Francisco', res.city
+ assert_equal '37.7749295,-122.4194155', res.ll
+ assert res.is_us?
+ assert_equal 'San Francisco, CA, USA', res.full_address
+ assert_equal 'google', res.provider
+ end
+ end
+
+ def test_google_sublocality
+ @address = '682 prospect place Brooklyn ny 11216'
+ VCR.use_cassette('google_sublocality') do
+ url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=#{Geokit::Inflector.url_escape(@address)}"
TestHelper.expects(:last_url).with(url)
- res=Geokit::Geocoders::GoogleGeocoder.do_geocode(@address)
- assert_nil res.street_address
- assert_equal "CA", res.state
- assert_equal "San Francisco", res.city
- assert_equal "37.7749295,-122.4194155", res.ll
+ res = Geokit::Geocoders::GoogleGeocoder.do_geocode(@address)
+ assert_equal '682 Prospect Place', res.street_address
+ assert_equal 'NY', res.state
+ assert_equal 'Brooklyn', res.city
+ assert_equal '40.6745812,-73.9541582', res.ll
assert res.is_us?
- assert_equal "San Francisco, CA, USA", res.full_address
- assert_equal "google", res.provider
+ assert_equal '682 Prospect Place, Brooklyn, NY 11216, USA', res.full_address
+ assert_equal 'google', res.provider
end
end
- def test_google_city_accuracy
- VCR.use_cassette('google_city') do
- url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=#{Geokit::Inflector::url_escape(@address)}"
- TestHelper.expects(:last_url).with(url)
- res=Geokit::Geocoders::GoogleGeocoder.geocode(@address)
- assert_equal 4, res.accuracy
- end
- end
+ def test_google_city_accuracy
+ VCR.use_cassette('google_city') do
+ url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=#{Geokit::Inflector.url_escape(@address)}"
+ TestHelper.expects(:last_url).with(url)
+ res = Geokit::Geocoders::GoogleGeocoder.geocode(@address)
+ assert_equal 4, res.accuracy
+ end
+ end
- def test_google_city_with_geo_loc
- VCR.use_cassette('google_city') do
- url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=#{Geokit::Inflector::url_escape(@address)}"
- TestHelper.expects(:last_url).with(url)
- res=Geokit::Geocoders::GoogleGeocoder.geocode(@google_city_loc)
- assert_equal "CA", res.state
- assert_equal "San Francisco", res.city
- assert_equal "37.7749295,-122.4194155", res.ll
- assert res.is_us?
- assert_equal "San Francisco, CA, USA", res.full_address
- assert_nil res.street_address
- assert_equal "google", res.provider
- end
- end
+ def test_google_city_with_geo_loc
+ VCR.use_cassette('google_city') do
+ url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=#{Geokit::Inflector.url_escape(@address)}"
+ TestHelper.expects(:last_url).with(url)
+ res = Geokit::Geocoders::GoogleGeocoder.geocode(@google_city_loc)
+ assert_equal 'CA', res.state
+ assert_equal 'San Francisco', res.city
+ assert_equal '37.7749295,-122.4194155', res.ll
+ assert res.is_us?
+ assert_equal 'San Francisco, CA, USA', res.full_address
+ assert_nil res.street_address
+ assert_equal 'google', res.provider
+ end
+ end
- def test_google_suggested_bounds
- VCR.use_cassette('google_full') do
- url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=#{Geokit::Inflector::url_escape(@full_address_short_zip)}"
- TestHelper.expects(:last_url).with(url)
- res = Geokit::Geocoders::GoogleGeocoder.geocode(@google_full_loc)
- assert_instance_of Geokit::Bounds, res.suggested_bounds
- assert_array_in_delta [37.7908019197085, -122.3953489802915], res.suggested_bounds.sw.to_a
- assert_array_in_delta [37.7934998802915, -122.3926510197085], res.suggested_bounds.ne.to_a
- end
- end
+ def test_google_suggested_bounds
+ VCR.use_cassette('google_full') do
+ url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=#{Geokit::Inflector.url_escape(@full_address_short_zip)}"
+ TestHelper.expects(:last_url).with(url)
+ res = Geokit::Geocoders::GoogleGeocoder.geocode(@google_full_loc)
+ assert_instance_of Geokit::Bounds, res.suggested_bounds
+ assert_array_in_delta [37.7908019197085, -122.3953489802915], res.suggested_bounds.sw.to_a
+ assert_array_in_delta [37.7934998802915, -122.3926510197085], res.suggested_bounds.ne.to_a
+ end
+ end
- def test_google_suggested_bounds_url
- bounds = Geokit::Bounds.new(
- Geokit::LatLng.new(33.7036917, -118.6681759),
- Geokit::LatLng.new(34.3373061, -118.1552891)
- )
- url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=Winnetka&bounds=33.7036917%2C-118.6681759%7C34.3373061%2C-118.1552891"
- Geokit::Geocoders::GoogleGeocoder.expects(:call_geocoder_service).with(url)
- Geokit::Geocoders::GoogleGeocoder.geocode('Winnetka', :bias => bounds)
+ def test_google_suggested_bounds_url
+ bounds = Geokit::Bounds.new(
+ Geokit::LatLng.new(33.7036917, -118.6681759),
+ Geokit::LatLng.new(34.3373061, -118.1552891)
+ )
+ url = 'https://maps.google.com/maps/api/geocode/json?sensor=false&address=Winnetka&bounds=33.7036917%2C-118.6681759%7C34.3373061%2C-118.1552891'
+ Geokit::Geocoders::GoogleGeocoder.expects(:call_geocoder_service).with(url)
+ Geokit::Geocoders::GoogleGeocoder.geocode('Winnetka', bias: bounds)
end
- def test_service_unavailable
- response = MockFailure.new
- url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=#{Geokit::Inflector::url_escape(@address)}"
- Geokit::Geocoders::GoogleGeocoder.expects(:call_geocoder_service).with(url).returns(response)
- assert !Geokit::Geocoders::GoogleGeocoder.geocode(@google_city_loc).success
- end
+ def test_service_unavailable
+ response = MockFailure.new
+ url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=#{Geokit::Inflector.url_escape(@address)}"
+ Geokit::Geocoders::GoogleGeocoder.expects(:call_geocoder_service).with(url).returns(response)
+ assert !Geokit::Geocoders::GoogleGeocoder.geocode(@google_city_loc).success
+ end
- def test_multiple_results
- VCR.use_cassette('google_multi') do
- url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=#{Geokit::Inflector.url_escape('via Sandro Pertini 8, Ossona, MI')}"
- TestHelper.expects(:last_url).with(url)
- res=Geokit::Geocoders::GoogleGeocoder.geocode('via Sandro Pertini 8, Ossona, MI')
- assert_equal 5, res.all.size
- res = res.all[0]
- assert_equal "Lombardy", res.state
- assert_equal "Mesero", res.city
- assert_array_in_delta [45.4966218, 8.852694], res.to_a
- assert !res.is_us?
- assert_equal "Via Sandro Pertini, 8, 20010 Mesero Milan, Italy", res.full_address
- assert_equal "8 Via Sandro Pertini", res.street_address
- assert_equal "google", res.provider
+ def test_multiple_results
+ VCR.use_cassette('google_multi') do
+ url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=#{Geokit::Inflector.url_escape('via Sandro Pertini 8, Ossona, MI')}"
+ TestHelper.expects(:last_url).with(url)
+ res = Geokit::Geocoders::GoogleGeocoder.geocode('via Sandro Pertini 8, Ossona, MI')
+ assert_equal 5, res.all.size
+ res = res.all[0]
+ assert_equal 'Lombardy', res.state
+ assert_equal 'Mesero', res.city
+ assert_array_in_delta [45.4966218, 8.852694], res.to_a
+ assert !res.is_us?
+ assert_equal 'Via Sandro Pertini, 8, 20010 Mesero Milan, Italy', res.full_address
+ assert_equal '8 Via Sandro Pertini', res.street_address
+ assert_equal 'google', res.provider
- res = res.all[4]
- assert_equal "Lombardy", res.state
- assert_equal "Ossona", res.city
- assert_array_in_delta [45.5074444, 8.90232], res.to_a
- assert !res.is_us?
- assert_equal "Via S. Pertini, 20010 Ossona Milan, Italy", res.full_address
- assert_equal "Via S. Pertini", res.street_address
- assert_equal "google", res.provider
- end
- end
- #
- def test_reverse_geocode
- VCR.use_cassette('google_reverse_madrid') do
- madrid = Geokit::GeoLoc.new
- madrid.lat, madrid.lng = "40.4167413", "-3.7032498"
- url = "https://maps.google.com/maps/api/geocode/json?sensor=false&latlng=#{Geokit::Inflector::url_escape(madrid.ll)}"
- TestHelper.expects(:last_url).with(url)
- res=Geokit::Geocoders::GoogleGeocoder.do_reverse_geocode(madrid.ll)
+ res = res.all[4]
+ assert_equal 'Lombardy', res.state
+ assert_equal 'Ossona', res.city
+ assert_array_in_delta [45.5074444, 8.90232], res.to_a
+ assert !res.is_us?
+ assert_equal 'Via S. Pertini, 20010 Ossona Milan, Italy', res.full_address
+ assert_equal 'Via S. Pertini', res.street_address
+ assert_equal 'google', res.provider
+ end
+ end
- assert_equal madrid.lat.to_s.slice(1..5), res.lat.to_s.slice(1..5)
- assert_equal madrid.lng.to_s.slice(1..5), res.lng.to_s.slice(1..5)
- assert_equal "ES", res.country_code
- assert_equal "google", res.provider
+ def test_reverse_geocode
+ VCR.use_cassette('google_reverse_madrid') do
+ madrid = Geokit::GeoLoc.new
+ madrid.lat, madrid.lng = '40.4167413', '-3.7032498'
+ url = "https://maps.google.com/maps/api/geocode/json?sensor=false&latlng=#{Geokit::Inflector.url_escape(madrid.ll)}"
+ TestHelper.expects(:last_url).with(url)
+ res = Geokit::Geocoders::GoogleGeocoder.do_reverse_geocode(madrid.ll)
- assert_equal "Madrid", res.city
- assert_equal "Community of Madrid", res.state
+ assert_equal madrid.lat.to_s.slice(1..5), res.lat.to_s.slice(1..5)
+ assert_equal madrid.lng.to_s.slice(1..5), res.lng.to_s.slice(1..5)
+ assert_equal 'ES', res.country_code
+ assert_equal 'google', res.provider
- assert_equal "Spain", res.country
- assert_equal "28013", res.zip
- assert_equal true, res.success
- end
- end
+ assert_equal 'Madrid', res.city
+ assert_equal 'Community of Madrid', res.state
- def test_reverse_geocode_language
- VCR.use_cassette('google_reverse_madrid_es') do
- url = "https://maps.google.com/maps/api/geocode/json?sensor=false&latlng=40.416%2C-3.703&language=es"
- TestHelper.expects(:last_url).with(url)
- language_result = Geokit::Geocoders::GoogleGeocoder.reverse_geocode('40.416,-3.703', :language => 'es')
+ assert_equal 'Spain', res.country
+ assert_equal '28013', res.zip
+ assert_equal true, res.success
+ end
+ end
- assert_equal 'ES', language_result.country_code
- assert_equal 'Madrid', language_result.city
- end
- end
+ def test_reverse_geocode_language
+ VCR.use_cassette('google_reverse_madrid_es') do
+ url = 'https://maps.google.com/maps/api/geocode/json?sensor=false&latlng=40.416%2C-3.703&language=es'
+ TestHelper.expects(:last_url).with(url)
+ language_result = Geokit::Geocoders::GoogleGeocoder.reverse_geocode('40.416,-3.703', language: 'es')
- def test_country_code_biasing
- VCR.use_cassette('google_country_code_biased_result') do
- url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=Syracuse®ion=it"
- TestHelper.expects(:last_url).with(url)
- biased_result = Geokit::Geocoders::GoogleGeocoder.geocode('Syracuse', :bias => 'it')
+ assert_equal 'ES', language_result.country_code
+ assert_equal 'Madrid', language_result.city
+ end
+ end
- assert_equal 'IT', biased_result.country_code
- assert_equal 'Sicilia', biased_result.state
- end
- end
+ def test_language_response
+ VCR.use_cassette('google_language_response_fr') do
+ url = 'https://maps.google.com/maps/api/geocode/json?sensor=false&address=Hanoi&language=FR'
+ TestHelper.expects(:last_url).with(url)
+ language_result = Geokit::Geocoders::GoogleGeocoder.geocode('Hanoi', language: 'FR')
- def test_language_response
- VCR.use_cassette('google_language_response_fr') do
- url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=Hanoi&language=FR"
- TestHelper.expects(:last_url).with(url)
- language_result = Geokit::Geocoders::GoogleGeocoder.geocode('Hanoi', :language => 'FR')
+ assert_equal 'VN', language_result.country_code
+ assert_equal 'Hanoï', language_result.city
+ end
+ end
- assert_equal 'VN', language_result.country_code
- assert_equal 'Hanoï', language_result.city
- end
- end
+ def test_too_many_queries
+ response = MockSuccess.new
+ response.expects(:body).returns %q/{"status": "OVER_QUERY_LIMIT"}/
+ url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=#{Geokit::Inflector.url_escape(@address)}"
+ Geokit::Geocoders::GoogleGeocoder.expects(:call_geocoder_service).with(url).returns(response)
+ assert_raise Geokit::Geocoders::TooManyQueriesError do
+ res = Geokit::Geocoders::GoogleGeocoder.geocode(@address)
+ end
+ end
- def test_too_many_queries
- response = MockSuccess.new
- response.expects(:body).returns %q/{"status": "OVER_QUERY_LIMIT"}/
- url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=#{Geokit::Inflector.url_escape(@address)}"
- Geokit::Geocoders::GoogleGeocoder.expects(:call_geocoder_service).with(url).returns(response)
- assert_raise Geokit::Geocoders::TooManyQueriesError do
- res=Geokit::Geocoders::GoogleGeocoder.geocode(@address)
- end
- end
+ def test_invalid_request
+ response = MockSuccess.new
+ response.expects(:body).returns %q/{"results" : [], "status" : "INVALID_REQUEST"}/
+ url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=#{Geokit::Inflector.url_escape("3961 V\u00EDa Marisol")}"
+ Geokit::Geocoders::GoogleGeocoder.expects(:call_geocoder_service).with(url).returns(response)
+ assert_raise Geokit::Geocoders::GeocodeError do
+ Geokit::Geocoders::GoogleGeocoder.geocode("3961 V\u00EDa Marisol")
+ end
+ end
- def test_invalid_request
- response = MockSuccess.new
- response.expects(:body).returns %q/{"results" : [], "status" : "INVALID_REQUEST"}/
- url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=#{Geokit::Inflector.url_escape("3961 V\u00EDa Marisol")}"
- Geokit::Geocoders::GoogleGeocoder.expects(:call_geocoder_service).with(url).returns(response)
- assert_raise Geokit::Geocoders::GeocodeError do
- Geokit::Geocoders::GoogleGeocoder.geocode("3961 V\u00EDa Marisol")
- end
- end
+ def test_country_code_biasing_toledo
+ VCR.use_cassette('google_country_code_biased_result_toledo') do
+ url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=toledo®ion=es"
+ TestHelper.expects(:last_url).with(url)
+ biased_result = Geokit::Geocoders::GoogleGeocoder.geocode('toledo', :bias => 'es')
+
+ assert_equal 'ES', biased_result.country_code
+ assert_equal 'CM', biased_result.state
+ end
+
+ VCR.use_cassette('google_result_toledo_default_bias') do
+ url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=toledo"
+ TestHelper.expects(:last_url).with(url)
+ biased_result = Geokit::Geocoders::GoogleGeocoder.geocode('toledo')
+
+ assert_equal 'US', biased_result.country_code
+ assert_equal 'OH', biased_result.state
+ end
+ end
+
+ def test_country_code_biasing_orly
+ VCR.use_cassette('google_country_code_biased_result_orly') do
+ url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=orly®ion=fr"
+ TestHelper.expects(:last_url).with(url)
+ biased_result = Geokit::Geocoders::GoogleGeocoder.geocode('orly', :bias => 'fr')
+
+ assert_equal 'FR', biased_result.country_code
+ assert_equal 'Orly, France', biased_result.full_address
+ end
+ end
+
end