Browse Source

Add rake task to recalculate log status when new validation is triggered

pull/2644/head
Rachael Booth 2 years ago
parent
commit
51c9689af9
  1. 20
      lib/tasks/recalculate_status_after_sales_over_retirement_age_validation.rake
  2. 55
      spec/lib/tasks/recalculate_status_after_sales_over_retirement_age_validation_spec.rb

20
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

55
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
Loading…
Cancel
Save