fix(groupe_instructeur): unfollow dossiers when removed from groupe instructeur
This commit is contained in:
parent
88c2bfed8e
commit
c4b93f8d4a
5 changed files with 43 additions and 32 deletions
|
@ -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] = "L’instructeur « #{instructeur_email} » est déjà dans le groupe."
|
flash[:alert] = "L’instructeur « #{instructeur_email} » est déjà dans le groupe."
|
||||||
|
|
||||||
else
|
else
|
||||||
groupe_instructeur.instructeurs << @instructeur
|
groupe_instructeur.instructeurs << instructeur
|
||||||
flash[:notice] = "L’instructeur « #{instructeur_email} » a été affecté au groupe."
|
flash[:notice] = "L’instructeur « #{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] = "L’instructeur « #{@instructeur.email} » a été retiré du groupe."
|
flash[:notice] = "L’instructeur « #{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] = "L’instructeur « #{instructeur.email} » n’est pas dans le groupe."
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
redirect_to instructeur_groupe_path(procedure, groupe_instructeur)
|
redirect_to instructeur_groupe_path(procedure, groupe_instructeur)
|
||||||
|
|
|
@ -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] = "L’instructeur « #{instructeur.email} » a été retiré du groupe."
|
||||||
flash[:notice] = "L’instructeur « #{@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] = "L’instructeur « #{instructeur.email} » n’est 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] = "L’instructeur a bien été désaffecté de la démarche"
|
||||||
|
else
|
||||||
|
flash[:alert] = "L’instructeur n’est pas affecté à la démarche"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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 }
|
||||||
|
|
Loading…
Reference in a new issue