2021-02-01 17:58:25 +00:00
|
|
|
=begin
|
2014-02-23 23:24:25 +00:00
|
|
|
require 'spec_helper'
|
|
|
|
|
|
|
|
|
|
describe GeoIpLocations do
|
|
|
|
|
|
2014-07-20 02:11:16 +00:00
|
|
|
include UsesTempFiles
|
|
|
|
|
|
|
|
|
|
GEOIPCITY_LOCATIONS = 'geo_ip_locations.csv'
|
2014-02-23 23:24:25 +00:00
|
|
|
|
2014-03-03 05:16:48 +00:00
|
|
|
it "count" do GeoIpLocations.count.should == 16 end
|
2014-02-23 23:24:25 +00:00
|
|
|
|
2014-07-20 02:11:16 +00:00
|
|
|
|
|
|
|
|
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
|
2014-02-23 23:24:25 +00:00
|
|
|
|
2014-03-03 05:16:48 +00:00
|
|
|
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
|
2014-02-23 23:24:25 +00:00
|
|
|
end
|
|
|
|
|
|
2014-03-03 05:16:48 +00:00
|
|
|
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
|
2014-02-23 23:24:25 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it "third" do third.should be_nil end
|
2014-07-20 02:11:16 +00:00
|
|
|
|
|
|
|
|
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
|
2014-02-23 23:24:25 +00:00
|
|
|
end
|
2021-02-01 17:58:25 +00:00
|
|
|
=end
|