Merge pull request #8598 from demarches-simplifiees/prefill-dossier-buttons

feat(prefill): harmonize prefill buttons
This commit is contained in:
Sébastien Carceles 2023-02-09 13:57:42 +01:00 committed by GitHub
commit 9c26d76f28
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 89 additions and 22 deletions

View file

@ -1,17 +1,31 @@
module QueryParamsStoreConcern
extend ActiveSupport::Concern
included do
helper_method :stored_query_params?
end
def store_query_params
# Don't override already stored params, because we could do goings and comings with authentication, and
# lost previously stored params
return if session[:stored_params].present? || request.query_parameters.empty?
return if stored_query_params? || filtered_query_params.empty?
session[:stored_params] = request.query_parameters.to_json
session[:stored_params] = filtered_query_params.to_json
end
def retrieve_and_delete_stored_query_params
return {} if session[:stored_params].blank?
return {} unless stored_query_params?
JSON.parse(session.delete(:stored_params))
end
def stored_query_params?
session[:stored_params].present?
end
private
def filtered_query_params
request.query_parameters.except(:locale, "locale")
end
end

View file

@ -16,15 +16,18 @@
- drafts = dossiers.merge(Dossier.state_brouillon)
- not_drafts = dossiers.merge(Dossier.state_not_brouillon)
- if dossiers.empty?
= link_to t('views.commencer.show.start_procedure'), url_for_new_dossier(@revision), class: 'fr-btn fr-btn--lg fr-my-2w'
- elsif @prefilled_dossier
- if @prefilled_dossier
%h2.huge-title= t('views.commencer.show.prefilled_draft')
%p
= t('views.commencer.show.prefilled_draft_detail_html', time_ago: time_ago_in_words(@prefilled_dossier.created_at), procedure: @prefilled_dossier.procedure.libelle)
= link_to t('views.commencer.show.continue_file'), brouillon_dossier_path(@prefilled_dossier), class: 'fr-btn fr-btn--lg fr-my-2w'
= link_to t('views.commencer.show.start_new_file'), url_for_new_dossier(@revision), class: 'fr-btn fr-btn--lg fr-btn--secondary fr-my-2w'
%p= t('views.commencer.show.prefilled_draft_detail_html', time_ago: time_ago_in_words(@prefilled_dossier.created_at), procedure: @procedure.libelle)
= link_to t('views.commencer.show.go_to_prefilled_file'), brouillon_dossier_path(@prefilled_dossier), class: 'fr-btn fr-btn--lg fr-my-2w'
- elsif stored_query_params?
%h2.huge-title= t('views.commencer.show.prefilled_draft')
%p= t('views.commencer.show.prefill_dossier_detail_html', procedure: @procedure.libelle)
= link_to t('views.commencer.show.go_to_prefilled_file'), url_for_new_dossier(@revision), class: 'fr-btn fr-btn--lg fr-my-2w'
- elsif dossiers.empty?
= link_to t('views.commencer.show.start_procedure'), url_for_new_dossier(@revision), class: 'fr-btn fr-btn--lg fr-my-2w'
- elsif drafts.size == 1 && not_drafts.empty?
- dossier = drafts.first

View file

@ -93,11 +93,13 @@ en:
existing_dossiers: You already have files for this procedure
show_dossiers: View my current files
prefilled_draft: "You have a prefilled file"
prefilled_draft_detail_html: "You prefilled a file for the \"%{procedure}\" procedure <strong>%{time_ago} ago</strong>"
prefilled_draft_detail_html: "You are ready to continue a prefilled file for the \"%{procedure}\" procedure, started <strong>%{time_ago} ago</strong>."
prefill_dossier_detail_html: "You are ready to continue a prefilled file for the \"%{procedure}\" procedure."
already_draft: "You already started to fill a file"
already_draft_detail_html: "You started to fill a file for the \"%{procedure}\" procedure <strong>%{time_ago} ago</strong>"
already_not_draft: "You already submitted a file"
already_not_draft_detail_html: "You submitted a file for the \"%{procedure}\" procedure <strong>%{time_ago} ago</strong>."
go_to_prefilled_file: 'Continue to fill my prefilled file'
continue_file: "Continue to fill my file"
start_new_file: "Start a new file"
show_my_submitted_file: 'Show my submitted file'

View file

@ -84,11 +84,13 @@ fr:
existing_dossiers: Vous avez déjà des dossiers pour cette démarche
show_dossiers: Voir mes dossiers en cours
prefilled_draft: "Vous avez un dossier prérempli"
prefilled_draft_detail_html: "Il y a <strong>%{time_ago}</strong>, vous avez prérempli un dossier sur la démarche « %{procedure} »."
prefilled_draft_detail_html: "Vous êtes prêt·e à poursuivre un dossier prérempli sur la démarche « %{procedure} », commencé il y a <strong>%{time_ago}</strong>."
prefill_dossier_detail_html: "Vous êtes prêt·e à poursuivre un dossier prérempli sur la démarche « %{procedure} »."
already_draft: "Vous avez déjà commencé à remplir un dossier"
already_draft_detail_html: "Il y a <strong>%{time_ago}</strong>, vous avez commencé à remplir un dossier sur la démarche « %{procedure} »."
already_not_draft: "Vous avez déjà déposé un dossier"
already_not_draft_detail_html: "Il y a <strong>%{time_ago}</strong>, vous avez déposé un dossier sur la démarche « %{procedure} »."
go_to_prefilled_file: 'Poursuivre mon dossier prérempli'
continue_file: 'Continuer à remplir mon dossier'
start_new_file: 'Commencer un nouveau dossier'
show_my_submitted_file: 'Voir mon dossier déposé'

View file

@ -15,7 +15,7 @@ RSpec.describe QueryParamsStoreConcern, type: :controller do
let(:params) { { param1: "param1" } }
it "does nothing" do
session[:stored_params] = "there is alread something in there"
session[:stored_params] = "there is already something in there"
expect { store_query_params }.not_to change { session[:stored_params] }
end
@ -36,6 +36,14 @@ RSpec.describe QueryParamsStoreConcern, type: :controller do
expect { store_query_params }.to change { session[:stored_params] }.from(nil).to(params.to_json)
end
end
context 'when params contain a locale' do
let(:params) { { locale: "fr", param2: "param2" } }
it "does not store the locale" do
expect { store_query_params }.to change { session[:stored_params] }.from(nil).to({ param2: "param2" }.to_json)
end
end
end
describe '#retrieve_and_delete_stored_query_params' do
@ -63,4 +71,21 @@ RSpec.describe QueryParamsStoreConcern, type: :controller do
end
end
end
describe '#stored_query_params?' do
subject(:stored_query_params?) { controller.stored_query_params? }
before { controller.store_query_params }
context 'when query params have been stored' do
let(:params) { { param1: "param1", param2: "param2" } }
it { is_expected.to eq(true) }
end
context 'when query params have not been stored' do
let(:params) { {} }
it { is_expected.to eq(false) }
end
end
end

View file

@ -23,7 +23,7 @@ describe 'Prefilling a dossier (with a GET request):' do
"champ_#{type_de_champ_phone.to_typed_id}" => phone_value
)
click_on "Commencer la démarche"
click_on "Poursuivre mon dossier prérempli"
end
end
end
@ -45,7 +45,7 @@ describe 'Prefilling a dossier (with a GET request):' do
click_on "Jai déjà un compte"
sign_in_with user.email, password
click_on "Commencer la démarche"
click_on "Poursuivre mon dossier prérempli"
end
end
end
@ -64,7 +64,7 @@ describe 'Prefilling a dossier (with a GET request):' do
click_confirmation_link_for user_email
expect(page).to have_content('Votre compte a bien été confirmé.')
click_on "Commencer la démarche"
click_on "Poursuivre mon dossier prérempli"
end
end
end
@ -79,7 +79,7 @@ describe 'Prefilling a dossier (with a GET request):' do
page.find('.fr-connect').click
click_on "Commencer la démarche"
click_on "Poursuivre mon dossier prérempli"
end
end
end

View file

@ -27,7 +27,7 @@ describe 'Prefilling a dossier (with a POST request):' do
visit create_and_prefill_dossier_with_post_request
expect(page).to have_content('Vous avez un dossier prérempli')
click_on 'Continuer à remplir mon dossier'
click_on 'Poursuivre mon dossier prérempli'
end
end
end
@ -44,7 +44,7 @@ describe 'Prefilling a dossier (with a POST request):' do
sign_in_with user.email, password
expect(page).to have_content('Vous avez un dossier prérempli')
click_on 'Continuer à remplir mon dossier'
click_on 'Poursuivre mon dossier prérempli'
end
end
end
@ -64,7 +64,7 @@ describe 'Prefilling a dossier (with a POST request):' do
expect(page).to have_content('Votre compte a bien été confirmé.')
expect(page).to have_content('Vous avez un dossier prérempli')
click_on 'Continuer à remplir mon dossier'
click_on 'Poursuivre mon dossier prérempli'
end
end
end
@ -80,7 +80,7 @@ describe 'Prefilling a dossier (with a POST request):' do
page.find('.fr-connect').click
expect(page).to have_content('Vous avez un dossier prérempli')
click_on 'Continuer à remplir mon dossier'
click_on 'Poursuivre mon dossier prérempli'
end
end
end

View file

@ -1,6 +1,7 @@
RSpec.describe 'commencer/show.html.haml', type: :view do
include Rails.application.routes.url_helpers
let(:stored_query_params) { false }
let(:procedure) { create(:procedure, :published, :for_individual, :with_service) }
before do
@ -9,6 +10,8 @@ RSpec.describe 'commencer/show.html.haml', type: :view do
if user
sign_in user
end
allow(view).to receive(:stored_query_params?).and_return(stored_query_params)
end
subject { render }
@ -74,5 +77,23 @@ RSpec.describe 'commencer/show.html.haml', type: :view do
expect(rendered).to have_link('Voir mes dossiers en cours', href: dossiers_path)
end
end
context 'and they have a prefilled dossier' do
let!(:prefilled_dossier) { create(:dossier, :prefilled, user: user, procedure: procedure) }
before { assign(:prefilled_dossier, prefilled_dossier) }
it 'renders a link to resume the prefilled dossier' do
subject
expect(rendered).to have_text(time_ago_in_words(prefilled_dossier.created_at))
expect(rendered).to have_link('Poursuivre mon dossier prérempli', href: brouillon_dossier_path(prefilled_dossier))
end
end
context 'and they have stored query params in order to prefill a dossier' do
let(:stored_query_params) { true }
it_behaves_like 'it renders a link to create a new dossier', 'Poursuivre mon dossier prérempli'
end
end
end