cartodb/spec/models/visualization/relator_spec.rb
2020-06-15 10:58:47 +08:00

150 lines
5.6 KiB
Ruby

require_relative '../../spec_helper'
require_relative '../../../app/models/visualization/relator'
require_relative '../../../app/models/visualization/member'
require_relative '../../../app/models/visualization/collection'
require_relative '../../doubles/support_tables.rb'
include CartoDB
describe Visualization::Relator do
before do
@db = SequelRails.connection
Sequel.extension(:pagination)
Visualization.repository = DataRepository::Backend::Sequel.new(@db, :visualizations)
end
before(:all) do
@user = create_user({
email: 'admin@cartotest.com',
username: 'admin',
password: '000123456'
})
@carto_user = Carto::User.find(@user.id)
end
before(:each) do
bypass_named_maps
delete_user_data(@user)
end
after(:all) do
bypass_named_maps
@user.destroy
end
describe '#estimated_row_count and #actual_row_count' do
it 'should query Table estimated an actual row count methods' do
::Table.any_instance.stubs(:row_count_and_size).returns(row_count: 999)
::Table.any_instance.stubs(:actual_row_count).returns(1000)
table = create_table(name: 'table1', user_id: @user.id)
vis = table.table_visualization
vis.estimated_row_count.should == 999
vis.actual_row_count.should == 1000
end
end
before(:each) do
# For relator->permission
@user_mock = create_mocked_user
CartoDB::Visualization::Relator.any_instance.stubs(:user).returns(@user_mock)
support_tables_mock = Doubles::Visualization::SupportTables.new
Visualization::Relator.any_instance.stubs(:support_tables).returns(support_tables_mock)
end
describe '#related_canonical_visualizations' do
it 'should return the canonical visualizations associated to a derived visualization' do
table1 = create_table({:name => 'table1', :user_id => @user.id})
table2 = create_table({:name => 'table2', :user_id => @user.id})
vis_table1 = create_vis_from_table(@carto_user, table1)
create_vis_from_table(@carto_user, table2)
vis_table1.related_canonical_visualizations.map(&:id).should == [table1.table_visualization.id]
end
end
describe '#children' do
it 'tests .children and its sorting' do
Visualization::Member.any_instance.stubs(:supports_private_maps?).returns(true)
parent = Visualization::Member.new(random_attributes_for_vis_member({
name:'PARENT',
user_id: @user_mock.id,
type: Visualization::Member::TYPE_DERIVED }))
parent = parent.store.fetch
# Create unsorted on purpose
member_d = Visualization::Member.new(random_attributes_for_vis_member({
name:'D', type: Visualization::Member::TYPE_SLIDE,
user_id: @user_mock.id,
parent_id: parent.id }))
member_d = member_d.store.fetch
member_c = Visualization::Member.new(random_attributes_for_vis_member({
name:'C', type: Visualization::Member::TYPE_SLIDE,
user_id: @user_mock.id,
parent_id: parent.id }))
member_c = member_c.store.fetch
member_b = Visualization::Member.new(random_attributes_for_vis_member({
name:'B', type: Visualization::Member::TYPE_SLIDE,
user_id: @user_mock.id,
parent_id: parent.id }))
member_b = member_b.store.fetch
member_e = Visualization::Member.new(random_attributes_for_vis_member({
name:'E', type: Visualization::Member::TYPE_SLIDE,
user_id: @user_mock.id,
parent_id: parent.id }))
member_e = member_e.store.fetch
member_a = Visualization::Member.new(random_attributes_for_vis_member({
name:'A', type: Visualization::Member::TYPE_SLIDE,
user_id: @user_mock.id,
parent_id: parent.id }))
member_a = member_a.store.fetch
# A -> B -> C -> D -> E
member_a.set_next_list_item! member_b
member_b.set_next_list_item! member_c
member_c.set_next_list_item! member_d
member_d.set_next_list_item! member_e
member_a.fetch
member_b.fetch
member_c.fetch
member_d.fetch
member_e.fetch
parent.fetch
children = parent.children
children.length.should eq 5
children[0].id.should eq member_a.id
children[1].id.should eq member_b.id
children[2].id.should eq member_c.id
children[3].id.should eq member_d.id
children[4].id.should eq member_e.id
end
end
private
def create_vis_from_table(user, table)
blender = Visualization::TableBlender.new(user, [table])
map = blender.blend
vis = Visualization::Member.new(
name: 'wadus_vis',
map_id: map.id,
type: Visualization::Member::TYPE_DERIVED,
privacy: blender.blended_privacy,
user_id: user.id
)
vis.store
vis
end
end