You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

139 lines
4.2 KiB

4 years ago
require_relative '../../spec_helper_min'
describe Carto::VisualizationQueryOrderer do
before(:all) do
@user = FactoryGirl.create(:carto_user)
@visualization_a = FactoryGirl.create(:carto_visualization, user_id: @user.id, name: 'Visualization A',
privacy: Carto::Visualization::PRIVACY_PUBLIC)
Delorean.jump(1.day)
@visualization_b = FactoryGirl.create(:carto_visualization, user_id: @user.id, name: 'Visualization B',
privacy: Carto::Visualization::PRIVACY_LINK)
@visualization_b.add_like_from(@user)
Delorean.back_to_the_present
query = Carto::Visualization.all.select("visualizations.*").where(user_id: @user.id)
@orderer = Carto::VisualizationQueryOrderer.new(query)
end
after(:all) do
Carto::Visualization.all.each(&:destroy)
@user.destroy
end
it 'orders ascending by default' do
result = @orderer.order('name')
expect(result.size).to eql 2
expect(result.first.name).to eql @visualization_a.name
end
context 'by name' do
it 'orders ascending' do
result = @orderer.order('name', 'asc')
expect(result.size).to eql 2
expect(result.first.name).to eql @visualization_a.name
end
it 'orders descending' do
result = @orderer.order('name', 'desc')
expect(result.size).to eql 2
expect(result.first.name).to eql @visualization_b.name
end
end
context 'by updated_at' do
it 'orders ascending' do
result = @orderer.order('updated_at', 'asc')
expect(result.size).to eql 2
expect(result.first.name).to eql @visualization_a.name
end
it 'orders descending' do
result = @orderer.order('updated_at', 'desc')
expect(result.size).to eql 2
expect(result.first.name).to eql @visualization_b.name
end
end
context 'by likes' do
it 'orders ascending' do
result = @orderer.order('likes', 'asc')
expect(result.size).to eql 2
expect(result.first.name).to eql @visualization_a.name
end
it 'orders descending' do
result = @orderer.order('likes', 'desc')
expect(result.size).to eql 2
expect(result.first.name).to eql @visualization_b.name
end
end
context 'by privacy' do
it 'orders ascending' do
result = @orderer.order('privacy', 'asc')
expect(result.size).to eql 2
expect(result.first.name).to eql @visualization_b.name
end
it 'orders descending' do
result = @orderer.order('privacy', 'desc')
expect(result.size).to eql 2
expect(result.first.name).to eql @visualization_a.name
end
end
context 'multiple ordering' do
before(:each) do
Delorean.jump(2.days)
@visualization_c = FactoryGirl.create(:derived_visualization, user_id: @user.id, name: 'Visualization C',
privacy: Carto::Visualization::PRIVACY_LINK)
Delorean.back_to_the_present
end
after(:each) do
@visualization_c.delete
end
it 'orders by privacy desc + updated_at desc' do
result = @orderer.order('privacy,updated_at', 'desc,desc')
expect(result.size).to eql 3
expect(result.first.name).to eql @visualization_a.name
expect(result.second.name).to eql @visualization_c.name
end
it 'orders by privacy desc + updated_at asc' do
result = @orderer.order('privacy,updated_at', 'desc,asc')
expect(result.size).to eql 3
expect(result.first.name).to eql @visualization_a.name
expect(result.second.name).to eql @visualization_b.name
end
it 'orders by privacy + name without direction (default direction = asc)' do
result = @orderer.order('privacy,name')
expect(result.size).to eql 3
expect(result.first.name).to eql @visualization_b.name
expect(result.second.name).to eql @visualization_c.name
end
it 'orders by privacy desc + name without direction (it takes the first direction)' do
result = @orderer.order('privacy,name', 'desc')
expect(result.size).to eql 3
expect(result.first.name).to eql @visualization_a.name
expect(result.second.name).to eql @visualization_c.name
end
end
end