aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorge Claghorn <george@basecamp.com>2018-10-03 15:14:28 -0400
committerGeorge Claghorn <george@basecamp.com>2018-10-03 15:14:28 -0400
commit7bf2cd437dd3b122aa1c8cb91c282cc9d699fc4c (patch)
tree51456ee74d27799300adb4f005a4571a54e13232
parent16a53e3d5c52a882ff85ec2a678bb49e21a4b3eb (diff)
downloadrails-7bf2cd437dd3b122aa1c8cb91c282cc9d699fc4c.tar.gz
rails-7bf2cd437dd3b122aa1c8cb91c282cc9d699fc4c.tar.bz2
rails-7bf2cd437dd3b122aa1c8cb91c282cc9d699fc4c.zip
Add ActionMailbox::Base#bounce_with
-rw-r--r--lib/action_mailbox/base.rb5
-rw-r--r--test/test_helper.rb8
-rw-r--r--test/unit/mailbox/bouncing_test.rb29
3 files changed, 42 insertions, 0 deletions
diff --git a/lib/action_mailbox/base.rb b/lib/action_mailbox/base.rb
index ce1aec01a9..66a3b7fd32 100644
--- a/lib/action_mailbox/base.rb
+++ b/lib/action_mailbox/base.rb
@@ -35,6 +35,11 @@ class ActionMailbox::Base
# Overwrite in subclasses
end
+ def bounce_with(message)
+ inbound_email.bounced!
+ message.deliver_later
+ end
+
private
def track_status_of_inbound_email
inbound_email.processing!
diff --git a/test/test_helper.rb b/test/test_helper.rb
index b042cfb679..264f9e8482 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -32,3 +32,11 @@ if ARGV.include?("-v")
ActiveRecord::Base.logger = Logger.new(STDOUT)
ActiveJob::Base.logger = Logger.new(STDOUT)
end
+
+class BounceMailer < ActionMailer::Base
+ def bounce(to:)
+ mail from: "receiver@example.com", to: to, subject: "Your email was not delivered" do |format|
+ format.html { render plain: "Sorry!" }
+ end
+ end
+end
diff --git a/test/unit/mailbox/bouncing_test.rb b/test/unit/mailbox/bouncing_test.rb
new file mode 100644
index 0000000000..6ac806ba29
--- /dev/null
+++ b/test/unit/mailbox/bouncing_test.rb
@@ -0,0 +1,29 @@
+require_relative '../../test_helper'
+
+class BouncingWithReplyMailbox < ActionMailbox::Base
+ def process
+ bounce_with BounceMailer.bounce(to: mail.from)
+ end
+end
+
+class ActionMailbox::Base::BouncingTest < ActiveSupport::TestCase
+ include ActionMailer::TestHelper
+
+ setup do
+ @inbound_email = create_inbound_email_from_mail \
+ from: "sender@example.com", to: "replies@example.com", subject: "Bounce me"
+ end
+
+ test "bouncing with a reply" do
+ perform_enqueued_jobs only: ActionMailer::DeliveryJob do
+ BouncingWithReplyMailbox.receive @inbound_email
+ end
+
+ assert @inbound_email.bounced?
+ assert_emails 1
+
+ mail = ActionMailer::Base.deliveries.last
+ assert_equal %w[ sender@example.com ], mail.to
+ assert_equal "Your email was not delivered", mail.subject
+ end
+end