From 719adb594a30b71be77f367a7b7017c44c649e3d Mon Sep 17 00:00:00 2001 From: Jason Frey Date: Fri, 24 May 2024 16:29:58 -0400 Subject: [PATCH] Merge pull request #23037 from agrare/add_generic_mailer_deliver! Add a `deliver!` version of `GenericMailer.deliver` (cherry picked from commit 671a04b0685b02d039ead5c9f14cd38c617520f7) --- app/mailers/generic_mailer.rb | 30 +++++++++++++---------------- spec/mailers/generic_mailer_spec.rb | 12 ++++++------ 2 files changed, 19 insertions(+), 23 deletions(-) diff --git a/app/mailers/generic_mailer.rb b/app/mailers/generic_mailer.rb index 541c7f3dd67..33e77718255 100644 --- a/app/mailers/generic_mailer.rb +++ b/app/mailers/generic_mailer.rb @@ -2,19 +2,16 @@ class GenericMailer < ActionMailer::Base include Vmdb::Logging - def self.deliver(method, options = {}) + def self.deliver!(method, options = {}) _log.info("starting: method: #{method} options: #{options} ") options[:attachment] &&= blob_to_attachment(options[:attachment]) options[:sent_on] = Time.now msg = send(method, options) begin - msg.deliver_now - - # catch delivery errors if raised, - rescue Net::SMTPError => e + msg.deliver_now! + rescue Net::SMTPError => e # catch delivery errors if raised invalid = [] - # attempt to resend message to recipients individually rcpts = [msg.to].flatten rcpts.each do |rcpt| @@ -22,30 +19,29 @@ def self.deliver(method, options = {}) options[:to] = to individual = send(method, options) begin - individual.deliver_now + individual.deliver_now! rescue Net::SMTPError invalid << to end end end - _log.error("method: #{method} options: #{options} delivery-error #{e} recipients #{invalid}") - - # connection errors, and other if raised - rescue => e + rescue => e # connection errors, and other if raised _log.error("method: #{method} delivery-error: #{e} attempting to resend") # attempt to deliver one more time - begin - msg.deliver_now - rescue => e - _log.error("method: #{method} options: #{options} delivery-error #{e}") - end + msg.deliver_now! end msg end + def self.deliver(method, options = {}) + deliver!(method, options) + rescue => e # catch delivery errors if raised, + _log.error("method: #{method} options: #{options} delivery-error #{e}") + end + def self.deliver_queue(method, options = {}, queue_options = {}) return unless MiqRegion.my_region.role_assigned?('notifier') @@ -56,7 +52,7 @@ def self.deliver_queue(method, options = {}, queue_options = {}) queue_options.reverse_merge( :service => "notifier", :class_name => name, - :method_name => 'deliver', + :method_name => 'deliver!', :args => [method, options] ) ) diff --git a/spec/mailers/generic_mailer_spec.rb b/spec/mailers/generic_mailer_spec.rb index 0b2a5796c1f..dca67379e23 100644 --- a/spec/mailers/generic_mailer_spec.rb +++ b/spec/mailers/generic_mailer_spec.rb @@ -23,14 +23,14 @@ expect(BinaryBlob.count).to eq(0) GenericMailer.deliver_queue(:generic_notification, @args) expect(BinaryBlob.count).to eq(1) - expect(MiqQueue.exists?(:method_name => 'deliver', + expect(MiqQueue.exists?(:method_name => 'deliver!', :class_name => described_class.name, :role => 'notifier')).to be_truthy end it "with automation_notification" do GenericMailer.deliver_queue(:automation_notification, @args) - expect(MiqQueue.exists?(:method_name => 'deliver', + expect(MiqQueue.exists?(:method_name => 'deliver!', :class_name => described_class.name, :role => 'notifier')).to be_truthy end @@ -48,7 +48,7 @@ :message => "Queued the action: [generic_notification]" ) expect(BinaryBlob.count).to eq(1) - expect(MiqQueue.exists?(:method_name => 'deliver', + expect(MiqQueue.exists?(:method_name => 'deliver!', :class_name => described_class.name, :role => 'notifier')).to be_truthy end @@ -60,7 +60,7 @@ :status => MiqTask::STATUS_OK, :message => "Queued the action: [automation_notification]" ) - expect(MiqQueue.exists?(:method_name => 'deliver', + expect(MiqQueue.exists?(:method_name => 'deliver!', :class_name => described_class.name, :role => 'notifier')).to be_truthy end @@ -92,7 +92,7 @@ # raises error when delivered msg = @args.merge(:to => 'me@bedrock.gov, you@bedrock.gov') notification = GenericMailer.generic_notification(msg) - allow(notification).to receive(:deliver_now).and_raise(Net::SMTPFatalError.new("fake_response")) + allow(notification).to receive(:deliver_now!).and_raise(Net::SMTPFatalError.new("fake_response")) # send error msg first... expect(GenericMailer) @@ -106,7 +106,7 @@ .and_call_original # send message - GenericMailer.deliver(:generic_notification) + GenericMailer.deliver(:generic_notification, msg) # ensure individual messages were sent expect(ActionMailer::Base.deliveries.size).to eq(2)