cartodb-4.42/services/importer/spec/unit/table_sampler_spec.rb
2024-04-06 05:25:13 +00:00

117 lines
3.6 KiB
Ruby

require_relative '../../lib/importer/table_sampler'
require_relative '../../../../spec/rspec_configuration.rb'
# Open the class for adition of some stuff used only for testing
class CartoDB::Importer2::TableSampler
def ids_count= n
@ids_count = n
end
def min_id= n
@min_id = n
end
def max_id= n
@max_id = n
end
def min_max_ids= h
@min_max_ids = h
end
public :sample_query, :sample_indices, :sample_indices_add_method, :sample_indices_delete_method
public :min_id, :max_id, :min_max_ids_query, :ids_count
end
describe CartoDB::Importer2::TableSampler do
describe '#sample_query' do
it 'should return the whole dataset if sample_size >= rows' do
db = nil
sample_size = 400
sampler = CartoDB::Importer2::TableSampler.new db, 'table_name', 'ogc_fid', sample_size
sampler.ids_count = 250 # like countries
sampler.sample_query.should eq 'SELECT * FROM table_name'
end
it 'should have a WHERE clause if sample_size < rows' do
db = nil
sample_size = 5
sampler = CartoDB::Importer2::TableSampler.new db, 'table_name', 'ogc_fid', sample_size
sampler.min_id = 1
sampler.max_id = 10
sampler.sample_query.should match /SELECT \* FROM table_name WHERE ogc_fid IN \([\d,]+\)/
end
end
describe '#sample_indices' do
it 'should add indices to the null set if the space of candidates is bigger than sample size' do
db = nil
sample_size = 5
sampler = CartoDB::Importer2::TableSampler.new db, 'table_name', 'ogc_fid', sample_size
sampler.expects(:sample_indices_add_method).once
sampler.ids_count = 250
sampler.sample_indices
end
it 'should remove indices from the index space when sample size is comparable to index space' do
db = nil
sample_size = 300
sampler = CartoDB::Importer2::TableSampler.new db, 'table_name', 'ogc_fid', sample_size
sampler.expects(:sample_indices_delete_method).once
sampler.ids_count = 400
sampler.sample_indices
end
end
describe '#sample_indices_add_method' do
it 'should return x indices in the search space' do
db = nil
sample_size = 5
sampler = CartoDB::Importer2::TableSampler.new db, 'table_name', 'ogc_fid', sample_size
sampler.min_id = 1
sampler.max_id = 1000
indices = sampler.sample_indices_add_method
indices.count.should eq sample_size
indices.to_a.each { |index| (sampler.min_id..sampler.max_id).member?(index).should be true }
end
end
describe '#sample_indices_delete_method' do
it 'should return x indices in the search space' do
db = nil
sample_size = 10
sampler = CartoDB::Importer2::TableSampler.new db, 'table_name', 'ogc_fid', sample_size
sampler.min_id = 1
sampler.max_id = 11
indices = sampler.sample_indices_add_method
indices.count.should eq sample_size
indices.to_a.each { |index| (sampler.min_id..sampler.max_id).member?(index).should be true }
end
end
describe '#min_max_ids_query' do
it 'should get the min and max ids of the ids_column' do
db = nil
sample_size = :any
sampler = CartoDB::Importer2::TableSampler.new db, 'table_name', 'ogc_fid', sample_size
sampler.min_max_ids_query.should eq "SELECT min(ogc_fid), max(ogc_fid) FROM table_name"
end
end
describe '#ids_count' do
it 'should return 0 if there is no min_id nor max_id' do
db = nil
sample_size = :any
sampler = CartoDB::Importer2::TableSampler.new db, 'table_name', 'ogc_fid', sample_size
sampler.min_max_ids = {min: nil, max: nil}
sampler.ids_count.should eq 0
end
end
end