83 lines
2.4 KiB
Ruby
83 lines
2.4 KiB
Ruby
require_relative '../factories/pg_connection'
|
|
require_relative '../../lib/abstract_table_geocoder'
|
|
require_relative '../../../../spec/rspec_configuration.rb'
|
|
|
|
describe CartoDB::AbstractTableGeocoder do
|
|
|
|
before(:all) do
|
|
class ConcreteTableGeocoder < CartoDB::AbstractTableGeocoder; end
|
|
|
|
conn = CartoDB::Importer2::Factories::PGConnection.new
|
|
@db = conn.connection
|
|
@pg_options = conn.pg_options
|
|
@table_name = "ne_10m_populated_places_simple"
|
|
load_csv path_to("populated_places_short.csv")
|
|
end
|
|
|
|
after(:all) do
|
|
@db.drop_table @table_name
|
|
end
|
|
|
|
|
|
describe '#initialize' do
|
|
it 'sets the connection timeout to 5 hours' do
|
|
tg = ConcreteTableGeocoder.new({
|
|
connection: @db,
|
|
table_name: @table_name,
|
|
qualified_table_name: @table_name
|
|
})
|
|
timeout = @db.fetch("SHOW statement_timeout").first.fetch(:statement_timeout)
|
|
timeout.should == '5h'
|
|
end
|
|
end
|
|
|
|
|
|
describe '#ensure_georef_status_colummn_valid' do
|
|
|
|
before(:each) do
|
|
@tg = ConcreteTableGeocoder.new({
|
|
connection: @db,
|
|
table_name: @table_name,
|
|
qualified_table_name: @table_name
|
|
})
|
|
end
|
|
|
|
it 'adds a georef_status_column if it does not exists' do
|
|
@tg.send(:ensure_georef_status_colummn_valid)
|
|
assert_correctness_of_georef_status_column
|
|
end
|
|
|
|
it 'does nothing if the column already exists' do
|
|
@tg.send(:ensure_georef_status_colummn_valid)
|
|
@tg.send(:ensure_georef_status_colummn_valid)
|
|
assert_correctness_of_georef_status_column
|
|
end
|
|
|
|
it 'casts its type if the column exists and is not bool' do
|
|
@db.add_column @table_name, :georef_status_column, :text
|
|
@tg.send(:ensure_georef_status_colummn_valid)
|
|
assert_correctness_of_georef_status_column
|
|
end
|
|
|
|
end
|
|
|
|
|
|
def assert_correctness_of_georef_status_column
|
|
georef_status_column = @db.schema(@table_name, reload: true).select {|c| c[0] == :cartodb_georef_status}.first
|
|
georef_status_column.nil?.should == false
|
|
georef_status_column[1][:db_type].should == 'boolean'
|
|
end
|
|
|
|
def load_csv(path)
|
|
@db.run("CREATE TABLE #{@table_name} (the_geom geometry, cartodb_id integer, name text, iso3 text)")
|
|
@db.run("COPY #{Sequel.lit(@table_name)}(cartodb_id, name, iso3) FROM '#{path}' DELIMITER ',' CSV")
|
|
end
|
|
|
|
def path_to(filepath = '')
|
|
File.expand_path(
|
|
File.join(File.dirname(__FILE__), "../fixtures/#{filepath}")
|
|
)
|
|
end
|
|
|
|
end
|