fix(groupe_instructeur): unfollow dossiers when removed from groupe instructeur

This commit is contained in:
Paul Chavard 2021-10-26 22:40:48 +02:00
parent 88c2bfed8e
commit c4b93f8d4a
5 changed files with 43 additions and 32 deletions

View file

@ -14,17 +14,16 @@ module Instructeurs
end end
def add_instructeur def add_instructeur
@instructeur = Instructeur.by_email(instructeur_email) || instructeur = Instructeur.by_email(instructeur_email) ||
create_instructeur(instructeur_email) create_instructeur(instructeur_email)
if groupe_instructeur.instructeurs.include?(@instructeur) if groupe_instructeur.instructeurs.include?(instructeur)
flash[:alert] = "Linstructeur « #{instructeur_email} » est déjà dans le groupe." flash[:alert] = "Linstructeur « #{instructeur_email} » est déjà dans le groupe."
else else
groupe_instructeur.instructeurs << @instructeur groupe_instructeur.instructeurs << instructeur
flash[:notice] = "Linstructeur « #{instructeur_email} » a été affecté au groupe." flash[:notice] = "Linstructeur « #{instructeur_email} » a été affecté au groupe."
GroupeInstructeurMailer GroupeInstructeurMailer
.add_instructeurs(groupe_instructeur, [@instructeur], current_user.email) .add_instructeurs(groupe_instructeur, [instructeur], current_user.email)
.deliver_later .deliver_later
end end
@ -34,14 +33,16 @@ module Instructeurs
def remove_instructeur def remove_instructeur
if groupe_instructeur.instructeurs.one? if groupe_instructeur.instructeurs.one?
flash[:alert] = "Suppression impossible : il doit y avoir au moins un instructeur dans le groupe" flash[:alert] = "Suppression impossible : il doit y avoir au moins un instructeur dans le groupe"
else else
@instructeur = Instructeur.find(instructeur_id) instructeur = Instructeur.find(instructeur_id)
groupe_instructeur.instructeurs.destroy(@instructeur) if instructeur.remove_from_groupe_instructeur(groupe_instructeur)
flash[:notice] = "Linstructeur « #{@instructeur.email} » a été retiré du groupe." flash[:notice] = "Linstructeur « #{instructeur.email} » a été retiré du groupe."
GroupeInstructeurMailer GroupeInstructeurMailer
.remove_instructeur(groupe_instructeur, @instructeur, current_user.email) .remove_instructeur(groupe_instructeur, instructeur, current_user.email)
.deliver_later .deliver_later
else
flash[:alert] = "Linstructeur « #{instructeur.email} » nest pas dans le groupe."
end
end end
redirect_to instructeur_groupe_path(procedure, groupe_instructeur) redirect_to instructeur_groupe_path(procedure, groupe_instructeur)

View file

@ -155,22 +155,22 @@ module NewAdministrateur
def remove_instructeur def remove_instructeur
if groupe_instructeur.instructeurs.one? if groupe_instructeur.instructeurs.one?
flash[:alert] = "Suppression impossible : il doit y avoir au moins un instructeur dans le groupe" flash[:alert] = "Suppression impossible : il doit y avoir au moins un instructeur dans le groupe"
else else
instructeur = Instructeur.find(instructeur_id)
if procedure.routee? if procedure.routee?
@instructeur = Instructeur.find(instructeur_id) if instructeur.remove_from_groupe_instructeur(groupe_instructeur)
groupe_instructeur.instructeurs.destroy(@instructeur) flash[:notice] = "Linstructeur « #{instructeur.email} » a été retiré du groupe."
flash[:notice] = "Linstructeur « #{@instructeur.email} » a été retiré du groupe."
GroupeInstructeurMailer GroupeInstructeurMailer
.remove_instructeur(groupe_instructeur, @instructeur, current_user.email) .remove_instructeur(groupe_instructeur, instructeur, current_user.email)
.deliver_later .deliver_later
else else
flash[:alert] = "Linstructeur « #{instructeur.email} » nest pas dans le groupe."
instructeur = Instructeur.find(instructeur_id) end
if instructeur.remove_from_procedure(procedure)
flash[:notice] = "L'instructeur a bien été désaffecté de la démarche"
else else
flash[:alert] = "Suppression impossible : il doit y avoir au moins un instructeur dans le groupe" if instructeur.remove_from_groupe_instructeur(procedure.defaut_groupe_instructeur)
flash[:notice] = "Linstructeur a bien été désaffecté de la démarche"
else
flash[:alert] = "Linstructeur nest pas affecté à la démarche"
end end
end end
end end

View file

@ -80,9 +80,13 @@ class Instructeur < ApplicationRecord
end end
end end
def remove_from_procedure(procedure) def remove_from_groupe_instructeur(groupe_instructeur)
if procedure.defaut_groupe_instructeur.in?(groupe_instructeurs) if groupe_instructeur.in?(groupe_instructeurs)
groupe_instructeurs.destroy(procedure.defaut_groupe_instructeur) groupe_instructeurs.destroy(groupe_instructeur)
follows
.joins(:dossier)
.where(dossiers: { groupe_instructeur: groupe_instructeur })
.update_all(unfollowed_at: Time.zone.now)
end end
end end

View file

@ -64,9 +64,14 @@ describe Instructeurs::GroupeInstructeursController, type: :controller do
end end
describe '#remove_instructeur' do describe '#remove_instructeur' do
let!(:new_instructeur) { create(:instructeur) } let(:new_instructeur) { create(:instructeur) }
let(:dossier) { create(:dossier) }
before { gi_1_1.instructeurs << instructeur << new_instructeur } before do
gi_1_1.instructeurs << instructeur << new_instructeur
gi_1_1.dossiers << dossier
new_instructeur.followed_dossiers << dossier
end
def remove_instructeur(instructeur) def remove_instructeur(instructeur)
delete :remove_instructeur, delete :remove_instructeur,
@ -82,6 +87,7 @@ describe Instructeurs::GroupeInstructeursController, type: :controller do
it { expect(gi_1_1.instructeurs).to include(instructeur) } it { expect(gi_1_1.instructeurs).to include(instructeur) }
it { expect(gi_1_1.reload.instructeurs.count).to eq(1) } it { expect(gi_1_1.reload.instructeurs.count).to eq(1) }
it { expect(new_instructeur.reload.follows.count).to eq(0) }
it { expect(response).to redirect_to(instructeur_groupe_path(procedure, gi_1_1)) } it { expect(response).to redirect_to(instructeur_groupe_path(procedure, gi_1_1)) }
end end

View file

@ -84,8 +84,8 @@ describe Instructeur, type: :model do
end end
end end
describe "#remove_from_procedure" do describe "#remove_from_groupe_instructeur" do
subject { instructeur.remove_from_procedure(procedure_to_remove) } subject { instructeur.remove_from_groupe_instructeur(procedure_to_remove.defaut_groupe_instructeur) }
context "with an assigned procedure" do context "with an assigned procedure" do
let(:procedure_to_remove) { procedure } let(:procedure_to_remove) { procedure }