diff --git a/app/controllers/experts/avis_controller.rb b/app/controllers/experts/avis_controller.rb index 5c9ecb34c..a66dec92f 100644 --- a/app/controllers/experts/avis_controller.rb +++ b/app/controllers/experts/avis_controller.rb @@ -83,11 +83,7 @@ module Experts def avis_new @new_avis = Avis.new - if @dossier.procedure.experts_require_administrateur_invitation? - @experts_emails = @dossier.procedure.experts_procedures.where(revoked_at: nil).map { _1.expert.email }.sort - else - @experts_emails = @dossier.procedure.experts.map(&:email).sort - end + @experts_emails = Expert.autocomplete_mails(@dossier.procedure) end def create_avis diff --git a/app/controllers/instructeurs/dossiers_controller.rb b/app/controllers/instructeurs/dossiers_controller.rb index 340a919e3..c4d013794 100644 --- a/app/controllers/instructeurs/dossiers_controller.rb +++ b/app/controllers/instructeurs/dossiers_controller.rb @@ -64,21 +64,13 @@ module Instructeurs def avis @avis_seen_at = current_instructeur.follows.find_by(dossier: dossier)&.avis_seen_at @avis = Avis.new - if @dossier.procedure.experts_require_administrateur_invitation? - @experts_emails = dossier.procedure.experts_procedures.where(revoked_at: nil).map(&:expert).map(&:email).sort - else - @experts_emails = @dossier.procedure.experts.map(&:email).sort - end + @experts_emails = Expert.autocomplete_mails(@dossier.procedure) end def avis_new @avis_seen_at = current_instructeur.follows.find_by(dossier: dossier)&.avis_seen_at @avis = Avis.new - if @dossier.procedure.experts_require_administrateur_invitation? - @experts_emails = dossier.procedure.experts_procedures.where(revoked_at: nil).map(&:expert).map(&:email).sort - else - @experts_emails = @dossier.procedure.experts.map(&:email).sort - end + @experts_emails = Expert.autocomplete_mails(@dossier.procedure) end def personnes_impliquees diff --git a/app/models/expert.rb b/app/models/expert.rb index 3809a7e27..4de28eec3 100644 --- a/app/models/expert.rb +++ b/app/models/expert.rb @@ -29,6 +29,14 @@ class Expert < ApplicationRecord end end + def self.autocomplete_mails(procedure) + if procedure.experts_require_administrateur_invitation? + procedure.experts_procedures.where(revoked_at: nil).map(&:expert).map(&:email).sort + else + procedure.experts.map(&:email).sort + end + end + def merge(old_expert) return if old_expert.nil? diff --git a/spec/controllers/experts/avis_controller_spec.rb b/spec/controllers/experts/avis_controller_spec.rb index 946474bb3..5d5786ddf 100644 --- a/spec/controllers/experts/avis_controller_spec.rb +++ b/spec/controllers/experts/avis_controller_spec.rb @@ -355,26 +355,12 @@ describe Experts::AvisController, type: :controller do end describe '#avis_new' do - let!(:revoked_expert) { create(:experts_procedure, revoked_at: 2.days.ago, procedure: procedure, expert: create(:expert)).expert } before do + allow(Expert).to receive(:autocomplete_mails).and_return([]) get :avis_new, params: { procedure_id: procedure.id, id: avis_without_answer.id } end - context 'when procedure experts need administrateur invitation' do - let!(:procedure) { create(:procedure, experts_require_administrateur_invitation: true) } - it 'limit invited email list to not revoked experts' do - expect(assigns(:experts_emails)).to include(experts_procedure.expert.user.email) - expect(assigns(:experts_emails)).not_to include(revoked_expert.user.email) - end - end - context 'when procedure experts can be anyone' do - let!(:procedure) { create(:procedure, experts_require_administrateur_invitation: false) } - - it 'prefill autocomplete with all experts in the procedure' do - expect(assigns(:experts_emails)).to include(experts_procedure.expert.user.email) - expect(assigns(:experts_emails)).to include(revoked_expert.user.email) - end - end + it { expect(Expert).to have_received(:autocomplete_mails).with(procedure) } end describe '#create_avis' do diff --git a/spec/models/expert_spec.rb b/spec/models/expert_spec.rb index 8f187b5e1..0ec05616d 100644 --- a/spec/models/expert_spec.rb +++ b/spec/models/expert_spec.rb @@ -94,4 +94,33 @@ RSpec.describe Expert, type: :model do end end end + + describe '.autocomplete_mails' do + subject { Expert.autocomplete_mails(procedure) } + + let(:procedure) { create(:procedure, experts_require_administrateur_invitation: true) } + let(:expert) { create(:expert) } + let(:revoked_expert) { create(:expert) } + + before do + procedure.experts << expert << revoked_expert + ExpertsProcedure.find_by(expert: revoked_expert, procedure: procedure) + .update!(revoked_at: 1.day.ago) + end + + context 'when procedure experts need administrateur invitation' do + + it 'returns only not revoked experts' do + expect(subject).to eq([expert.user.email]) + end + end + + context 'when procedure experts can be anyone' do + let(:procedure) { create(:procedure, experts_require_administrateur_invitation: false) } + + it 'prefill autocomplete with all experts in the procedure' do + expect(subject).to eq([expert.user.email, revoked_expert.user.email]) + end + end + end end