diff --git a/lib/tasks/deployment/20190826153115_link_dossier_and_groupe_instructeur.rake b/lib/tasks/deployment/20190826153115_link_dossier_and_groupe_instructeur.rake new file mode 100644 index 000000000..623e617d0 --- /dev/null +++ b/lib/tasks/deployment/20190826153115_link_dossier_and_groupe_instructeur.rake @@ -0,0 +1,14 @@ +namespace :after_party do + desc 'Deployment task: link_dossier_and_groupe_instructeur' + task link_dossier_and_groupe_instructeur: :environment do + sql = <<~SQL + UPDATE dossiers SET groupe_instructeur_id = groupe_instructeurs.id + FROM dossiers AS d1 INNER JOIN groupe_instructeurs ON groupe_instructeurs.procedure_id = d1.procedure_id + WHERE dossiers.id = d1.id; + SQL + + ActiveRecord::Base.connection.execute(sql) + + AfterParty::TaskRecord.create version: '20190826153115' + end +end diff --git a/spec/lib/tasks/deployment/20190826153115_link_dossier_and_groupe_instructeur.rake_spec.rb b/spec/lib/tasks/deployment/20190826153115_link_dossier_and_groupe_instructeur.rake_spec.rb new file mode 100644 index 000000000..381e6aa14 --- /dev/null +++ b/spec/lib/tasks/deployment/20190826153115_link_dossier_and_groupe_instructeur.rake_spec.rb @@ -0,0 +1,36 @@ +describe '20190826153115_link_dossier_and_groupe_instructeur.rake' do + let(:rake_task) { Rake::Task['after_party:link_dossier_and_groupe_instructeur'] } + + subject { rake_task.invoke } + after { rake_task.reenable } + + context 'with 3 dossiers' do + let!(:procedure) { create(:procedure) } + let!(:procedure2) { create(:procedure) } + let!(:other_procedure_needed_to_create_dossier) { create(:procedure) } + let!(:other_gi) { other_procedure_needed_to_create_dossier.defaut_groupe_instructeur } + let!(:dossier) { Dossier.create(user: create(:user), procedure_id: procedure.id, groupe_instructeur: other_gi) } + let!(:dossier2) { Dossier.create(user: create(:user), procedure_id: procedure2.id, groupe_instructeur: other_gi) } + let!(:dossier3) { Dossier.create(user: create(:user), procedure_id: procedure2.id, groupe_instructeur: other_gi) } + + before do + [dossier, dossier2, dossier3].each do |d| + d.update_column('groupe_instructeur_id', nil) + end + + other_procedure_needed_to_create_dossier.groupe_instructeurs.destroy_all + other_procedure_needed_to_create_dossier.destroy + end + + it do + expect(dossier.reload.groupe_instructeur_id).to be_nil + subject + expect(Dossier.count).to eq(3) + expect(Procedure.count).to eq(2) + expect(GroupeInstructeur.count).to eq(2) + expect(dossier.reload.groupe_instructeur_id).to eq(procedure.defaut_groupe_instructeur.id) + expect(dossier2.reload.groupe_instructeur_id).to eq(procedure2.defaut_groupe_instructeur.id) + expect(dossier3.reload.groupe_instructeur_id).to eq(procedure2.defaut_groupe_instructeur.id) + end + end +end