From 4fad6f16f6042f83e606b94ed58704099dc46860 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Tue, 8 Oct 2019 03:24:00 +0200 Subject: [PATCH] Make `set_original_heading_id` task idempotent This way there'll be no side effects if accidentally executed on data already having the `original_heading_id`. --- lib/tasks/budgets.rake | 4 +++- spec/lib/tasks/budgets_spec.rb | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/tasks/budgets.rake b/lib/tasks/budgets.rake index 4a4e40203..68ce74d93 100644 --- a/lib/tasks/budgets.rake +++ b/lib/tasks/budgets.rake @@ -17,7 +17,9 @@ namespace :budgets do task set_original_heading_id: :environment do puts "Starting" Budget::Investment.find_each do |investment| - investment.update_column(:original_heading_id, investment.heading_id) + unless investment.original_heading_id.present? + investment.update_column(:original_heading_id, investment.heading_id) + end print "." end puts "Finished" diff --git a/spec/lib/tasks/budgets_spec.rb b/spec/lib/tasks/budgets_spec.rb index 67ec3e63c..58848a267 100644 --- a/spec/lib/tasks/budgets_spec.rb +++ b/spec/lib/tasks/budgets_spec.rb @@ -3,6 +3,7 @@ require "rails_helper" describe Budget do let(:run_rake_task) do + Rake::Task["budgets:set_original_heading_id"].reenable Rake.application.invoke_task("budgets:set_original_heading_id") end @@ -19,4 +20,17 @@ describe Budget do expect(investment.original_heading_id).to equal(heading.id) end + it "does not overwrite original_heading_id when already present" do + original_heading = create(:budget_heading) + new_heading = create(:budget_heading) + investment = create(:budget_investment, heading: original_heading) + investment.update(heading: new_heading) + + expect(investment.original_heading_id).to eq original_heading.id + + run_rake_task + investment.reload + + expect(investment.original_heading_id).to eq original_heading.id + end end