diff --git a/app/controllers/budgets/investments_controller.rb b/app/controllers/budgets/investments_controller.rb index c48ce7fc4..5d1251d90 100644 --- a/app/controllers/budgets/investments_controller.rb +++ b/app/controllers/budgets/investments_controller.rb @@ -112,7 +112,8 @@ 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 + params[:random_seed] = Float(seed) / 1000000 rescue 0 + 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 d2ea73390..f5a650c18 100644 --- a/spec/features/budgets/investments_spec.rb +++ b/spec/features/budgets/investments_spec.rb @@ -610,7 +610,15 @@ feature 'Budget Investments' do end expect(@first_user_investments_order).to eq(@second_user_investments_order) + scenario "Convert seed to a value small enough for the modulus function to return investments in random order", :focus do + 12.times { |i| create(:budget_investment, heading: heading, id: i) } + visit budget_investments_path(budget, heading_id: heading.id, random_seed: '12') + + order = investments_order + orderd_by_id = Budget::Investment.order(:id).limit(10).pluck(:title) + + expect(order).to_not eq(orderd_by_id) end def investments_order