diff --git a/app/models/budget.rb b/app/models/budget.rb index 327374c9a..43105de14 100644 --- a/app/models/budget.rb +++ b/app/models/budget.rb @@ -198,13 +198,10 @@ class Budget < ApplicationRecord def investments_filters [ - "not_unfeasible", - "feasible", - "unfeasible", - ("selected" if publishing_prices_or_later?), - ("unselected" if publishing_prices_or_later?), + (%w[not_unfeasible feasible unfeasible] if valuating_or_later?), + (%w[selected unselected] if publishing_prices_or_later?), ("winners" if finished?) - ].compact + ].compact.flatten end def email_selected diff --git a/spec/components/budgets/investments/filters_component_spec.rb b/spec/components/budgets/investments/filters_component_spec.rb new file mode 100644 index 000000000..5fe213934 --- /dev/null +++ b/spec/components/budgets/investments/filters_component_spec.rb @@ -0,0 +1,33 @@ +require "rails_helper" + +describe Budgets::Investments::FiltersComponent do + let(:budget) { create(:budget) } + + around do |example| + with_request_url(Rails.application.routes.url_helpers.budget_investments_path(budget)) do + example.run + end + end + + it "is not displayed before valuation" do + %w[informing accepting reviewing selecting].each do |phase| + budget.update!(phase: phase) + allow(controller).to receive(:valid_filters).and_return(budget.investments_filters) + + render_inline Budgets::Investments::FiltersComponent.new + + expect(page.native.inner_html).to be_empty + end + end + + it "is displayed during and after valuation" do + Budget::Phase::kind_or_later("valuating").each do |phase| + budget.update!(phase: phase) + allow(controller).to receive(:valid_filters).and_return(budget.investments_filters) + + render_inline Budgets::Investments::FiltersComponent.new + + expect(page).to have_content "Filtering projects by" + end + end +end diff --git a/spec/models/budget_spec.rb b/spec/models/budget_spec.rb index 1848b0c5a..91ee27eeb 100644 --- a/spec/models/budget_spec.rb +++ b/spec/models/budget_spec.rb @@ -286,14 +286,20 @@ describe Budget do end describe "#investments_filters" do - it "returns feasibility filters before publishing prices" do - %w[informing accepting reviewing selecting valuating].each do |phase| + it "returns no filters before valuating" do + %w[informing accepting reviewing selecting].each do |phase| budget.phase = phase - expect(budget.investments_filters).to eq(%w[not_unfeasible feasible unfeasible]) + expect(budget.investments_filters).to be_empty end end + it "returns feasibility filters during valuation" do + budget.phase = "valuating" + + expect(budget.investments_filters).to eq(%w[not_unfeasible feasible unfeasible]) + end + it "returns feasibility and selection filters during the final voting phases" do %w[publishing_prices balloting reviewing_ballots].each do |phase| budget.phase = phase diff --git a/spec/system/budgets/investments_spec.rb b/spec/system/budgets/investments_spec.rb index e3639aa57..95cefbe1a 100644 --- a/spec/system/budgets/investments_spec.rb +++ b/spec/system/budgets/investments_spec.rb @@ -47,6 +47,8 @@ describe "Budget Investments" do end scenario "Index" do + budget.update!(phase: "valuating") + investments = [create(:budget_investment, heading: heading), create(:budget_investment, heading: heading), create(:budget_investment, :feasible, heading: heading)] @@ -203,6 +205,8 @@ describe "Budget Investments" do end scenario "Advanced search combined with filter by status" do + budget.update!(phase: "valuating") + create(:budget_investment, :feasible, heading: heading, title: "Feasible environment") create(:budget_investment, :feasible, heading: heading, title: "Feasible health") create(:budget_investment, :unfeasible, heading: heading, title: "Unfeasible environment") @@ -235,6 +239,8 @@ describe "Budget Investments" do context("Filters") do scenario "by unfeasibility" do + budget.update!(phase: "valuating") + investment1 = create(:budget_investment, :unfeasible, :finished, heading: heading) investment2 = create(:budget_investment, :feasible, heading: heading) investment3 = create(:budget_investment, heading: heading) @@ -518,7 +524,7 @@ describe "Budget Investments" do end scenario "Order always is random for unfeasible and unselected investments" do - Budget::Phase::PHASE_KINDS.each do |phase| + Budget::Phase::kind_or_later("valuating").each do |phase| budget.update!(phase: phase) visit budget_investments_path(budget, heading_id: heading.id, filter: "unfeasible")