Write task to migrate budget admins and valuators
If we didn't run this task, investments for existing budgets wouldn't show their administrator/valuators as an option when we're editing them, leading to data loss.
This commit is contained in:
@@ -5,6 +5,7 @@ namespace :consul do
|
||||
desc "Runs tasks needed to upgrade from 1.0.0 to 1.1.0"
|
||||
task "execute_release_1.1.0_tasks": [
|
||||
"budgets:set_original_heading_id",
|
||||
"migrations:valuation_taggings"
|
||||
"migrations:valuation_taggings",
|
||||
"migrations:budget_admins_and_valuators"
|
||||
]
|
||||
end
|
||||
|
||||
@@ -4,4 +4,17 @@ namespace :migrations do
|
||||
ApplicationLogger.new.info "Updating valuation taggings context"
|
||||
Tagging.where(context: "valuation").update_all(context: "valuation_tags")
|
||||
end
|
||||
|
||||
desc "Migrates budget staff"
|
||||
task budget_admins_and_valuators: :environment do
|
||||
ApplicationLogger.new.info "Updating budget administrators and valuators"
|
||||
Budget.find_each do |budget|
|
||||
investments = budget.investments.with_hidden
|
||||
|
||||
budget.update!(
|
||||
administrator_ids: investments.where.not(administrator: nil).distinct.pluck(:administrator_id),
|
||||
valuator_ids: Budget::ValuatorAssignment.where(investment: investments).distinct.pluck(:valuator_id)
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
require "rails_helper"
|
||||
|
||||
describe "Migration tasks" do
|
||||
describe "valuation_taggins" do
|
||||
let(:run_rake_task) do
|
||||
Rake::Task["migrations:valuation_taggings"].reenable
|
||||
Rake.application.invoke_task("migrations:valuation_taggings")
|
||||
@@ -20,3 +21,48 @@ describe "Migration tasks" do
|
||||
expect(tags_tagging.reload.context).to eq "tags"
|
||||
end
|
||||
end
|
||||
|
||||
describe "budget_admins_and_valuators" do
|
||||
let(:run_rake_task) do
|
||||
Rake::Task["migrations:budget_admins_and_valuators"].reenable
|
||||
Rake.application.invoke_task("migrations:budget_admins_and_valuators")
|
||||
end
|
||||
|
||||
let(:old_budget) { create(:budget) }
|
||||
let(:current_budget) { create(:budget) }
|
||||
|
||||
it "assigns administrators from existing investments" do
|
||||
harold = create(:administrator)
|
||||
john = create(:administrator)
|
||||
root = create(:administrator)
|
||||
|
||||
create(:budget_investment, budget: old_budget, administrator: john)
|
||||
create(:budget_investment, budget: old_budget, administrator: harold)
|
||||
create(:budget_investment, budget: old_budget, administrator: nil)
|
||||
|
||||
create(:budget_investment, budget: current_budget, administrator: root)
|
||||
|
||||
run_rake_task
|
||||
|
||||
expect(old_budget.administrators).to match_array [john, harold]
|
||||
expect(current_budget.administrators).to match_array [root]
|
||||
end
|
||||
|
||||
it "assigns valuators from existing investments" do
|
||||
tyrion = create(:valuator)
|
||||
cersei = create(:valuator)
|
||||
jaime = create(:valuator)
|
||||
|
||||
create(:budget_investment, budget: old_budget, valuators: [cersei])
|
||||
create(:budget_investment, budget: old_budget, valuators: [jaime, cersei])
|
||||
create(:budget_investment, budget: old_budget, valuators: [])
|
||||
|
||||
create(:budget_investment, budget: current_budget, valuators: [tyrion, jaime])
|
||||
|
||||
run_rake_task
|
||||
|
||||
expect(old_budget.valuators).to match_array [cersei, jaime]
|
||||
expect(current_budget.valuators).to match_array [tyrion, jaime]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user