cartodb/services/table-geocoder/spec/lib/abstract_table_geocoder_spec.rb
2020-06-15 10:58:47 +08:00

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