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 <microweb10@gmail.com>
This commit is contained in:
Javi Martín
2021-05-20 14:24:50 +02:00
parent c592d80257
commit 69ade5b131
2 changed files with 23 additions and 1 deletions

View File

@@ -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)

View File

@@ -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