Merge pull request #7935 from betagouv/fix_duplicate_service_in_merge
fix(admin_merge): résout un pb lorsque les 2 admins ont un service avec le mm nom
This commit is contained in:
commit
345e609889
2 changed files with 31 additions and 1 deletions
|
@ -122,7 +122,18 @@ class Administrateur < ApplicationRecord
|
||||||
p.administrateurs.delete(old_admin)
|
p.administrateurs.delete(old_admin)
|
||||||
end
|
end
|
||||||
|
|
||||||
old_admin.services.update_all(administrateur_id: id)
|
old_services = old_admin.services
|
||||||
|
new_service_by_nom = services.index_by(&:nom)
|
||||||
|
|
||||||
|
old_services.each do |old_service|
|
||||||
|
corresponding_service = new_service_by_nom[old_service.nom]
|
||||||
|
if corresponding_service.present?
|
||||||
|
old_service.procedures.update_all(service_id: corresponding_service.id)
|
||||||
|
old_service.destroy
|
||||||
|
else
|
||||||
|
old_service.update(administrateur_id: id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
instructeurs_with_new_admin, instructeurs_without_new_admin = old_admin.instructeurs
|
instructeurs_with_new_admin, instructeurs_without_new_admin = old_admin.instructeurs
|
||||||
.partition { |i| i.administrateurs.exists?(id) }
|
.partition { |i| i.administrateurs.exists?(id) }
|
||||||
|
|
|
@ -133,6 +133,25 @@ describe Administrateur, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when both admins have a service with the same name' do
|
||||||
|
let(:service_1) { create(:service, nom: 'S', administrateur: old_admin) }
|
||||||
|
let(:service_2) { create(:service, nom: 'S', administrateur: new_admin) }
|
||||||
|
let(:procedure_1) { create(:procedure, service: service_1) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
service_1
|
||||||
|
service_2
|
||||||
|
procedure_1
|
||||||
|
subject
|
||||||
|
[new_admin, old_admin, service_2].map(&:reload)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'removes the service from the old one' do
|
||||||
|
expect(old_admin.services).to be_empty
|
||||||
|
expect(service_2.procedures).to include(procedure_1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context 'when the old admin has an instructeur' do
|
context 'when the old admin has an instructeur' do
|
||||||
let(:instructeur) { create(:instructeur) }
|
let(:instructeur) { create(:instructeur) }
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue