jam-cloud/ruby/spec/jam_ruby/models/geo_ip_locations_spec.rb

107 lines
4.1 KiB
Ruby

require 'spec_helper'
describe GeoIpLocations do
include UsesTempFiles
GEOIPCITY_LOCATIONS = 'geo_ip_locations.csv'
it "count" do GeoIpLocations.count.should == 16 end
before(:all) do
create_phony_database
end
let(:first) { GeoIpLocations.find_by_locid(17192) }
let(:second) { GeoIpLocations.find_by_locid(1539) }
let(:third) { GeoIpLocations.find_by_locid(999999) } # bogus
describe "first" do
it "first" do first.should_not be_nil end
it "first.locid" do first.locid.should == 17192 end
it "first.countrycode" do first.countrycode.should eql('US') end
it "first.region" do first.region.should eql('TX') end
it "first.city" do first.city.should eql('Austin') end
it "first.latitude" do first.latitude.should == 30.2076 end
it "first.longitude" do first.longitude.should == -97.8587 end
end
describe "second" do
it "second" do first.should_not be_nil end
it "second.locid" do second.locid.should == 1539 end
it "second.countrycode" do second.countrycode.should eql('US') end
it "second.region" do second.region.should eql('WA') end
it "second.city" do second.city.should eql('Seattle') end
it "second.latitude" do second.latitude.should == 47.6103 end
it "second.longitude" do second.longitude.should == -122.3341 end
end
it "third" do third.should be_nil end
describe "import_from_max_mind" do
in_directory_with_file(GEOIPCITY_LOCATIONS)
let(:geo_ip_city_locations_data) {tiny_maxmind_dataset[:geo_ip_city_134_locations]}
before(:each) do
content_for_file("Copyright (c) 2012 MaxMind LLC. All Rights Reserved.\n" +
"locId,country,region,city,postalCode,latitude,longitude,metroCode,areaCode\n" +
to_csv(geo_ip_city_locations_data))
create_phony_database
end
after(:all) do
# anything that calls after_maxmind_import seems to break transactions (DatabaseCleaner)
create_phony_database
end
it "succeeds" do
GeoIpLocations.import_from_max_mind(file: GEOIPCITY_LOCATIONS)
result = GeoIpLocations.connection.execute("SELECT * FROM geoiplocations_copied")
result.ntuples.should == 3
row1 = geo_ip_city_locations_data[0]
result[0]['locid'].to_i.should == row1[GEOIPLOCATIONS_LOCID_INDEX]
result[0]['countrycode'].should == row1[GEOIPLOCATIONS_COUNTRY_INDEX]
result[0]['region'].should == row1[GEOIPLOCATIONS_REGION_INDEX]
result[0]['city'].should == row1[GEOIPLOCATIONS_CITY_INDEX]
result[0]['postalcode'].should == row1[GEOIPLOCATIONS_POSTALCODE_INDEX]
result[0]['latitude'].to_f.should == row1[GEOIPLOCATIONS_LATITUDE_INDEX]
result[0]['longitude'].to_f.should == row1[GEOIPLOCATIONS_LONGITUDE_INDEX]
result[0]['metrocode'].to_i.should == row1[GEOIPLOCATIONS_METROCODE_INDEX]
result[0]['areacode'].to_i.should == row1[GEOIPLOCATIONS_AREACODE_INDEX]
result[0]['geog'].should_not be_nil
list_indexes('geoiplocations_copied').should =~ [GeoIpLocations::COPIED_PRIMARY_KEY_NAME, GeoIpLocations::COPIED_GEOIPLOCATIONS_INDEX_NAME]
# confirm that the cities table also got copied
result = GeoIpLocations.connection.execute('SELECT * FROM cities_copied')
result.ntuples.should == 1
result[0]['city'].should == row1[GEOIPLOCATIONS_CITY_INDEX]
result[0]['region'].should == row1[GEOIPLOCATIONS_REGION_INDEX]
result[0]['countrycode'].should == row1[GEOIPLOCATIONS_COUNTRY_INDEX]
list_indexes('cities_copied').should =~ []
# verify we can swap out tables
GeoIpLocations.after_maxmind_import
table_exists?('geoiplocations_copied').should be_false
result = GeoIpLocations.connection.execute("SELECT * FROM geoiplocations")
result.ntuples.should == 3
list_indexes('geoiplocations').should =~ [GeoIpLocations::PRIMARY_KEY_NAME, GeoIpLocations::GEOIPLOCATIONS_INDEX_NAME]
table_exists?('cities_copied').should be_false
result = GeoIpLocations.connection.execute("SELECT * FROM cities")
result.ntuples.should == 1
list_indexes('cities').should =~ []
end
end
end