require File.dirname(__FILE__) + '/abstract_unit' class GeocodableModelTest < Test::Unit::TestCase fixtures :groups, :geocodes def setup Geocode.api_key = "ABQIAAAAHBK68s8-wW6_3ouSsIl9SxT2yXp_ZAY8_ufC3CFXhHIE1NvwkxSzkGAuNGRxzIEnBAIwTEwsN2oVUA" end def test_geocode_not_created_for_blank_address assert_nil Group.create(:name => 'Oranges').geocode end def test_geocode_created_if_address_present assert_not_nil Group.create(:name => 'Walking', :address => 'somewhere').geocode end def test_geocode_removed_if_blank_address assert_not_nil groups(:ruby).geocode assert_difference "Geocode.count", -1 do groups(:ruby).update_attributes!(:address => '') end assert_nil groups(:ruby).geocode end def test_geocode_blanked_if_address_changed assert_not_nil groups(:ruby).geocode groups(:ruby).update_attributes!(:address => '100 Wing Wong Way') [:latitude, :longitude, :accuracy, :geocoded_address, :geocoding_result].each do |attribute| assert groups(:ruby).geocode[attribute].blank? end end def test_geocode_not_blanked_when_setting_same_address assert_not_nil groups(:ruby).geocode groups(:ruby).update_attributes!(:address => groups(:ruby).address) [:latitude, :longitude, :accuracy, :geocoded_address, :geocoding_result].each do |attribute| assert !groups(:ruby).geocode[attribute].blank? end end def test_geocoding group = Group.create(:name => 'Test', :address => '1 Woodside Common, Westmorland, Christchurch, New Zealand') Geocode.populate g = group.geocode(:reload) assert_equal -43.5814, g.latitude assert_equal 172.605, g.longitude assert_equal 8, g.accuracy assert_equal '1 Woodside Common, Westmorland, 8025, New Zealand', g.geocoded_address assert_equal Date.today, g.last_attempted_at.to_date end def test_geocoding_tries_multiple_addresses house = House.create! Geocode.populate g = house.geocode(:reload) assert_equal -43.5202, g.latitude assert_equal 172.574, g.longitude assert_equal 8, g.accuracy assert_equal '27 Newbridge Pl, Ilam, 8041, New Zealand', g.geocoded_address assert_equal Date.today, g.last_attempted_at.to_date end def test_geocoding_uses_first_good_address house = House.create!(:address => '82 Spencer Street, Christchurch') Geocode.populate g = house.geocode(:reload) assert_equal "82 Spencer St, Addington, 8024, New Zealand", g.geocoded_address end def test_latitude_longitude_accessors assert_equal -43.5158, groups(:ruby).latitude assert_equal 172.578, groups(:ruby).longitude end def test_to_location assert_equal GoogleGeocode::Location.new(-43.5158, 172.578, "192 Ilam Rd, Ilam, Canterbury 8004, New Zealand", 8), geocodes(:ruby).to_location end def test_destroying_model_should_destroy_geocode assert_nothing_raised { geocodes(:ruby).reload } groups(:ruby).destroy assert_raises(ActiveRecord::RecordNotFound) { geocodes(:ruby).reload } end end