From e9f5389f8379f10bbde5d1a34609be978ba922b9 Mon Sep 17 00:00:00 2001 From: Lisa Durand Date: Mon, 15 Jul 2024 11:30:30 +0200 Subject: [PATCH] resent email if link too old and better style email --- app/controllers/users/activate_controller.rb | 8 +++++-- app/models/user.rb | 2 +- app/views/user_mailer/invite_tiers.html.haml | 23 +++++++++++++------ .../users/activate_controller_spec.rb | 11 +++++---- 4 files changed, 29 insertions(+), 15 deletions(-) diff --git a/app/controllers/users/activate_controller.rb b/app/controllers/users/activate_controller.rb index 56d9edca7..4ab7c47ac 100644 --- a/app/controllers/users/activate_controller.rb +++ b/app/controllers/users/activate_controller.rb @@ -38,8 +38,12 @@ class Users::ActivateController < ApplicationController user.update!(email_verified_at: Time.zone.now) flash[:notice] = 'Votre email a bien été vérifié' else - flash[:alert] = "le lien est trop vieux" - # to do relancer un lien if user + if user.present? + flash[:alert] = "Ce lien n'est plus valable, un nouveau lien a été envoyé à l'adresse #{user.email}" + User.create_or_promote_to_tiers(user.email, SecureRandom.hex) + else + flash[:alert] = "Un problème est survenu, vous pouvez nous contacter sur #{Current.contact_email}" + end end redirect_to root_path(user) end diff --git a/app/models/user.rb b/app/models/user.rb index e9d7e8a77..22ace59c2 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -136,7 +136,7 @@ class User < ApplicationRecord user end - def self.create_or_promote_to_tiers(email, password, dossier) + def self.create_or_promote_to_tiers(email, password, dossier = nil) user = User .create_with(password: password, confirmed_at: Time.zone.now) .find_or_create_by(email: email) diff --git a/app/views/user_mailer/invite_tiers.html.haml b/app/views/user_mailer/invite_tiers.html.haml index 919918a27..3b3e1ce53 100644 --- a/app/views/user_mailer/invite_tiers.html.haml +++ b/app/views/user_mailer/invite_tiers.html.haml @@ -3,16 +3,25 @@ %p Bonjour, -%p - Un dossier sur la démarche : #{@dossier.procedure.libelle} a été démarré en votre nom par #{@dossier.user.email}. + %p + - if @dossier.present? + Un dossier sur la démarche : #{@dossier.procedure.libelle} a été démarré en votre nom par #{@dossier.user.email}. + - else + Un dossier a été démarré en votre nom sur #{Current.application_name}" + %p + Pour continuer à recevoir les mails concernant votre dossier, vous devez confirmer votre adresse email en cliquant sur ce bouton : + = round_button 'Je confirme', users_confirm_email_url(token: @token), :primary -%p - Pour continuer à recevoir les mails concernant votre dossier, vous devez confirmer votre adresse email en cliquant sur ce lien : + %p + Vous pouvez aussi utiliser ce lien : + = link_to(users_confirm_email_url(token: @token), users_confirm_email_url(token: @token)) - = link_to(users_confirm_email_url(token: @token), users_confirm_email_url(token: @token)) + %p + - if @dossier.present? + Pour en savoir plus, veuillez vous rapprocher de #{@dossier.user.email}. + - else + Nous restons à votre disposition si vous avez besoin d’accompagnement à l'adresse #{link_to CONTACT_EMAIL, "mailto:#{CONTACT_EMAIL}"}. -%p - Pour en savoir plus, veuillez vous rapprocher de #{@dossier.user.email}. = render partial: "layouts/mailers/signature" diff --git a/spec/controllers/users/activate_controller_spec.rb b/spec/controllers/users/activate_controller_spec.rb index fabee4688..c1aa7cc6d 100644 --- a/spec/controllers/users/activate_controller_spec.rb +++ b/spec/controllers/users/activate_controller_spec.rb @@ -61,7 +61,7 @@ describe Users::ActivateController, type: :controller do end end - context 'when the confirmation token is not valid but already used' do + context 'when the confirmation token is valid but already used' do before do get :confirm_email, params: { token: user.confirmation_token } get :confirm_email, params: { token: user.confirmation_token } @@ -74,15 +74,16 @@ describe Users::ActivateController, type: :controller do end context 'when the confirmation token is too old or not valid' do + subject { get :confirm_email, params: { token: user.confirmation_token } } + before do user.update!(confirmation_sent_at: 3.days.ago) - get :confirm_email, params: { token: user.confirmation_token } - user.reload end - it 'redirects to root path with an explanation notice' do + it 'redirects to root path with an explanation notice and it send a new link if user present' do + expect { subject }.to have_enqueued_mail(UserMailer, :invite_tiers) expect(response).to redirect_to(root_path(user)) - expect(flash[:alert]).to eq('le lien est trop vieux') + expect(flash[:alert]).to eq("Ce lien n'est plus valable, un nouveau lien a été envoyé à l'adresse #{user.email}") end end end