From e9120f90a7b2e4ae0048d7502eaedef177d2248d Mon Sep 17 00:00:00 2001 From: mfo Date: Wed, 20 Nov 2024 11:35:57 +0100 Subject: [PATCH] feat(instructeurs/back): add back button Co-authored-by: Colin Darie --- .../instructeurs/back_button_component.rb | 11 ++++++ .../back_button_component.en.yml | 3 ++ .../back_button_component.fr.yml | 3 ++ .../dossiers/_header_top.html.haml | 7 ++-- .../instructeurs/procedures/_header.html.haml | 3 +- spec/system/instructeurs/instruction_spec.rb | 34 +++++++++++-------- 6 files changed, 43 insertions(+), 18 deletions(-) create mode 100644 app/components/instructeurs/back_button_component.rb create mode 100644 app/components/instructeurs/back_button_component/back_button_component.en.yml create mode 100644 app/components/instructeurs/back_button_component/back_button_component.fr.yml diff --git a/app/components/instructeurs/back_button_component.rb b/app/components/instructeurs/back_button_component.rb new file mode 100644 index 000000000..316a05d3d --- /dev/null +++ b/app/components/instructeurs/back_button_component.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class Instructeurs::BackButtonComponent < ApplicationComponent + def initialize(to:) + @to = to + end + + def call + link_to "", @to, class: 'back-btn fr-btn fr-btn--secondary fr-btn--sm fr-mr-2w fr-icon-arrow-left-line', title: t('.back') + end +end diff --git a/app/components/instructeurs/back_button_component/back_button_component.en.yml b/app/components/instructeurs/back_button_component/back_button_component.en.yml new file mode 100644 index 000000000..03a61c61e --- /dev/null +++ b/app/components/instructeurs/back_button_component/back_button_component.en.yml @@ -0,0 +1,3 @@ +en: + back: Back to list of files + diff --git a/app/components/instructeurs/back_button_component/back_button_component.fr.yml b/app/components/instructeurs/back_button_component/back_button_component.fr.yml new file mode 100644 index 000000000..e93def053 --- /dev/null +++ b/app/components/instructeurs/back_button_component/back_button_component.fr.yml @@ -0,0 +1,3 @@ +fr: + back: Retour à la liste des dossiers + diff --git a/app/views/instructeurs/dossiers/_header_top.html.haml b/app/views/instructeurs/dossiers/_header_top.html.haml index 583021b7a..45805fbb6 100644 --- a/app/views/instructeurs/dossiers/_header_top.html.haml +++ b/app/views/instructeurs/dossiers/_header_top.html.haml @@ -1,8 +1,11 @@ #header-top.fr-container .flex %div - %h1.fr-h3.fr-mb-1w - = t('show_dossier', scope: [:layouts, :breadcrumb], dossier_id: dossier.id, owner_name: dossier.owner_name) + .flex.fr-mb-1w + = render Instructeurs::BackButtonComponent.new(to: instructeur_procedure_path(dossier.procedure, statut: params[:statut])) + %h1.fr-h3.fr-mb-1w + = t('show_dossier', scope: [:layouts, :breadcrumb], dossier_id: dossier.id, owner_name: dossier.owner_name) + = link_to dossier.procedure.libelle.truncate_words(10), instructeur_procedure_path(dossier.procedure), title: dossier.procedure.libelle, class: "fr-link" .fr-mt-2w.fr-badge-group diff --git a/app/views/instructeurs/procedures/_header.html.haml b/app/views/instructeurs/procedures/_header.html.haml index e862f5b7b..3f8f5e199 100644 --- a/app/views/instructeurs/procedures/_header.html.haml +++ b/app/views/instructeurs/procedures/_header.html.haml @@ -1,5 +1,6 @@ .procedure-header - .clipboard-container + .clipboard-container.flex + = render Instructeurs::BackButtonComponent.new(to: instructeur_procedures_path) %h1.fr-h3.fr-mb-0 = "#{procedure_libelle procedure} (n°#{procedure.id})" %nav.fr-nav#navigation{ role: "navigation", "aria-label": t('instructeurs.dossiers.header.banner.procedure_navigation') } diff --git a/spec/system/instructeurs/instruction_spec.rb b/spec/system/instructeurs/instruction_spec.rb index 5f1c537c0..ff5de21a3 100644 --- a/spec/system/instructeurs/instruction_spec.rb +++ b/spec/system/instructeurs/instruction_spec.rb @@ -38,7 +38,16 @@ describe 'Instructing a dossier:', js: true do expect(page).to have_current_path(instructeur_procedure_path(procedure)) click_on dossier.user.email - expect(page).to have_current_path(instructeur_dossier_path(procedure, dossier)) + expect(page).to have_current_path(instructeur_dossier_path(procedure, dossier, statut: 'a-suivre')) + page.find('.back-btn').click + + click_on 'Suivre le dossier' + click_on 'suivi' + expect(page).to have_current_path(instructeur_procedure_path(procedure, statut: 'suivis')) + + click_on dossier.user.email + expect(page).to have_current_path(instructeur_dossier_path(procedure, 'suivis', dossier)) + expect(page).to have_selector(".back-btn[href=\"#{instructeur_procedure_path(procedure, statut: 'suivis')}\"]") click_on 'Passer en instruction' @@ -70,16 +79,17 @@ describe 'Instructing a dossier:', js: true do dossier.reload expect(dossier.state).to eq(Dossier.states.fetch(:accepte)) expect(dossier.motivation).to eq('a good reason') + # keep back up to date after most action on dossier + expect(page).to have_selector(".back-btn[href=\"#{instructeur_procedure_path(procedure, statut: 'suivis')}\"]") click_on procedure.libelle click_on 'traité' expect(page).to have_button('Repasser en instruction') click_on 'Supprimer le dossier' - click_on 'traité' expect(page).not_to have_button('Repasser en instruction') end - scenario 'An instructeur can add anotations' do + scenario 'An instructeur can add annotations' do log_in(instructeur.email, password) visit instructeur_dossier_path(procedure, dossier) @@ -92,15 +102,6 @@ describe 'Instructing a dossier:', js: true do expect(page).to have_text 'Annotations enregistrées' end - scenario 'An instructeur can destroy a dossier from view' do - log_in(instructeur.email, password) - - dossier.passer_en_instruction(instructeur: instructeur) - dossier.accepter!(instructeur: instructeur) - visit instructeur_dossier_path(procedure, dossier) - click_on 'Supprimer le dossier' - end - scenario 'A instructeur can follow/unfollow a dossier' do log_in(instructeur.email, password) @@ -152,18 +153,20 @@ describe 'Instructing a dossier:', js: true do expect(page).to have_text('Télécharger l’export') end - scenario 'A instructeur can see the personnes impliquées' do + scenario 'A instructeur can see the personnes impliquées and statut is maintened over avis/personnes impliquee paths', chrome: true do instructeur2 = create(:instructeur, password: password) log_in(instructeur.email, password) click_on procedure.libelle + click_on 'Suivre le dossier' + click_on 'suivi' click_on dossier.user.email click_on 'Avis externes' - expect(page).to have_current_path(avis_instructeur_dossier_path(procedure, dossier)) + expect(page).to have_current_path(avis_instructeur_dossier_path(procedure, dossier, statut: 'suivis')) within('.fr-sidemenu') { click_on 'Demander un avis' } - expect(page).to have_current_path(avis_new_instructeur_dossier_path(procedure, dossier)) + expect(page).to have_current_path(avis_new_instructeur_dossier_path(procedure, dossier, statut: 'suivis')) expert_email = 'expert@tps.com' ask_confidential_avis(expert_email, 'a good introduction') @@ -171,6 +174,7 @@ describe 'Instructing a dossier:', js: true do ask_confidential_avis(instructeur2.email, 'a good introduction') click_on 'Personnes impliquées' + expect(page).to have_current_path(personnes_impliquees_instructeur_dossier_path(procedure, dossier, statut: 'suivis')) expect(page).to have_text(expert_email) expect(page).to have_text(instructeur2.email) end