diff --git a/lib/geocoder.rb b/lib/geocoder.rb index be59577ad0c5d2006ee3f46c0aa24133b46f6b75..76f5ec20cc01a26f4ce05ca73516ce786a6ac815 100644 --- a/lib/geocoder.rb +++ b/lib/geocoder.rb @@ -57,7 +57,7 @@ module Geocoder # All street address lookups, default first. # def street_lookups - [:google, :google_premier, :yahoo, :bing, :geocoder_ca, :yandex, :nominatim,:mapquest] + [:google, :google_premier, :yahoo, :bing, :geocoder_ca, :yandex, :nominatim, :mapquest, :test] end ## diff --git a/lib/geocoder/configuration.rb b/lib/geocoder/configuration.rb index 49c4c5449000a46f19da1f1dcf5a92b1ff5d59d1..7bbe787daa8125d6597d5249962ed64ed6ea4688 100644 --- a/lib/geocoder/configuration.rb +++ b/lib/geocoder/configuration.rb @@ -99,5 +99,6 @@ module Geocoder instance.set_defaults end end + end end diff --git a/lib/geocoder/lookups/test.rb b/lib/geocoder/lookups/test.rb new file mode 100644 index 0000000000000000000000000000000000000000..e06171c9dbc96a4ce03a54b2832c7262efa95b33 --- /dev/null +++ b/lib/geocoder/lookups/test.rb @@ -0,0 +1,32 @@ +require 'geocoder/lookups/base' +require 'geocoder/results/test' + +module Geocoder + module Lookup + class Test < Base + + def self.add_stub(query, results) + stubs[query] = results + end + + def self.read_stub(query) + stubs.fetch(query) { raise ArgumentError, "unknown stub request #{query}" } + end + + def self.stubs + @stubs ||= {} + end + + def self.reset + @stubs = {} + end + + private + + def results(query, reverse = false) + Geocoder::Lookup::Test.read_stub(query) + end + + end + end +end diff --git a/lib/geocoder/results/test.rb b/lib/geocoder/results/test.rb new file mode 100644 index 0000000000000000000000000000000000000000..d029d1a71b5b8418a5fcf2d0eec6f3c08e565042 --- /dev/null +++ b/lib/geocoder/results/test.rb @@ -0,0 +1,29 @@ +require 'geocoder/results/base' + +module Geocoder + module Result + class Test < Base + + def address + @data['address'] + end + + def state + @data['state'] + end + + def state_code + @data['state_code'] + end + + def country + @data['country'] + end + + def country_code + @data['country_code'] + end + + end + end +end diff --git a/test/test_mode_test.rb b/test/test_mode_test.rb new file mode 100644 index 0000000000000000000000000000000000000000..ec8b4db1504a3efeea1bb4db8ad34d91bbe9ddc8 --- /dev/null +++ b/test/test_mode_test.rb @@ -0,0 +1,52 @@ +require 'test_helper' +require 'geocoder/lookups/test' + +class TestModeTest < Test::Unit::TestCase + + def setup + @_original_lookup = Geocoder::Configuration.lookup + end + + def teardown + Geocoder::Lookup::Test.reset + Geocoder::Configuration.lookup = @_original_lookup + end + + def test_search_with_known_stub + Geocoder::Configuration.lookup = :test + attributes = { + 'latitude' => 40.7143528, + 'longitude' => -74.0059731, + 'address' => 'New York, NY, USA', + 'state' => 'New York', + 'state_code' => 'NY', + 'country' => 'United States', + 'country_code' => 'US', + } + coordinates = [attributes['latitude'], attributes['longitude']] + + Geocoder::Lookup::Test.add_stub("New York, NY", [attributes]) + + results = Geocoder.search("New York, NY") + assert_equal 1, results.size + + result = results.first + assert_equal coordinates, result.coordinates + assert_equal attributes['latitude'], result.latitude + assert_equal attributes['longitude'], result.longitude + assert_equal attributes['address'], result.address + assert_equal attributes['state'], result.state + assert_equal attributes['state_code'], result.state_code + assert_equal attributes['country'], result.country + assert_equal attributes['country_code'], result.country_code + end + + def test_search_with_unknown_stub + Geocoder::Configuration.lookup = :test + + assert_raise ArgumentError do + Geocoder.search("New York, NY") + end + end + +end