From a6f60379c5e780f43895fbd936f4119b8c43bf2d Mon Sep 17 00:00:00 2001 From: Linda Goldstein Date: Thu, 11 Dec 2025 13:47:58 -0800 Subject: [PATCH] devise fixes? --- lib/mailers/previews/devise_mailer_preview.rb | 30 +++++++----- .../previews/devise_mailer_preview_spec.rb | 46 +++++++++++++++++++ 2 files changed, 64 insertions(+), 12 deletions(-) diff --git a/lib/mailers/previews/devise_mailer_preview.rb b/lib/mailers/previews/devise_mailer_preview.rb index 4d5fb098fb..172dd3c360 100644 --- a/lib/mailers/previews/devise_mailer_preview.rb +++ b/lib/mailers/previews/devise_mailer_preview.rb @@ -35,9 +35,25 @@ def invitation_instructions_as_volunteer preview(volunteer) end - private + def email_changed + user = params.has_key?(:id) ? User.find_by(id: params[:id]) : User.last + if user.nil? + DebugPreviewMailer.invalid_user("user") + else + Devise::Mailer.email_changed(user) + end + end - # Unused email types + def password_change + user = params.has_key?(:id) ? User.find_by(id: params[:id]) : User.last + if user.nil? + DebugPreviewMailer.invalid_user("user") + else + Devise::Mailer.password_change(user) + end + end + + private def update_invitation_sent_at(model) # Set :invitation_sent_at to guarantee the preview works @@ -47,15 +63,5 @@ def update_invitation_sent_at(model) def preview(model) Devise::Mailer.invitation_instructions(model, "faketoken") end - - def email_changed - user = params.has_key?(:id) ? User.find_by(id: params[:id]) : User.last - Devise::Mailer.email_changed(user) - end - - def password_change - user = params.has_key?(:id) ? User.find_by(id: params[:id]) : User.last - Devise::Mailer.password_change(user) - end end # :nocov: diff --git a/spec/mailers/previews/devise_mailer_preview_spec.rb b/spec/mailers/previews/devise_mailer_preview_spec.rb index c57958bd99..ad71af35e9 100644 --- a/spec/mailers/previews/devise_mailer_preview_spec.rb +++ b/spec/mailers/previews/devise_mailer_preview_spec.rb @@ -55,4 +55,50 @@ it { expect(message.to).to eq [volunteer.email] } end + + describe "#email_changed" do + context "When no ID is passed" do + let(:preview) { described_class.new } + let(:email) { preview.email_changed } + + it { expect(email.to).to eq [user.email] } + end + + context "When passed ID is valid" do + let(:preview) { described_class.new(id: user.id) } + let(:email) { preview.email_changed } + + it { expect(email.to).to eq [user.email] } + end + + context "When passed ID is invalid" do + let(:preview) { described_class.new(id: -1) } + let(:email) { preview.email_changed } + + it { expect(email.to).to eq ["missing_user@example.com"] } + end + end + + describe "#password_change" do + context "When no ID is passed" do + let(:preview) { described_class.new } + let(:email) { preview.password_change } + + it { expect(email.to).to eq [user.email] } + end + + context "When passed ID is valid" do + let(:preview) { described_class.new(id: user.id) } + let(:email) { preview.password_change } + + it { expect(email.to).to eq [user.email] } + end + + context "When passed ID is invalid" do + let(:preview) { described_class.new(id: -1) } + let(:email) { preview.password_change } + + it { expect(email.to).to eq ["missing_user@example.com"] } + end + end end