Merge pull request #2577 from consul/random-order
Fix random order for budget investments
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user