Merge pull request #2577 from consul/random-order

Fix random order for budget investments
This commit is contained in:
Alberto
2018-07-20 18:31:37 +02:00
committed by GitHub
2 changed files with 46 additions and 8 deletions

View File

@@ -112,8 +112,9 @@ module Budgets
def set_random_seed def set_random_seed
if params[:order] == 'random' || params[:order].blank? if params[:order] == 'random' || params[:order].blank?
seed = params[:random_seed] || session[:random_seed] || rand(-100000..100000) seed = params[:random_seed] || session[:random_seed] || rand
params[:random_seed] ||= Float(seed) rescue 0 params[:random_seed] = seed
session[:random_seed] = params[:random_seed]
else else
params[:random_seed] = nil params[:random_seed] = nil
end end

View File

@@ -501,7 +501,7 @@ feature 'Budget Investments' do
end end
end end
context("Orders") do context "Orders" do
before { budget.update(phase: 'selecting') } before { budget.update(phase: 'selecting') }
scenario "Default order is random" do scenario "Default order is random" do
@@ -533,7 +533,7 @@ feature 'Budget Investments' do
expect(order).not_to eq(new_order) expect(order).not_to eq(new_order)
end end
scenario 'Random order maintained with pagination', :js do scenario 'Random order maintained with pagination' do
per_page = Kaminari.config.default_per_page per_page = Kaminari.config.default_per_page
(per_page + 2).times { create(:budget_investment, heading: heading) } (per_page + 2).times { create(:budget_investment, heading: heading) }
@@ -551,7 +551,21 @@ feature 'Budget Investments' do
expect(order).to eq(new_order) expect(order).to eq(new_order)
end end
scenario "Investments are not repeated with random order", :js do scenario 'Random order maintained when going back from show' do
10.times { |i| create(:budget_investment, heading: heading) }
visit budget_investments_path(budget, heading_id: heading.id)
order = all(".budget-investment h3").collect {|i| i.text }
click_link Budget::Investment.first.title
click_link "Go back"
new_order = all(".budget-investment h3").collect {|i| i.text }
expect(order).to eq(new_order)
end
scenario "Investments are not repeated with random order" do
12.times { create(:budget_investment, heading: heading) } 12.times { create(:budget_investment, heading: heading) }
# 12 instead of per_page + 2 because in each page there are 10 (in this case), not 25 # 12 instead of per_page + 2 because in each page there are 10 (in this case), not 25
@@ -570,7 +584,7 @@ feature 'Budget Investments' do
end end
scenario 'Proposals are ordered by confidence_score', :js do scenario 'Proposals are ordered by confidence_score' do
best_proposal = create(:budget_investment, heading: heading, title: 'Best proposal') best_proposal = create(:budget_investment, heading: heading, title: 'Best proposal')
best_proposal.update_column(:confidence_score, 10) best_proposal.update_column(:confidence_score, 10)
worst_proposal = create(:budget_investment, heading: heading, title: 'Worst proposal') worst_proposal = create(:budget_investment, heading: heading, title: 'Worst proposal')
@@ -591,7 +605,7 @@ feature 'Budget Investments' do
expect(current_url).to include('page=1') expect(current_url).to include('page=1')
end end
scenario 'Each user has a different and consistent random budget investment order when random_seed is disctint', :js do scenario 'Each user has a different and consistent random budget investment order when random_seed is disctint' do
(Kaminari.config.default_per_page * 1.3).to_i.times { create(:budget_investment, heading: heading) } (Kaminari.config.default_per_page * 1.3).to_i.times { create(:budget_investment, heading: heading) }
in_browser(:one) do in_browser(:one) do
@@ -627,7 +641,7 @@ feature 'Budget Investments' do
end end
end end
scenario 'Each user has a equal and consistent budget investment order when the random_seed is equal', :js do scenario 'Each user has a equal and consistent budget investment order when the random_seed is equal' do
(Kaminari.config.default_per_page * 1.3).to_i.times { create(:budget_investment, heading: heading) } (Kaminari.config.default_per_page * 1.3).to_i.times { create(:budget_investment, heading: heading) }
in_browser(:one) do in_browser(:one) do
@@ -641,7 +655,30 @@ feature 'Budget Investments' do
end end
expect(@first_user_investments_order).to eq(@second_user_investments_order) expect(@first_user_investments_order).to eq(@second_user_investments_order)
end
scenario "Set votes for investments randomized with a seed" do
voter = create(:user, :level_two)
login_as(voter)
10.times { create(:budget_investment, heading: heading) }
voted_investments = []
10.times do
investment = create(:budget_investment, heading: heading)
create(:vote, votable: investment, voter: voter)
voted_investments << investment
end
visit budget_investments_path(budget, heading_id: heading.id)
voted_investments.each do |investment|
if page.has_link?(investment.title)
within("#budget_investment_#{investment.id}") do
expect(page).to have_content "You have already supported this investment"
end
end
end
end end
def investments_order def investments_order