Add task to set published on existing budgets
Note we're making the validation rule dynamic so it's affected by the way we stub the constant in the tests to emulate data created in old applications. Co-Authored-By: Javi Martín <javim@elretirao.net>
This commit is contained in:
committed by
Javi Martín
parent
28caabecdf
commit
77aaa5e973
@@ -18,7 +18,7 @@ class Budget
|
|||||||
validates_translation :summary, length: { maximum: SUMMARY_MAX_LENGTH }
|
validates_translation :summary, length: { maximum: SUMMARY_MAX_LENGTH }
|
||||||
validates_translation :description, length: { maximum: DESCRIPTION_MAX_LENGTH }
|
validates_translation :description, length: { maximum: DESCRIPTION_MAX_LENGTH }
|
||||||
validates :budget, presence: true
|
validates :budget, presence: true
|
||||||
validates :kind, presence: true, uniqueness: { scope: :budget }, inclusion: { in: PHASE_KINDS }
|
validates :kind, presence: true, uniqueness: { scope: :budget }, inclusion: { in: ->(*) { PHASE_KINDS }}
|
||||||
validate :invalid_dates_range?
|
validate :invalid_dates_range?
|
||||||
validate :prev_phase_dates_valid?
|
validate :prev_phase_dates_valid?
|
||||||
validate :next_phase_dates_valid?
|
validate :next_phase_dates_valid?
|
||||||
|
|||||||
@@ -10,4 +10,23 @@ namespace :budgets do
|
|||||||
Budget.last.email_unselected
|
Budget.last.email_unselected
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
desc "Set published attribute"
|
||||||
|
task set_published: :environment do
|
||||||
|
Budget.where(published: nil).each do |budget|
|
||||||
|
if budget.phase == "drafting"
|
||||||
|
if budget.phases.enabled.first.present?
|
||||||
|
next_enabled_phase = budget.phases.enabled.where.not(kind: "drafting").first.kind
|
||||||
|
else
|
||||||
|
next_enabled_phase = "informing"
|
||||||
|
budget.phases.informing.update!(enabled: true)
|
||||||
|
end
|
||||||
|
|
||||||
|
budget.update!(phase: next_enabled_phase)
|
||||||
|
budget.update!(published: false)
|
||||||
|
else
|
||||||
|
budget.update!(published: true)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ namespace :consul do
|
|||||||
desc "Runs tasks needed to upgrade from 1.2.0 to 1.3.0"
|
desc "Runs tasks needed to upgrade from 1.2.0 to 1.3.0"
|
||||||
task "execute_release_1.3.0_tasks": [
|
task "execute_release_1.3.0_tasks": [
|
||||||
"db:load_sdg",
|
"db:load_sdg",
|
||||||
"db:calculate_tsv"
|
"db:calculate_tsv",
|
||||||
|
"budgets:set_published"
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|||||||
70
spec/lib/tasks/budgets_spec.rb
Normal file
70
spec/lib/tasks/budgets_spec.rb
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
require "rails_helper"
|
||||||
|
|
||||||
|
describe Budget do
|
||||||
|
let(:run_rake_task) do
|
||||||
|
Rake::Task["budgets:set_published"].reenable
|
||||||
|
Rake.application.invoke_task("budgets:set_published")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "does not change anything if the published attribute is set" do
|
||||||
|
budget = create(:budget, published: false, phase: "accepting")
|
||||||
|
|
||||||
|
run_rake_task
|
||||||
|
budget.reload
|
||||||
|
|
||||||
|
expect(budget.phase).to eq "accepting"
|
||||||
|
expect(budget.published).to be false
|
||||||
|
end
|
||||||
|
|
||||||
|
it "publishes budgets which are not in draft mode" do
|
||||||
|
budget = create(:budget, published: nil, phase: "accepting")
|
||||||
|
|
||||||
|
run_rake_task
|
||||||
|
budget.reload
|
||||||
|
|
||||||
|
expect(budget.phase).to eq "accepting"
|
||||||
|
expect(budget.published).to be true
|
||||||
|
end
|
||||||
|
|
||||||
|
it "changes the published attribute to false on drafting budgets" do
|
||||||
|
stub_const("Budget::Phase::PHASE_KINDS", ["drafting"] + Budget::Phase::PHASE_KINDS)
|
||||||
|
budget = create(:budget, published: nil)
|
||||||
|
budget.update_column(:phase, "drafting")
|
||||||
|
stub_const("Budget::Phase::PHASE_KINDS", Budget::Phase::PHASE_KINDS - ["drafting"])
|
||||||
|
|
||||||
|
run_rake_task
|
||||||
|
budget.reload
|
||||||
|
|
||||||
|
expect(budget.published).to be false
|
||||||
|
expect(budget.phase).to eq "informing"
|
||||||
|
end
|
||||||
|
|
||||||
|
it "changes the phase to the first enabled phase" do
|
||||||
|
budget = create(:budget, published: nil)
|
||||||
|
budget.update_column(:phase, "drafting")
|
||||||
|
budget.phases.informing.update!(enabled: false)
|
||||||
|
|
||||||
|
expect(budget.phase).to eq "drafting"
|
||||||
|
|
||||||
|
run_rake_task
|
||||||
|
budget.reload
|
||||||
|
|
||||||
|
expect(budget.phase).to eq "accepting"
|
||||||
|
expect(budget.published).to be false
|
||||||
|
end
|
||||||
|
|
||||||
|
it "enables and select the informing phase if there are not any enabled phases" do
|
||||||
|
budget = create(:budget, published: nil)
|
||||||
|
budget.update_column(:phase, "drafting")
|
||||||
|
budget.phases.each { |phase| phase.update!(enabled: false) }
|
||||||
|
|
||||||
|
expect(budget.phase).to eq "drafting"
|
||||||
|
|
||||||
|
run_rake_task
|
||||||
|
budget.reload
|
||||||
|
|
||||||
|
expect(budget.phase).to eq "informing"
|
||||||
|
expect(budget.phases.informing.enabled).to be true
|
||||||
|
expect(budget.published).to be false
|
||||||
|
end
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user