diff --git a/app/models/budget.rb b/app/models/budget.rb index af1149d66..55c4de841 100644 --- a/app/models/budget.rb +++ b/app/models/budget.rb @@ -31,7 +31,9 @@ class Budget < ActiveRecord::Base scope :reviewing_ballots, -> { where(phase: "reviewing_ballots") } scope :finished, -> { where(phase: "finished") } - scope :current, -> { where.not(phase: "finished") } + def self.current + where.not(phase: "drafting").last + end def description send("description_#{phase}").try(:html_safe) @@ -93,10 +95,6 @@ class Budget < ActiveRecord::Base balloting_process? || finished? end - def current? - !finished? - end - def heading_price(heading) heading_ids.include?(heading.id) ? heading.price : -1 end diff --git a/spec/models/budget_spec.rb b/spec/models/budget_spec.rb index 70c292962..9bca092ea 100644 --- a/spec/models/budget_spec.rb +++ b/spec/models/budget_spec.rb @@ -98,6 +98,31 @@ describe Budget do end end + describe "#current" do + + it "returns nil if there is only one budget and it is still in drafting phase" do + budget = create(:budget, phase: "drafting") + + expect(Budget.current).to eq(nil) + end + + it "returns the budget if there is only one and not in drafting phase" do + budget = create(:budget, phase: "accepting") + + expect(Budget.current).to eq(budget) + end + + it "returns the last budget created that is not in drafting phase" do + old_budget = create(:budget, phase: "finished", created_at: 2.years.ago) + previous_budget = create(:budget, phase: "accepting", created_at: 1.year.ago) + current_budget = create(:budget, phase: "accepting", created_at: 1.month.ago) + next_budget = create(:budget, phase: "drafting", created_at: 1.week.ago) + + expect(Budget.current).to eq(current_budget) + end + + end + describe "heading_price" do let(:budget) { create(:budget) } let(:group) { create(:budget_group, budget: budget) }