diff --git a/lib/tasks/deployment/20230421091957_fix_defaut_groupe_instructeur_id_for_cloned_procedure.rake b/lib/tasks/deployment/20230421091957_fix_defaut_groupe_instructeur_id_for_cloned_procedure.rake index 16fef0c4a..60bb0766e 100644 --- a/lib/tasks/deployment/20230421091957_fix_defaut_groupe_instructeur_id_for_cloned_procedure.rake +++ b/lib/tasks/deployment/20230421091957_fix_defaut_groupe_instructeur_id_for_cloned_procedure.rake @@ -1,7 +1,9 @@ namespace :after_party do desc 'Deployment task: fix_defaut_groupe_instructeur_id_for_cloned_procedure' task fix_defaut_groupe_instructeur_id_for_cloned_procedure: :environment do + # rubocop:disable DS/Unscoped procedures = Procedure + .unscoped .joins(:groupe_instructeurs) .where.not(parent_procedure_id: nil) .where("procedures.created_at > ?", Time.zone.parse("17/04/2023")) @@ -9,13 +11,18 @@ namespace :after_party do procedures.each do |p| if !p.defaut_groupe_instructeur_id.in?(p.groupe_instructeurs.map(&:id)) wrong_groupe = p.defaut_groupe_instructeur - new_defaut_groupe = p.groupe_instructeurs.find_by(label: p.parent_procedure.defaut_groupe_instructeur.label) + parent_procedure = Procedure.unscoped.find(p.parent_procedure_id) + new_defaut_groupe = p.groupe_instructeurs + .find_by(label: parent_procedure.defaut_groupe_instructeur.label).presence || p.groupe_instructeurs.first + p.update!(defaut_groupe_instructeur: new_defaut_groupe) p.dossiers.where(groupe_instructeur: wrong_groupe).update_all(groupe_instructeur_id: new_defaut_groupe.id) end end + # rubocop:enable DS/Unscoped + AfterParty::TaskRecord .create version: AfterParty::TaskRecorder.new(__FILE__).timestamp end diff --git a/spec/lib/tasks/deployment/20230421091957_fix_defaut_groupe_instructeur_id_for_cloned_procedure_spec.rake b/spec/lib/tasks/deployment/20230421091957_fix_defaut_groupe_instructeur_id_for_cloned_procedure_spec.rake index f5add3d77..51d3bcc3b 100644 --- a/spec/lib/tasks/deployment/20230421091957_fix_defaut_groupe_instructeur_id_for_cloned_procedure_spec.rake +++ b/spec/lib/tasks/deployment/20230421091957_fix_defaut_groupe_instructeur_id_for_cloned_procedure_spec.rake @@ -1,26 +1,38 @@ describe '20230421091957_fix_defaut_groupe_instructeur_id_for_cloned_procedure' do let(:rake_task) { Rake::Task['after_party:fix_defaut_groupe_instructeur_id_for_cloned_procedure'] } - let!(:parent_procedure) { create(:procedure) } - let(:procedure) { create(:procedure, parent_procedure:) } + let!(:parent_procedure) { create(:procedure, hidden_at: Time.zone.now) } + let(:procedure) { create(:procedure, parent_procedure:, hidden_at: Time.zone.now) } + let(:procedure_with_new_groupe) do + create(:procedure, parent_procedure:, hidden_at: Time.zone.now).tap do |p| + p.groupe_instructeurs.first.update!(label: 'a new label') + end + end let(:dossier) { create(:dossier, procedure:) } subject(:run_task) { rake_task.invoke } after(:each) { rake_task.reenable } it 'populates defaut_groupe_instructeur_id' do - procedure.update_columns(defaut_groupe_instructeur_id: parent_procedure.defaut_groupe_instructeur_id) + [procedure, procedure_with_new_groupe].each do |p| + defaut_groupe_instructeur_id = parent_procedure.defaut_groupe_instructeur_id + p.update_columns(defaut_groupe_instructeur_id:) + end dossier - expect(procedure.defaut_groupe_instructeur_id.in?(procedure.groupe_instructeurs.ids)).to be false + expect(procedure_has_defaut_groupe?(procedure)).to be false expect(dossier.groupe_instructeur_id.in?(procedure.groupe_instructeurs.ids)).to be false run_task - procedure.reload - dossier.reload + [procedure, procedure_with_new_groupe, dossier].each(&:reload) - expect(procedure.defaut_groupe_instructeur_id.in?(procedure.groupe_instructeurs.ids)).to be true + expect(procedure_has_defaut_groupe?(procedure)).to be true + expect(procedure_has_defaut_groupe?(procedure_with_new_groupe)).to be true expect(dossier.groupe_instructeur_id.in?(procedure.groupe_instructeurs.ids)).to be true end + + def procedure_has_defaut_groupe?(p) + p.defaut_groupe_instructeur_id.in?(p.groupe_instructeurs.ids) + end end