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>
71 lines
2.0 KiB
Ruby
71 lines
2.0 KiB
Ruby
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
|