From 51c9689af9815e0f2df96c7ea58bd67877ea886a Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Wed, 25 Sep 2024 10:32:28 +0100 Subject: [PATCH] Add rake task to recalculate log status when new validation is triggered --- ..._sales_over_retirement_age_validation.rake | 20 +++++++ ...les_over_retirement_age_validation_spec.rb | 55 +++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 lib/tasks/recalculate_status_after_sales_over_retirement_age_validation.rake create mode 100644 spec/lib/tasks/recalculate_status_after_sales_over_retirement_age_validation_spec.rb diff --git a/lib/tasks/recalculate_status_after_sales_over_retirement_age_validation.rake b/lib/tasks/recalculate_status_after_sales_over_retirement_age_validation.rake new file mode 100644 index 000000000..e827e1c10 --- /dev/null +++ b/lib/tasks/recalculate_status_after_sales_over_retirement_age_validation.rake @@ -0,0 +1,20 @@ +desc "Recalculates status for 2024 logs that will trigger new sales over retirement age soft validation" +task recalculate_status_over_retirement: :environment do + validation_trigger_condition = "(ecstat1 != 5 AND age1 > 66) OR (ecstat2 != 5 AND age2 > 66) OR (ecstat3 != 5 AND age3 > 66) OR (ecstat4 != 5 AND age4 > 66) OR (ecstat5 != 5 AND age5 > 66) OR (ecstat6 != 5 AND age6 > 66)" + SalesLog.filter_by_year(2024).where(status: "pending", status_cache: "completed").where(validation_trigger_condition).find_each do |log| + log.status_cache = log.calculate_status + log.skip_update_status = true + + unless log.save + Rails.logger.info "Could not save changes to pending sales log #{log.id}" + end + end + + SalesLog.filter_by_year(2024).where(status: "completed").where(validation_trigger_condition).find_each do |log| + log.status = log.calculate_status + + unless log.save + Rails.logger.info "Could not save changes to sales log #{log.id}" + end + end +end diff --git a/spec/lib/tasks/recalculate_status_after_sales_over_retirement_age_validation_spec.rb b/spec/lib/tasks/recalculate_status_after_sales_over_retirement_age_validation_spec.rb new file mode 100644 index 000000000..b76380f90 --- /dev/null +++ b/spec/lib/tasks/recalculate_status_after_sales_over_retirement_age_validation_spec.rb @@ -0,0 +1,55 @@ +require "rails_helper" +require "rake" + +RSpec.describe "recalculate_status_after_sales_over_retirement_age_validation" do + describe ":recalculate_status_over_retirement", type: :task do + subject(:task) { Rake::Task["recalculate_status_over_retirement"] } + + before do + Rake.application.rake_require("tasks/recalculate_status_after_sales_over_retirement_age_validation") + Rake::Task.define_task(:environment) + task.reenable + end + + context "when the rake task is run" do + context "and there is a completed sales log that trips the validation" do + let(:log) { create(:sales_log, :completed, ecstat1: 1, age1: 67) } + + before do + log.status = "completed" + log.skip_update_status = true + log.save! + end + + it "sets the log to in progress" do + task.invoke + log.reload + expect(log.status).to eq("in_progress") + end + end + + context "and there is a pending sales log that trips the validation" do + let(:log) { create(:sales_log, :completed, ecstat2: 1, age2: 70) } + + before do + log.status = "pending" + log.status_cache = "completed" + log.skip_update_status = true + log.save! + end + + it "updates the status cache" do + task.invoke + log.reload + expect(log.status_cache).to eq("in_progress") + end + + it "does not change the log status" do + task.invoke + log.reload + expect(log.status).to eq("pending") + end + end + end + end +end