50 lines
1.7 KiB
Ruby
50 lines
1.7 KiB
Ruby
|
require 'open3'
|
||
|
require_relative 'factories/pg_connection'
|
||
|
require_relative '../lib/internal_geocoder.rb'
|
||
|
require_relative '../../../spec/rspec_configuration.rb'
|
||
|
|
||
|
describe CartoDB::InternalGeocoder::Geocoder do
|
||
|
before do
|
||
|
conn = CartoDB::Importer2::Factories::PGConnection.new
|
||
|
@db = conn.connection
|
||
|
@pg_options = conn.pg_options
|
||
|
end
|
||
|
|
||
|
let(:default_params) { { connection: @db, internal: { username: 'geocoding' }, kind: 'admin0', geometry_type: 'polygon' } }
|
||
|
|
||
|
describe '#download_results' do
|
||
|
before do
|
||
|
# Avoid issues on some machines if postgres system account can't read fixtures subfolder for the COPY
|
||
|
filename = 'adm0.csv'
|
||
|
stdout, stderr, status = Open3.capture3("cp #{path_to(filename)} /tmp/#{filename}")
|
||
|
raise if stderr != ''
|
||
|
load_csv "/tmp/#{filename}", 'adm0'
|
||
|
end
|
||
|
|
||
|
after do
|
||
|
@db.drop_table 'adm0'
|
||
|
end
|
||
|
|
||
|
it "generates a csv with geocoded data" do
|
||
|
ig = CartoDB::InternalGeocoder.new(default_params.merge(table_name: 'adm0', formatter: 'geo_string'))
|
||
|
ig.ensure_georef_status_colummn_valid
|
||
|
results = ig.download_results
|
||
|
`wc -l #{results} 2>&1`.to_i.should eq 11
|
||
|
ig.processed_rows.should eq 11
|
||
|
end
|
||
|
end #run
|
||
|
|
||
|
def path_to(filepath = '')
|
||
|
File.expand_path(
|
||
|
File.join(File.dirname(__FILE__), "../spec/fixtures/#{filepath}")
|
||
|
)
|
||
|
end #path_to
|
||
|
|
||
|
def load_csv(path , table_name)
|
||
|
@db.run("DROP TABLE IF EXISTS #{table_name}")
|
||
|
@db.run("CREATE TABLE #{table_name} (the_geom geometry, cartodb_id integer, geo_string text)")
|
||
|
@db.run("COPY #{Sequel.lit(table_name)}(cartodb_id, geo_string) FROM '#{path}' DELIMITER ',' CSV")
|
||
|
end # create_table
|
||
|
|
||
|
end # CartoDB::GeocoderCache
|