diff --git a/app/tasks/maintenance/spread_dossier_deletion_task.rb b/app/tasks/maintenance/spread_dossier_deletion_task.rb new file mode 100644 index 000000000..efdcdd83e --- /dev/null +++ b/app/tasks/maintenance/spread_dossier_deletion_task.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +module Maintenance + class SpreadDossierDeletionTask < MaintenanceTasks::Task + ERROR_OCCURED_AT = Date.new(2024, 2, 14) + SPREAD_DURATION_IN_DAYS = 150 + + def collection + Dossier.where(termine_close_to_expiration_notice_sent_at: ERROR_OCCURED_AT) + .in_batches + end + + def process(element) + element.update_all(termine_close_to_expiration_notice_sent_at: ERROR_OCCURED_AT + random_date_spread.days) + end + + # since we do not keep track of current batch idx, + # delay termine_close_to_expiration_notice_sent_at using random approach + # should be good enough + def random_date_spread + rand(1..SPREAD_DURATION_IN_DAYS) + end + end +end diff --git a/spec/tasks/maintenance/spread_dossier_deletion_task_spec.rb b/spec/tasks/maintenance/spread_dossier_deletion_task_spec.rb new file mode 100644 index 000000000..fc84d640c --- /dev/null +++ b/spec/tasks/maintenance/spread_dossier_deletion_task_spec.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require "rails_helper" + +module Maintenance + RSpec.describe SpreadDossierDeletionTask do + describe "#process" do + let(:dossiers) { Dossier.all } + let(:dossier_1) { create(:dossier, termine_close_to_expiration_notice_sent_at: Date.new(2024, 2, 14)) } + let(:dossier_2) { create(:dossier, termine_close_to_expiration_notice_sent_at: Date.new(2024, 2, 14)) } + let(:dossier_3) { create(:dossier, termine_close_to_expiration_notice_sent_at: Date.new(2024, 2, 14)) } + let(:dossier_4) { create(:dossier, termine_close_to_expiration_notice_sent_at: Date.new(2024, 2, 14)) } + subject(:process) { described_class.process(dossiers) } + + it "works" do + expect { subject }.to change { dossier_1.reload.termine_close_to_expiration_notice_sent_at } + end + end + end +end