Merge pull request #10729 from mfo/US/fix-errored-data

ETQ usager, je souhaite que me dossier soit debloqué
This commit is contained in:
Colin Darie 2024-08-30 17:45:04 +02:00 committed by GitHub
commit 46547cb2cd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 51 additions and 0 deletions

View file

@ -0,0 +1,24 @@
# frozen_string_literal: true
module Maintenance
class RescueDossierWithInvalidRepetitionTask < MaintenanceTasks::Task
INVALID_RELEASE_DATETIME = DateTime.new(2024, 8, 30, 12)
def collection
Dossier.where("last_champ_updated_at > ?", INVALID_RELEASE_DATETIME).pluck(:id) # heure de l'incident
end
def process(dossier_id)
Dossier.find(dossier_id)
.champs
.filter { _1.row_id.present? && _1.parent_id.blank? }
.each(&:destroy!)
rescue ActiveRecord::RecordNotFound
# some dossier had already been destroyed
end
def count
# Optionally, define the number of rows that will be iterated over
# This is used to track the task's progress
end
end
end

View file

@ -0,0 +1,27 @@
# frozen_string_literal: true
require "rails_helper"
module Maintenance
RSpec.describe RescueDossierWithInvalidRepetitionTask do
describe "#process" do
let(:procedure) { create(:procedure, types_de_champ_public:) }
let(:types_de_champ_public) do
[
{ type: :repetition, children: [{ type: :text, mandatory: true }] },
{ type: :checkbox }
]
end
let(:dossier) { create(:dossier, :with_populated_champs, procedure:) }
let(:invalid_champ) { dossier.champs.find(&:checkbox?) }
# reproduce bad data
before { invalid_champ.update!(row_id: dossier.champs[1].row_id) }
it "dissociate champ having a row_id without a parent_id" do
expect { described_class.process(dossier) }
.to change { Champ.exists?(invalid_champ.id) }.from(true).to(false)
end
end
end
end