Ajoute un flag pour qu'un expert ne puisse pas inviter une autre personne à donner son avis sur un dossier

This commit is contained in:
kara Diaby 2020-10-01 18:29:53 +02:00
parent cf08c7c40d
commit 9207cc5aa5
5 changed files with 44 additions and 6 deletions

View file

@ -82,6 +82,10 @@ class ApplicationController < ActionController::Base
Flipper.enabled?(feature_name, current_user)
end
def feature_enabled_for?(feature_name, item)
Flipper.enabled?(feature_name, item)
end
def authenticate_logged_user!
if instructeur_signed_in?
authenticate_instructeur!

View file

@ -71,13 +71,19 @@ module Instructeurs
end
def create_avis
@new_avis = create_avis_from_params(avis.dossier, avis.confidentiel)
@procedure = Procedure.find(params[:procedure_id])
if !feature_enabled_for?(:expert_not_allowed_to_invite, @procedure)
@new_avis = create_avis_from_params(avis.dossier, avis.confidentiel)
if @new_avis.nil?
redirect_to instruction_instructeur_avis_path(avis.procedure, avis)
if @new_avis.nil?
redirect_to instruction_instructeur_avis_path(avis.procedure, avis)
else
set_avis_and_dossier
render :instruction
end
else
set_avis_and_dossier
render :instruction
flash.alert = "Cette démarche ne vous permet pas de demander un avis externe"
redirect_to instruction_instructeur_avis_path(avis.procedure, avis)
end
end

View file

@ -31,7 +31,7 @@
.send-wrapper
= f.submit 'Envoyer votre avis', class: 'button send'
- if !@dossier.termine?
- if !@dossier.termine? && !feature_enabled_for?(:expert_not_allowed_to_invite, @avis.procedure)
= render partial: "instructeurs/shared/avis/form", locals: { url: avis_instructeur_avis_path(@avis.procedure, @avis), linked_dossiers: @dossier.linked_dossiers_for(current_instructeur), must_be_confidentiel: @avis.confidentiel?, avis: @new_avis }
- if @dossier.avis_for(current_instructeur).present?

View file

@ -152,6 +152,26 @@ describe Instructeurs::AvisController, type: :controller do
end
end
describe '#expert_cannot_invite_another_expert' do
let!(:previous_avis) { Avis.create(dossier: dossier, claimant: claimant, instructeur: instructeur, confidentiel: previous_avis_confidentiel) }
let(:previous_avis_confidentiel) { false }
let(:asked_confidentiel) { false }
let(:intro) { 'introduction' }
let(:emails) { ["toto@totomail.com"] }
let(:invite_linked_dossiers) { nil }
before do
Flipper.enable_actor(:expert_not_allowed_to_invite, procedure)
post :create_avis, params: { id: previous_avis.id, procedure_id: procedure.id, avis: { emails: emails, introduction: intro, confidentiel: asked_confidentiel, invite_linked_dossiers: invite_linked_dossiers, introduction_file: @introduction_file } }
end
context 'when the expert cannot invite another expert' do
let(:asked_confidentiel) { false }
it { expect(flash.alert).to eq("Cette démarche ne vous permet pas de demander un avis externe") }
it { expect(response).to redirect_to(instruction_instructeur_avis_path(procedure, previous_avis)) }
end
end
describe '#create_avis' do
let!(:previous_avis) { Avis.create(dossier: dossier, claimant: claimant, instructeur: instructeur, confidentiel: previous_avis_confidentiel) }
let(:emails) { ['a@b.com'] }

View file

@ -20,4 +20,12 @@ describe 'instructeurs/avis/instruction.html.haml', type: :view do
let(:confidentiel) { false }
it { is_expected.to have_text("Cet avis est partagé avec les autres experts") }
end
context 'when an expert is not allowed to invite another expert' do
let(:confidentiel) { false }
before do
Flipper.enable_actor(:expert_not_allowed_to_invite, avis.procedure)
end
it { is_expected.to have_no_text("Inviter des personnes à donner leur avis") }
end
end