diff --git a/app/components/admin/budgets/duration_component.rb b/app/components/admin/budgets/duration_component.rb index 8af1a3ad0..3e7a80207 100644 --- a/app/components/admin/budgets/duration_component.rb +++ b/app/components/admin/budgets/duration_component.rb @@ -10,7 +10,7 @@ class Admin::Budgets::DurationComponent < ApplicationComponent end def duration - distance_of_time_in_words(durable.starts_at, durable.ends_at) + distance_of_time_in_words(durable.starts_at, durable.ends_at) if durable.starts_at && durable.ends_at end private diff --git a/app/models/budget.rb b/app/models/budget.rb index c667ada15..c685323f5 100644 --- a/app/models/budget.rb +++ b/app/models/budget.rb @@ -72,11 +72,11 @@ class Budget < ApplicationRecord end def starts_at - phases.published.first.starts_at + phases.published.first&.starts_at end def ends_at - phases.published.last.ends_at + phases.published.last&.ends_at end def description diff --git a/spec/components/admin/budgets/duration_component_spec.rb b/spec/components/admin/budgets/duration_component_spec.rb index 193d45e7c..fbbd51b73 100644 --- a/spec/components/admin/budgets/duration_component_spec.rb +++ b/spec/components/admin/budgets/duration_component_spec.rb @@ -43,6 +43,22 @@ describe Admin::Budgets::DurationComponent, type: :component do expect(page.text).to eq "about 1 year" end + + it "is not defined when no end date is defined" do + durable = double(starts_at: Time.zone.local(2015, 8, 1, 12, 0, 0), ends_at: nil) + + render Admin::Budgets::DurationComponent.new(durable).duration + + expect(page.text).to be_empty + end + + it "is not defined when no start date is defined" do + durable = double(starts_at: nil, ends_at: Time.zone.local(2016, 9, 30, 16, 30, 00)) + + render Admin::Budgets::DurationComponent.new(durable).duration + + expect(page.text).to be_empty + end end attr_reader :content @@ -52,6 +68,6 @@ describe Admin::Budgets::DurationComponent, type: :component do end def page - Capybara::Node::Simple.new(content) + Capybara::Node::Simple.new(content.to_s) end end diff --git a/spec/components/admin/budgets/index_component_spec.rb b/spec/components/admin/budgets/index_component_spec.rb index c6da3183a..c8e94ed6a 100644 --- a/spec/components/admin/budgets/index_component_spec.rb +++ b/spec/components/admin/budgets/index_component_spec.rb @@ -15,4 +15,13 @@ describe Admin::Budgets::IndexComponent, type: :component do expect(page.find("tr", text: "Not enabled phase")).to have_content "0/8" end + + it "displays phase zero out of zero for budgets with no enabled phases" do + budget = create(:budget, name: "Without phases") + budget.phases.each { |phase| phase.update!(enabled: false) } + + render_inline Admin::Budgets::IndexComponent.new(Budget.page(1)) + + expect(page.find("tr", text: "Without phases")).to have_content "0/0" + end end