diff --git a/app/controllers/new_gestionnaire/dossiers_controller.rb b/app/controllers/new_gestionnaire/dossiers_controller.rb index 8bd5cac96..7c98e4af2 100644 --- a/app/controllers/new_gestionnaire/dossiers_controller.rb +++ b/app/controllers/new_gestionnaire/dossiers_controller.rb @@ -32,7 +32,7 @@ module NewGestionnaire end def unfollow - current_gestionnaire.followed_dossiers.delete(dossier) + current_gestionnaire.unfollow(dossier) flash.notice = "Vous ne suivez plus le dossier nº #{dossier.id}" redirect_back(fallback_location: procedures_url) @@ -40,6 +40,7 @@ module NewGestionnaire def archive dossier.update_attributes(archived: true) + current_gestionnaire.unfollow(dossier) redirect_back(fallback_location: procedures_url) end @@ -50,6 +51,7 @@ module NewGestionnaire def create_commentaire Commentaire.create(commentaire_params.merge(email: current_gestionnaire.email, dossier: dossier)) + current_gestionnaire.follow(dossier) flash.notice = "Message envoyé" redirect_to messagerie_dossier_path(dossier.procedure, dossier) end diff --git a/app/models/gestionnaire.rb b/app/models/gestionnaire.rb index 7c4c060ac..5b1344e83 100644 --- a/app/models/gestionnaire.rb +++ b/app/models/gestionnaire.rb @@ -40,6 +40,10 @@ class Gestionnaire < ActiveRecord::Base followed_dossiers << dossier end + def unfollow(dossier) + followed_dossiers.delete(dossier) + end + def follow?(dossier) followed_dossiers.include?(dossier) end diff --git a/spec/controllers/new_gestionnaire/dossiers_controller_spec.rb b/spec/controllers/new_gestionnaire/dossiers_controller_spec.rb index 6610ae4c9..a3b7416d1 100644 --- a/spec/controllers/new_gestionnaire/dossiers_controller_spec.rb +++ b/spec/controllers/new_gestionnaire/dossiers_controller_spec.rb @@ -55,12 +55,15 @@ describe NewGestionnaire::DossiersController, type: :controller do describe '#archive' do before do + gestionnaire.follow(dossier) patch :archive, params: { procedure_id: procedure.id, dossier_id: dossier.id } dossier.reload + gestionnaire.reload end it { expect(dossier.archived).to be true } it { expect(response).to redirect_to(procedures_url) } + it { expect(gestionnaire.followed_dossiers).not_to include(dossier) } end describe '#unarchive' do @@ -121,6 +124,7 @@ describe NewGestionnaire::DossiersController, type: :controller do it { expect(saved_commentaire.email).to eq(gestionnaire.email) } it { expect(saved_commentaire.dossier).to eq(dossier) } it { expect(response).to redirect_to(messagerie_dossier_path(dossier.procedure, dossier)) } + it { expect(gestionnaire.followed_dossiers).to include(dossier) } end describe "#create_avis" do diff --git a/spec/models/gestionnaire_spec.rb b/spec/models/gestionnaire_spec.rb index 8c5e16492..99639c25f 100644 --- a/spec/models/gestionnaire_spec.rb +++ b/spec/models/gestionnaire_spec.rb @@ -32,6 +32,20 @@ describe Gestionnaire, type: :model do end end + describe '#unfollow' do + let(:already_followed_dossier) { create(:dossier) } + before { gestionnaire.followed_dossiers << already_followed_dossier } + + context 'when a gestionnaire unfollow a dossier already followed' do + before do + gestionnaire.unfollow(already_followed_dossier) + already_followed_dossier.reload + end + + it { expect(gestionnaire.follow?(already_followed_dossier)).to be false } + end + end + describe '#follow?' do let!(:dossier) { create :dossier, procedure: procedure } diff --git a/spec/models/procedure_spec.rb b/spec/models/procedure_spec.rb index ef552b86f..632a295c8 100644 --- a/spec/models/procedure_spec.rb +++ b/spec/models/procedure_spec.rb @@ -408,17 +408,21 @@ describe Procedure do let(:procedure) { create(:procedure) } let!(:dossier) { create(:dossier, procedure: procedure) } let!(:dossier2) { create(:dossier, procedure: procedure) } + let(:gestionnaire) { create(:gestionnaire) } it { expect(Dossier.count).to eq(2) } it { expect(Dossier.all).to include(dossier, dossier2) } context "when hidding procedure" do before do + gestionnaire.followed_dossiers << dossier procedure.hide! + gestionnaire.reload end it { expect(procedure.dossiers.count).to eq(0) } it { expect(Dossier.count).to eq(0) } + it { expect(gestionnaire.followed_dossiers).not_to include(dossier) } end end