unfollow stale instructeurs

when the group instructeur of a dossier is changed, unfollow the
instructeurs who don't belong to the new groupe instructeur
This commit is contained in:
Christophe Robillard 2020-02-25 15:51:30 +01:00
parent f7a4759664
commit fb3d7e45ba
2 changed files with 26 additions and 0 deletions

View file

@ -213,6 +213,7 @@ class Dossier < ApplicationRecord
before_save :build_default_champs, if: Proc.new { groupe_instructeur_id_was.nil? }
before_save :update_search_terms
after_save :unfollow_stale_instructeurs
after_save :send_dossier_received
after_save :send_web_hook
after_create :send_draft_notification_email
@ -645,6 +646,14 @@ class Dossier < ApplicationRecord
end
end
def unfollow_stale_instructeurs
if saved_change_to_groupe_instructeur_id? && saved_change_to_groupe_instructeur_id[0].present?
followers_instructeurs.each do |instructeur|
instructeur.unfollow(self) unless instructeur.groupe_instructeurs.include?(groupe_instructeur)
end
end
end
def self.send_brouillon_expiration_notices
brouillons = Dossier
.brouillon_close_to_expiration

View file

@ -398,6 +398,23 @@ describe Dossier do
it { is_expected.to match([dossier3, dossier4, dossier2]) }
end
describe "#unfollow_stale_instructeurs" do
let(:procedure) { create(:procedure) }
let(:instructeur) { create(:instructeur) }
let(:new_groupe_instructeur) { create(:groupe_instructeur) }
let(:instructeur2) { create(:instructeur, groupe_instructeurs: [procedure.defaut_groupe_instructeur, new_groupe_instructeur]) }
let(:dossier) { create(:dossier, procedure: procedure, state: Dossier.states.fetch(:en_construction)) }
it "unfollows stale instructeurs when groupe instructeur change" do
instructeur.follow(dossier)
instructeur2.follow(dossier)
dossier.reload.update(groupe_instructeur: new_groupe_instructeur)
expect(dossier.reload.followers_instructeurs).not_to include(instructeur)
expect(dossier.reload.followers_instructeurs).to include(instructeur2)
end
end
describe "#send_dossier_received" do
let(:procedure) { create(:procedure) }
let(:dossier) { create(:dossier, procedure: procedure, state: Dossier.states.fetch(:en_construction)) }