diff --git a/app/controllers/instructeurs/groupe_instructeur_services_controller.rb b/app/controllers/instructeurs/groupe_instructeur_services_controller.rb index 47094120927..37bd0f7f5d1 100644 --- a/app/controllers/instructeurs/groupe_instructeur_services_controller.rb +++ b/app/controllers/instructeurs/groupe_instructeur_services_controller.rb @@ -9,7 +9,11 @@ def create assign_procedure_and_groupe_instructeur @service = @groupe_instructeur.build_groupe_instructeur_service(service_params) if @service.save - redirect_to instructeur_groupe_path(@groupe_instructeur, procedure_id: @procedure.id), notice: "Le service #{@service.nom} a bien été créé" + if params[:from_admin] == "true" + redirect_to admin_procedure_groupe_instructeur_path(@groupe_instructeur, procedure_id: @procedure.id), notice: "Le service #{@service.nom} a bien été créé" + else + redirect_to instructeur_groupe_path(@groupe_instructeur, procedure_id: @procedure.id), notice: "Le service #{@service.nom} a bien été créé" + end else flash[:alert] = @service.errors.full_messages render :new @@ -25,7 +29,11 @@ def update assign_procedure_and_groupe_instructeur @service = @groupe_instructeur.groupe_instructeur_service if @service.update(service_params) - redirect_to instructeur_groupe_path(@groupe_instructeur, procedure_id: @procedure.id), notice: "Le service #{@service.nom} a bien été modifié" + if params[:from_admin] == "true" + redirect_to admin_procedure_groupe_instructeur_path(@groupe_instructeur, procedure_id: @procedure.id), notice: "Le service #{@service.nom} a bien été modifié" + else + redirect_to instructeur_groupe_path(@groupe_instructeur, procedure_id: @procedure.id), notice: "Le service #{@service.nom} a bien été modifié" + end else flash[:alert] = @service.errors.full_messages render :edit diff --git a/app/views/administrateurs/groupe_instructeurs/_groupe_instructeur_service.html.haml b/app/views/administrateurs/groupe_instructeurs/_groupe_instructeur_service.html.haml index 6a224255437..91a62b20ef3 100644 --- a/app/views/administrateurs/groupe_instructeurs/_groupe_instructeur_service.html.haml +++ b/app/views/administrateurs/groupe_instructeurs/_groupe_instructeur_service.html.haml @@ -5,13 +5,13 @@ = "Le groupe #{groupe_instructeur.label} n'a pas de service associé. Les informations de contact affichées à l'usager seront celles du service de la procédure" %p.mt-3 - if groupe_instructeur.instructeurs.include?(current_administrateur.user.instructeur) - = link_to "+ Nouveau service", new_instructeur_groupe_groupe_instructeur_service_path(procedure_id: procedure.id, groupe_id: groupe_instructeur.id), class: "fr-btn" + = link_to "+ Nouveau service", new_instructeur_groupe_groupe_instructeur_service_path(procedure_id: procedure.id, groupe_id: groupe_instructeur.id, from_admin: true), class: "fr-btn" - else Si vous souhaitez créer un service pour ce groupe, vous devez faire partie du groupe instructeur - else %p.mt-3 - if groupe_instructeur.instructeurs.include?(current_administrateur.user.instructeur) - = link_to "Modifier le service #{service.nom}", edit_instructeur_groupe_groupe_instructeur_service_path(procedure_id: procedure.id, groupe_id: groupe_instructeur.id), class: "fr-btn" + = link_to "Modifier le service #{service.nom}", edit_instructeur_groupe_groupe_instructeur_service_path(procedure_id: procedure.id, groupe_id: groupe_instructeur.id, from_admin: true), class: "fr-btn" - else Si vous souhaitez modifier ce service, vous devez faire partie du groupe instructeur %p.mt-3= "#{service.nom}, #{service.organisme}" diff --git a/app/views/instructeurs/groupe_instructeur_services/_form.html.haml b/app/views/instructeurs/groupe_instructeur_services/_form.html.haml index 02e07a1d0eb..ca89f344756 100644 --- a/app/views/instructeurs/groupe_instructeur_services/_form.html.haml +++ b/app/views/instructeurs/groupe_instructeur_services/_form.html.haml @@ -1,4 +1,5 @@ = form_with url: instructeur_groupe_groupe_instructeur_service_path, model: @service, local: true do |f| + = hidden_field_tag :from_admin, params[:from_admin] = render Dsfr::InputComponent.new(form: f, attribute: :nom, input_type: :text_field) diff --git a/spec/controllers/instructeurs/groupe_instructeur_services_controller_spec.rb b/spec/controllers/instructeurs/groupe_instructeur_services_controller_spec.rb index d85e62dc208..b735b58cb33 100644 --- a/spec/controllers/instructeurs/groupe_instructeur_services_controller_spec.rb +++ b/spec/controllers/instructeurs/groupe_instructeur_services_controller_spec.rb @@ -3,6 +3,7 @@ let(:procedure) { create(:procedure) } let(:assign_to) { create(:assign_to, instructeur: instructeur, groupe_instructeur: build(:groupe_instructeur, procedure: procedure)) } let(:gi) { assign_to.groupe_instructeur } + let(:from_admin) { nil } before do sign_in(instructeur.user) @@ -23,7 +24,8 @@ siret: "35600082800018" }, procedure_id: procedure.id, - groupe_id: gi.id + groupe_id: gi.id, + from_admin: from_admin } end @@ -39,6 +41,15 @@ expect(GroupeInstructeurService.last.horaires).to eq('horaires') expect(GroupeInstructeurService.last.adresse).to eq('adresse') expect(GroupeInstructeurService.last.siret).to eq('35600082800018') + expect(response).to redirect_to(instructeur_groupe_path(gi, procedure_id: procedure.id)) + end + + context 'from admin' do + let(:from_admin) { true } + it do + post :create, params: params + expect(response).to redirect_to(admin_procedure_groupe_instructeur_path(gi, procedure_id: procedure.id)) + end end end @@ -77,7 +88,8 @@ id: service.id, groupe_instructeur_service: service_params, procedure_id: procedure.id, - groupe_id: gi.id + groupe_id: gi.id, + from_admin: from_admin } } @@ -93,6 +105,11 @@ it { expect(response).to redirect_to(instructeur_groupe_path(gi, procedure_id: procedure.id)) } end + context 'when updating a service as an admin' do + let(:from_admin) { true } + it { expect(response).to redirect_to(admin_procedure_groupe_instructeur_path(gi, procedure_id: procedure.id)) } + end + context 'when updating a service with invalid data' do let(:service_params) { { nom: '', type_organisme: GroupeInstructeurService.type_organismes.fetch(:association) } }