From cb38e6db93f009a96167d38de4b1ac9562500e55 Mon Sep 17 00:00:00 2001 From: Adrien Di Pasquale Date: Wed, 6 Nov 2024 11:17:04 +0100 Subject: [PATCH 1/6] =?UTF-8?q?ajout=20spec=20v=C3=A9rifiant=20le=20messag?= =?UTF-8?q?e=20d=E2=80=99erreur=20t=C3=A9l=C3=A9phone=20manquant=20lors=20?= =?UTF-8?q?de=20la=20prise=20de=20rdv=20usager?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../users/online_booking/default_spec.rb | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/spec/features/users/online_booking/default_spec.rb b/spec/features/users/online_booking/default_spec.rb index 8aa6cc7b30..c0f8aa5ec9 100644 --- a/spec/features/users/online_booking/default_spec.rb +++ b/spec/features/users/online_booking/default_spec.rb @@ -375,6 +375,42 @@ end end + describe "validation du numéro de téléphone pour les motifs téléphoniques" do + let!(:territory) { create(:territory, departement_number: "24") } + let!(:organisation) { create(:organisation, territory:) } + let!(:user) { create(:user, phone_number: nil) } + let!(:motif) { create(:motif, :by_phone, organisation:) } + let!(:lieu) { create(:lieu, organisation:) } + let!(:plage_ouverture) do + create(:plage_ouverture, :weekdays, first_day: Date.parse("2024-11-04"), motifs: [motif], lieu: lieu, organisation:, start_time: Tod::TimeOfDay.new(8), end_time: Tod::TimeOfDay.new(12)) + end + + before { travel_to Date.parse("2024-11-03").in_time_zone + 8.hours } + before { login_as(user, scope: :user) } + + context "numéro de tel renseigné et valide" do + it "passe à l’étape suivante" do + visit(new_users_rdv_wizard_step_path(step: 1, departement: "24", motif_id: motif.id, lieu_id: lieu.id, starts_at: Time.zone.parse("2024-11-05 08:00"))) + expect(page).to have_content("Vos informations") + fill_in :user_phone_number, with: "0130303030" + click_button("Continuer") + expect(page).to have_content("Pour qui prenez-vous rendez-vous") + end + end + + context "numéro de tel non renseigné" do + it "reste à l’étape 1 et montre une erreur" do + visit(new_users_rdv_wizard_step_path(step: 1, departement: "24", motif_id: motif.id, lieu_id: lieu.id, starts_at: Time.zone.parse("2024-11-05 08:00"))) + expect(page).to have_content("Vos informations") + # page.execute_script(%{document.querySelector('#user_phone_number').removeAttribute("required")}) + # cette ligne n’est nécessaire que si on passe le test en JS, ou pour reproduire le test dans votre navigateur + click_button("Continuer") + expect(page).not_to have_content("Pour qui prenez-vous rendez-vous") + expect(page).to have_content("Aucun usager n’a de numéro de téléphone renseigné alors que le rendez-vous est téléphonique") + end + end + end + private def execute_search From 4146c5bc988a84a73bcad662b62eb0abc61ded2a Mon Sep 17 00:00:00 2001 From: Adrien Di Pasquale Date: Wed, 6 Nov 2024 09:21:36 +0100 Subject: [PATCH 2/6] =?UTF-8?q?refacto=20de=20la=20d=C3=A9l=C3=A9gation=20?= =?UTF-8?q?des=20erreurs=20dans=20le=20UserRdvWizard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/form_models/user_rdv_wizard.rb | 4 ++-- config/locales/models/rdv.fr.yml | 3 --- config/locales/models/user.fr.yml | 3 +++ 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/form_models/user_rdv_wizard.rb b/app/form_models/user_rdv_wizard.rb index 65272821bb..fdd1a89528 100644 --- a/app/form_models/user_rdv_wizard.rb +++ b/app/form_models/user_rdv_wizard.rb @@ -9,7 +9,6 @@ class Base attr_accessor :rdv, :user delegate :motif, :starts_at, :users, :service, to: :rdv - delegate :errors, to: :rdv def initialize(user, attributes) @user = user @@ -81,6 +80,8 @@ def lieu end class Step1 < Base + delegate :errors, to: :user + validate :phone_number_present_for_motif_by_phone validate do if rdv.requires_ants_predemande_number? @@ -89,7 +90,6 @@ class Step1 < Base ants_pre_demande_number: @user_attributes[:ants_pre_demande_number], ignore_benign_errors: @user_attributes[:ignore_benign_errors] ) - errors.merge!(@user) end end diff --git a/config/locales/models/rdv.fr.yml b/config/locales/models/rdv.fr.yml index 7fb72c244d..7b080df9d4 100644 --- a/config/locales/models/rdv.fr.yml +++ b/config/locales/models/rdv.fr.yml @@ -9,9 +9,6 @@ fr: missing_mobile_phone_or_email: "Vous devez indiquer un numéro de téléphone mobile ou une adresse email pour que l'usager puisse recevoir le lien de visioconférence." starts_at: format: "L’horaire du RDV %{message}" - phone_number: - missing_for_phone_motif: "Aucun usager n’a de numéro de téléphone renseigné alors que le rendez-vous est téléphonique." - format: "%{message}" duration_in_min: must_be_positive: doit être supérieur à 0 lieu: diff --git a/config/locales/models/user.fr.yml b/config/locales/models/user.fr.yml index 072bda5f64..938fe50e72 100644 --- a/config/locales/models/user.fr.yml +++ b/config/locales/models/user.fr.yml @@ -56,6 +56,9 @@ fr: ants_pre_demande_number: &ants_pre_demande_number_errors invalid_format: doit comporter 10 chiffres et lettres unexpected_api_error: n'a pas pu être validé à cause d'une erreur inattendue. Merci de réessayer dans 30 secondes. + phone_number: + missing_for_phone_motif: "Aucun usager n’a de numéro de téléphone renseigné alors que le rendez-vous est téléphonique." + format: "%{message}" warnings: models: user: From 9372e363bb1f64bf45e17f629f897e37ebddace8 Mon Sep 17 00:00:00 2001 From: Adrien Di Pasquale Date: Tue, 12 Nov 2024 12:19:51 +0100 Subject: [PATCH 3/6] =?UTF-8?q?ajout=20de=20specs=20pour=20l=E2=80=99erreu?= =?UTF-8?q?r=20sur=20la=20partie=20admin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/rdv_wizard_steps_controller_spec.rb | 56 ++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/spec/controllers/admin/rdv_wizard_steps_controller_spec.rb b/spec/controllers/admin/rdv_wizard_steps_controller_spec.rb index d0d9cb26c6..1ca270c4b1 100644 --- a/spec/controllers/admin/rdv_wizard_steps_controller_spec.rb +++ b/spec/controllers/admin/rdv_wizard_steps_controller_spec.rb @@ -63,7 +63,7 @@ end end - describe "POST create" do + describe "POST step4" do render_views subject(:create_request) { post :create, params: params } @@ -101,4 +101,58 @@ end end end + + context "POST step2 avec motif téléphonique et l’usager a un numéro de téléphone" do + render_views + let!(:organisation) { create(:organisation) } + let!(:motif) { create(:motif, :by_phone, organisation:) } + let!(:agent) { create(:agent, service: motif.service, basic_role_in_organisations: [organisation]) } + let!(:user) { create(:user, organisations: [organisation], first_name: "François", last_name: "Fictif", phone_number: "0606060606") } + + it "passe à l’étape suivante" do + post( + :create, + params: { + organisation_id: organisation.id, + step: 2, + rdv: { + duration_in_min: 30, + motif_id: motif.id, + starts_at: 2.days.from_now, + user_ids: [user.id], + }, + } + ) + expect(response.status).to eq(302) + redirect_params = Rack::Utils.parse_query(URI.parse(response.location).query) + expect(redirect_params["step"]).to eq("3") + expect(flash[:error]).to be_nil + end + end + + context "POST step2 avec motif téléphonique mais l’usager n’a pas de numéro de téléphone" do + render_views + let!(:organisation) { create(:organisation) } + let!(:motif) { create(:motif, :by_phone, organisation:) } + let!(:agent) { create(:agent, service: motif.service, basic_role_in_organisations: [organisation]) } + let!(:user) { create(:user, organisations: [organisation], first_name: "François", last_name: "Fictif", phone_number: nil) } + + it "affiche une erreur et ne passe pas à l’étape suivante" do + post( + :create, + params: { + organisation_id: organisation.id, + step: 2, + rdv: { + duration_in_min: 30, + motif_id: motif.id, + starts_at: 2.days.from_now, + user_ids: [user.id], + }, + } + ) + expect(response.status).to eq(200) + expect(response.body).to include("Aucun usager n’a de numéro de téléphone renseigné alors que le rendez-vous est téléphonique") + end + end end From b68efb7a9530a3c174601481b0670f531c116856 Mon Sep 17 00:00:00 2001 From: Adrien Di Pasquale Date: Tue, 12 Nov 2024 12:20:26 +0100 Subject: [PATCH 4/6] =?UTF-8?q?correction=20de=20l=E2=80=99affichage=20des?= =?UTF-8?q?=20erreurs=20c=C3=B4t=C3=A9=20admin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/form_models/admin/rdv_wizard_form/step2.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/form_models/admin/rdv_wizard_form/step2.rb b/app/form_models/admin/rdv_wizard_form/step2.rb index c9498d685b..41aedeb6f4 100644 --- a/app/form_models/admin/rdv_wizard_form/step2.rb +++ b/app/form_models/admin/rdv_wizard_form/step2.rb @@ -7,8 +7,9 @@ class Admin::RdvWizardForm::Step2 def phone_number_present_for_motif_by_phone return unless rdv.motif.phone? - users_to_notify = users.map(&:user_to_notify) - errors.add(:phone_number, :missing_for_phone_motif) if users_to_notify.none? { _1.phone_number.present? } + return if users.map(&:user_to_notify).any? { _1.phone_number.present? } + + errors.add :base, "Aucun usager n’a de numéro de téléphone renseigné alors que le rendez-vous est téléphonique" end def can_receive_notification_for_motif_by_visio From 49ba8ed1503ae57496235cf8bd57a269d21fa0ad Mon Sep 17 00:00:00 2001 From: Adrien Di Pasquale Date: Tue, 12 Nov 2024 12:40:23 +0100 Subject: [PATCH 5/6] =?UTF-8?q?am=C3=A9lioration=20du=20message=20c=C3=B4t?= =?UTF-8?q?=C3=A9=20usagers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/locales/models/user.fr.yml | 2 +- spec/features/users/online_booking/default_spec.rb | 2 +- spec/form_models/user_rdv_wizard_spec.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config/locales/models/user.fr.yml b/config/locales/models/user.fr.yml index 938fe50e72..9451628d23 100644 --- a/config/locales/models/user.fr.yml +++ b/config/locales/models/user.fr.yml @@ -57,7 +57,7 @@ fr: invalid_format: doit comporter 10 chiffres et lettres unexpected_api_error: n'a pas pu être validé à cause d'une erreur inattendue. Merci de réessayer dans 30 secondes. phone_number: - missing_for_phone_motif: "Aucun usager n’a de numéro de téléphone renseigné alors que le rendez-vous est téléphonique." + missing_for_phone_motif: "Le numéro de téléphone est obligatoire car le RDV aura lieu par téléphone" format: "%{message}" warnings: models: diff --git a/spec/features/users/online_booking/default_spec.rb b/spec/features/users/online_booking/default_spec.rb index c0f8aa5ec9..7af0d9d79b 100644 --- a/spec/features/users/online_booking/default_spec.rb +++ b/spec/features/users/online_booking/default_spec.rb @@ -406,7 +406,7 @@ # cette ligne n’est nécessaire que si on passe le test en JS, ou pour reproduire le test dans votre navigateur click_button("Continuer") expect(page).not_to have_content("Pour qui prenez-vous rendez-vous") - expect(page).to have_content("Aucun usager n’a de numéro de téléphone renseigné alors que le rendez-vous est téléphonique") + expect(page).to have_content("Le numéro de téléphone est obligatoire car le RDV aura lieu par téléphone") end end end diff --git a/spec/form_models/user_rdv_wizard_spec.rb b/spec/form_models/user_rdv_wizard_spec.rb index d85c2f31e5..ada174ec29 100644 --- a/spec/form_models/user_rdv_wizard_spec.rb +++ b/spec/form_models/user_rdv_wizard_spec.rb @@ -106,7 +106,7 @@ it "return false with a rdv by_phone and user without phone" do rdv_wizard = UserRdvWizard::Step1.new(user, attributes) rdv_wizard.valid? - expect(rdv_wizard.errors.full_messages.join(", ")).to eq("Aucun usager n’a de numéro de téléphone renseigné alors que le rendez-vous est téléphonique.") + expect(rdv_wizard.errors.full_messages.join(", ")).to eq("Le numéro de téléphone est obligatoire car le RDV aura lieu par téléphone") end end end From dd5dbe1f343a49db3927532a919b5ffe18e47a1f Mon Sep 17 00:00:00 2001 From: Adrien Di Pasquale Date: Tue, 19 Nov 2024 12:19:18 +0100 Subject: [PATCH 6/6] remove expect status 200 after pr review --- spec/controllers/admin/rdv_wizard_steps_controller_spec.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/spec/controllers/admin/rdv_wizard_steps_controller_spec.rb b/spec/controllers/admin/rdv_wizard_steps_controller_spec.rb index 1ca270c4b1..9328e49264 100644 --- a/spec/controllers/admin/rdv_wizard_steps_controller_spec.rb +++ b/spec/controllers/admin/rdv_wizard_steps_controller_spec.rb @@ -151,7 +151,6 @@ }, } ) - expect(response.status).to eq(200) expect(response.body).to include("Aucun usager n’a de numéro de téléphone renseigné alors que le rendez-vous est téléphonique") end end