diff --git a/app/controllers/budgets/investments_controller.rb b/app/controllers/budgets/investments_controller.rb index 1e1df4f1f..293f4797a 100644 --- a/app/controllers/budgets/investments_controller.rb +++ b/app/controllers/budgets/investments_controller.rb @@ -112,8 +112,9 @@ module Budgets def set_random_seed if params[:order] == 'random' || params[:order].blank? - seed = params[:random_seed] || session[:random_seed] || rand(-100000..100000) - params[:random_seed] ||= Float(seed) rescue 0 + seed = params[:random_seed] || session[:random_seed] || rand + params[:random_seed] = seed + session[:random_seed] = params[:random_seed] else params[:random_seed] = nil end diff --git a/spec/features/budgets/investments_spec.rb b/spec/features/budgets/investments_spec.rb index bb1286e7a..1b0f7f31f 100644 --- a/spec/features/budgets/investments_spec.rb +++ b/spec/features/budgets/investments_spec.rb @@ -501,7 +501,7 @@ feature 'Budget Investments' do end end - context("Orders") do + context "Orders" do before { budget.update(phase: 'selecting') } scenario "Default order is random" do @@ -533,7 +533,7 @@ feature 'Budget Investments' do expect(order).not_to eq(new_order) 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 + 2).times { create(:budget_investment, heading: heading) } @@ -551,7 +551,21 @@ feature 'Budget Investments' do expect(order).to eq(new_order) 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 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 - 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.update_column(:confidence_score, 10) 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') 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) } in_browser(:one) do @@ -627,7 +641,7 @@ feature 'Budget Investments' do 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) } in_browser(:one) do @@ -641,7 +655,30 @@ feature 'Budget Investments' do end 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 def investments_order