diff --git a/app/components/procedure/instructeurs_options_component/instructeurs_options_component.html.haml b/app/components/procedure/instructeurs_options_component/instructeurs_options_component.html.haml index d52d50567..caecf2e7a 100644 --- a/app/components/procedure/instructeurs_options_component/instructeurs_options_component.html.haml +++ b/app/components/procedure/instructeurs_options_component/instructeurs_options_component.html.haml @@ -12,8 +12,8 @@ = render Dsfr::ToggleComponent.new(form: f, target: :instructeurs_self_management_enabled, title: 'Autogestion des instructeurs', - hint: "L’autogestion des instructeurs permet aux instructeurs de gérer eux-mêmes la liste des instructeurs de la démarche.#{ ' Lorsque la démarche est routée, l’autogestion est activée d’office et n’est pas désactivable.' if @procedure.routing_enabled? }", - disabled: @procedure.routing_enabled?) + hint: "L’autogestion des instructeurs permet aux instructeurs de gérer eux-mêmes la liste des instructeurs de la démarche.#{ ' Lorsque la démarche est routée, l’autogestion est activée d’office. A moins que votre démarche requiert une validation des instructeurs (ex: signer une clause de confidentialité), nous recommandons de laisser l’autogestion des instructeurs activée.' if @procedure.routing_enabled? }", + disabled: false) %p.fr-mt-2w Routage %p.fr-mt-2w= t('.routing_configuration_notice_1') %p.fr-icon-info-line.fr-hint-text{ aria: { hidden: true } } diff --git a/app/helpers/procedure_helper.rb b/app/helpers/procedure_helper.rb index 6b457c4dc..b1aab0261 100644 --- a/app/helpers/procedure_helper.rb +++ b/app/helpers/procedure_helper.rb @@ -34,10 +34,6 @@ module ProcedureHelper procedure_auto_archive_date(procedure) + ' ' + procedure_auto_archive_time(procedure) end - def can_manage_groupe_instructeurs?(procedure) - procedure.routing_enabled? && current_administrateur&.owns?(procedure) - end - def can_send_groupe_message?(procedure) groupe_instructeur_on_procedure_ids = procedure.groupe_instructeurs.active.ids.sort groupe_instructeur_on_instructeur_ids = current_instructeur.groupe_instructeurs.active.where(procedure: procedure).ids.sort diff --git a/app/models/procedure.rb b/app/models/procedure.rb index ea64bf49a..e15974c94 100644 --- a/app/models/procedure.rb +++ b/app/models/procedure.rb @@ -718,7 +718,7 @@ class Procedure < ApplicationRecord end def instructeurs_self_management? - routing_enabled? || instructeurs_self_management_enabled? + instructeurs_self_management_enabled? end def groupe_instructeurs_but_defaut diff --git a/app/views/instructeurs/procedures/_header.html.haml b/app/views/instructeurs/procedures/_header.html.haml index c4cbf461e..6714ec668 100644 --- a/app/views/instructeurs/procedures/_header.html.haml +++ b/app/views/instructeurs/procedures/_header.html.haml @@ -7,14 +7,15 @@ | = link_to t('instructeurs.dossiers.header.banner.statistics'), stats_instructeur_procedure_path(procedure), class: 'header-link' - - if procedure.instructeurs_self_management? + - if current_administrateur&.owns?(procedure) | - - if can_manage_groupe_instructeurs?(procedure) - = link_to t('instructeurs.dossiers.header.banner.instructeurs'), admin_procedure_groupe_instructeurs_path(procedure), class: 'header-link' - - elsif procedure.routing_enabled? - = link_to t('instructeurs.dossiers.header.banner.instructeurs'), instructeur_groupes_path(procedure), class: 'header-link' - - else - = link_to t('instructeurs.dossiers.header.banner.instructeurs'), instructeur_groupe_path(procedure, procedure.defaut_groupe_instructeur), class: 'header-link' + = link_to t('instructeurs.dossiers.header.banner.instructeurs'), admin_procedure_groupe_instructeurs_path(procedure), class: 'header-link' + - elsif procedure.instructeurs_self_management? && procedure.routing_enabled? + | + = link_to t('instructeurs.dossiers.header.banner.instructeurs'), instructeur_groupes_path(procedure), class: 'header-link' + - elsif procedure.instructeurs_self_management? + | + = link_to t('instructeurs.dossiers.header.banner.instructeurs'), instructeur_groupe_path(procedure, procedure.defaut_groupe_instructeur), class: 'header-link' - if can_send_groupe_message?(procedure) | diff --git a/spec/controllers/instructeurs/procedures_controller_spec.rb b/spec/controllers/instructeurs/procedures_controller_spec.rb index db3da29a8..022c44aa6 100644 --- a/spec/controllers/instructeurs/procedures_controller_spec.rb +++ b/spec/controllers/instructeurs/procedures_controller_spec.rb @@ -257,7 +257,7 @@ describe Instructeurs::ProceduresController, type: :controller do describe "#show" do let(:instructeur) { create(:instructeur) } - let!(:procedure) { create(:procedure, :expirable, instructeurs: [instructeur]) } + let(:procedure) { create(:procedure, :expirable, instructeurs: [instructeur]) } let!(:gi_2) { create(:groupe_instructeur, label: '2', procedure: procedure) } let!(:gi_3) { create(:groupe_instructeur, label: '3', procedure: procedure) } @@ -267,6 +267,39 @@ describe Instructeurs::ProceduresController, type: :controller do get :show, params: { procedure_id: procedure.id, statut: statut } end + describe 'access to groupes_instructeur' do + render_views + let(:procedure) { create(:procedure, instructeurs_self_management_enabled:, instructeurs: [instructeur]) } + + before do + sign_in(instructeur.user) + subject + end + + context 'when instructeurs_self_management? is false' do + let(:instructeurs_self_management_enabled) { false } + it { expect(response.body).not_to have_link(href: admin_procedure_groupe_instructeurs_path(procedure)) } + it { expect(response.body).not_to have_link(href: instructeur_groupes_path(procedure)) } + it { expect(response.body).not_to have_link(href: instructeur_groupe_path(procedure, procedure.defaut_groupe_instructeur)) } + end + + context 'when instructeurs_self_management? is true' do + let(:instructeurs_self_management_enabled) { true } + it { expect(response.body).not_to have_link(href: admin_procedure_groupe_instructeurs_path(procedure)) } + it { expect(response.body).to have_link(href: instructeur_groupes_path(procedure)) } + it { expect(response.body).not_to have_link(href: instructeur_groupe_path(procedure, procedure.defaut_groupe_instructeur)) } + end + + context 'when instructeurs_self_management? is false but as owner of the procedure' do + let(:instructeurs_self_management_enabled) { false } + let(:administrateur) { create(:administrateur, user: instructeur.user) } + let(:procedure) { create(:procedure, :expirable, instructeurs_self_management_enabled:, administrateurs: [administrateur], instructeurs: [instructeur]) } + it { expect(response.body).to have_link(href: admin_procedure_groupe_instructeurs_path(procedure)) } + it { expect(response.body).not_to have_link(href: instructeur_groupes_path(procedure)) } + it { expect(response.body).not_to have_link(href: instructeur_groupe_path(procedure, procedure.defaut_groupe_instructeur)) } + end + end + context "when logged in, and belonging to gi_1, gi_2" do before do sign_in(instructeur.user)