From 69ade5b131981d3cefe62ae999398ecc65ea305c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Thu, 20 May 2021 14:24:50 +0200 Subject: [PATCH] Fix crash with budgets with disabled current phase There's an edge case where the current phase of the budget was disabled. In this case, the application was crashing. I'm not sure what we should do regarding this case. Is it OK to allow disabling the current phase? Is it OK to allow selecting a disabled phase as the current phase? Since I'm not sure about it, for now I'm leaving it the same way it was. Co-authored-by: Julian Herrero --- .../admin/budgets/index_component.rb | 6 +++++- .../admin/budgets/index_component_spec.rb | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 spec/components/admin/budgets/index_component_spec.rb diff --git a/app/components/admin/budgets/index_component.rb b/app/components/admin/budgets/index_component.rb index 1bf411989..58203a206 100644 --- a/app/components/admin/budgets/index_component.rb +++ b/app/components/admin/budgets/index_component.rb @@ -19,7 +19,11 @@ class Admin::Budgets::IndexComponent < ApplicationComponent end def current_enabled_phase_number(budget) - budget.phases.enabled.order(:id).pluck(:kind).index(budget.phase) + 1 + current_enabled_phase_index(budget) + 1 + end + + def current_enabled_phase_index(budget) + budget.phases.enabled.order(:id).pluck(:kind).index(budget.phase) || -1 end def dates(budget) diff --git a/spec/components/admin/budgets/index_component_spec.rb b/spec/components/admin/budgets/index_component_spec.rb new file mode 100644 index 000000000..c6da3183a --- /dev/null +++ b/spec/components/admin/budgets/index_component_spec.rb @@ -0,0 +1,18 @@ +require "rails_helper" + +describe Admin::Budgets::IndexComponent, type: :component do + before do + allow(ViewComponent::Base).to receive(:test_controller).and_return("Admin::BudgetsController") + allow_any_instance_of(Admin::BudgetsController).to receive(:valid_filters).and_return(["all"]) + allow_any_instance_of(Admin::BudgetsController).to receive(:current_filter).and_return("all") + end + + it "displays current phase zero for budgets with no current phase" do + budget = create(:budget, :accepting, name: "Not enabled phase") + budget.phases.accepting.update!(enabled: false) + + render_inline Admin::Budgets::IndexComponent.new(Budget.page(1)) + + expect(page.find("tr", text: "Not enabled phase")).to have_content "0/8" + end +end