diff --git a/app/controllers/budgets/investments_controller.rb b/app/controllers/budgets/investments_controller.rb index 0084e71db..60cce8682 100644 --- a/app/controllers/budgets/investments_controller.rb +++ b/app/controllers/budgets/investments_controller.rb @@ -17,7 +17,7 @@ module Budgets feature_flag :budgets has_orders %w{most_voted newest oldest}, only: :show - has_orders ->(c){ c.instance_variable_get(:@budget).balloting? ? %w{random price} : %w{random confidence_score} }, only: :index + has_orders ->(c) { c.instance_variable_get(:@budget).investments_orders }, only: :index invisible_captcha only: [:create, :update], honeypot: :subtitle, scope: :budget_investment diff --git a/app/models/budget.rb b/app/models/budget.rb index e2acf1de8..b974c89a9 100644 --- a/app/models/budget.rb +++ b/app/models/budget.rb @@ -94,6 +94,17 @@ class Budget < ActiveRecord::Base formatted_amount(amount_spent(heading)) end + def investments_orders + case phase + when 'accepting', 'reviewing' + %w{random} + when 'balloting', 'reviewing_ballots' + %w{random price} + else + %w{random confidence_score} + end + end + private def sanitize_descriptions diff --git a/spec/models/budget_spec.rb b/spec/models/budget_spec.rb index 17f4de4ff..1157a152b 100644 --- a/spec/models/budget_spec.rb +++ b/spec/models/budget_spec.rb @@ -64,5 +64,27 @@ describe Budget do expect(budget.heading_price(create(:budget_heading))).to eq(-1) end end + + describe "investments_orders" do + let(:budget) { create(:budget) } + it "is random when accepting and reviewing" do + budget.phase = 'accepting' + expect(budget.investments_orders).to eq(['random']) + budget.phase = 'reviewing' + expect(budget.investments_orders).to eq(['random']) + end + it "is random and price when ballotting and reviewing ballots" do + budget.phase = 'balloting' + expect(budget.investments_orders).to eq(['random', 'price']) + budget.phase = 'reviewing_ballots' + expect(budget.investments_orders).to eq(['random', 'price']) + end + it "is random and confidence_score in all other cases" do + budget.phase = 'selecting' + expect(budget.investments_orders).to eq(['random', 'confidence_score']) + budget.phase = 'valuating' + expect(budget.investments_orders).to eq(['random', 'confidence_score']) + end + end end