diff --git a/app/mailers/devise_user_mailer.rb b/app/mailers/devise_user_mailer.rb index 77986e421..2fc3446ee 100644 --- a/app/mailers/devise_user_mailer.rb +++ b/app/mailers/devise_user_mailer.rb @@ -5,6 +5,7 @@ class DeviseUserMailer < Devise::Mailer include Devise::Controllers::UrlHelpers # Optional. eg. `confirmation_url` include MailerMonitoringConcern layout 'mailers/layout' + before_action :add_delivery_method, if: :forced_delivery? def template_paths ['devise_mailer'] @@ -16,4 +17,12 @@ class DeviseUserMailer < Devise::Mailer @prefill_token = opts[:prefill_token] super end + + def add_delivery_method + headers[BalancerDeliveryMethod::FORCE_DELIVERY_METHOD_HEADER] = SafeMailer.forced_delivery_method + end + + def forced_delivery? + SafeMailer&.forced_delivery_method.present? + end end diff --git a/spec/mailers/devise_user_mailer_spec.rb b/spec/mailers/devise_user_mailer_spec.rb new file mode 100644 index 000000000..f3c82701f --- /dev/null +++ b/spec/mailers/devise_user_mailer_spec.rb @@ -0,0 +1,16 @@ +RSpec.describe DeviseUserMailer, type: :mailer do + let(:user) { create(:user) } + let(:token) { SecureRandom.hex } + describe '.confirmation_instructions' do + context 'without SafeMailer configured' do + subject { described_class.confirmation_instructions(user, token, opts = {}) } + it { expect(subject[BalancerDeliveryMethod::FORCE_DELIVERY_METHOD_HEADER]&.value).to eq(nil) } + end + context 'with SafeMailer configured' do + let(:forced_delivery_method) { :kikoo } + before { allow(SafeMailer).to receive(:forced_delivery_method).and_return(forced_delivery_method) } + subject { described_class.confirmation_instructions(user, token, opts = {}) } + it { expect(subject[BalancerDeliveryMethod::FORCE_DELIVERY_METHOD_HEADER]&.value).to eq(forced_delivery_method.to_s) } + end + end +end