From 2b14818a4e65f6599567620c2a252385931c4fa0 Mon Sep 17 00:00:00 2001 From: yalab Date: Mon, 30 Mar 2020 17:51:56 +0900 Subject: [PATCH 1/3] It supports have_enqueud_mail matcher sub class of DeliveryJob. --- lib/rspec/rails/matchers/have_enqueued_mail.rb | 6 +++--- .../rails/matchers/have_enqueued_mail_spec.rb | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/lib/rspec/rails/matchers/have_enqueued_mail.rb b/lib/rspec/rails/matchers/have_enqueued_mail.rb index bab5d0c425..b7756346e9 100644 --- a/lib/rspec/rails/matchers/have_enqueued_mail.rb +++ b/lib/rspec/rails/matchers/have_enqueued_mail.rb @@ -131,15 +131,15 @@ def mail_job_message(job) end def legacy_mail?(job) - job[:job] == ActionMailer::DeliveryJob + job[:job] <= ActionMailer::DeliveryJob end def parameterized_mail?(job) - RSpec::Rails::FeatureCheck.has_action_mailer_parameterized? && job[:job] == ActionMailer::Parameterized::DeliveryJob + RSpec::Rails::FeatureCheck.has_action_mailer_parameterized? && job[:job] <= ActionMailer::Parameterized::DeliveryJob end def unified_mail?(job) - RSpec::Rails::FeatureCheck.has_action_mailer_unified_delivery? && job[:job] == ActionMailer::MailDeliveryJob + RSpec::Rails::FeatureCheck.has_action_mailer_unified_delivery? && job[:job] <= ActionMailer::MailDeliveryJob end end # @api public diff --git a/spec/rspec/rails/matchers/have_enqueued_mail_spec.rb b/spec/rspec/rails/matchers/have_enqueued_mail_spec.rb index 2afdbbeeab..db5575b091 100644 --- a/spec/rspec/rails/matchers/have_enqueued_mail_spec.rb +++ b/spec/rspec/rails/matchers/have_enqueued_mail_spec.rb @@ -21,6 +21,15 @@ class UnifiedMailer < ActionMailer::Base def test_email; end def email_with_args(arg1, arg2); end end + + class SubClassDeliveryJob < ActionMailer::DeliveryJob + end + + class SubClassUnifiedMailer < ActionMailer::Base + self.delivery_job = SubClassDeliveryJob + + def test_email; end + end end end @@ -397,6 +406,12 @@ def self.name; "NonMailerJob"; end a_hash_including(params: {'foo' => 'bar'}, args: [1, 2]) ) end + + it "passes subclass delivery_job" do + expect { + SubClassUnifiedMailer.test_email.deliver_later + }.to have_enqueued_mail(SubClassUnifiedMailer, :test_email) + end end end end From bfbd3e04ee2b012cd5b9dfc518fd4fae810bc2d2 Mon Sep 17 00:00:00 2001 From: yalab Date: Tue, 31 Mar 2020 10:49:53 +0900 Subject: [PATCH 2/3] Fix naming and grammer. --- spec/rspec/rails/matchers/have_enqueued_mail_spec.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/spec/rspec/rails/matchers/have_enqueued_mail_spec.rb b/spec/rspec/rails/matchers/have_enqueued_mail_spec.rb index db5575b091..938b05f520 100644 --- a/spec/rspec/rails/matchers/have_enqueued_mail_spec.rb +++ b/spec/rspec/rails/matchers/have_enqueued_mail_spec.rb @@ -22,11 +22,11 @@ def test_email; end def email_with_args(arg1, arg2); end end - class SubClassDeliveryJob < ActionMailer::DeliveryJob + class DeliveryJobSubClass < ActionMailer::DeliveryJob end - class SubClassUnifiedMailer < ActionMailer::Base - self.delivery_job = SubClassDeliveryJob + class UnifiedMailerWithDeliveryJobSubClass < ActionMailer::Base + self.delivery_job = DeliveryJobSubClass def test_email; end end @@ -407,10 +407,10 @@ def self.name; "NonMailerJob"; end ) end - it "passes subclass delivery_job" do + it "passes when using a mailer with `delivery_job` set to a sub class of `ActionMailer::Base`" do expect { - SubClassUnifiedMailer.test_email.deliver_later - }.to have_enqueued_mail(SubClassUnifiedMailer, :test_email) + UnifiedMailerWithDeliveryJobSubClass.test_email.deliver_later + }.to have_enqueued_mail(UnifiedMailerWithDeliveryJobSubClass, :test_email) end end end From ffd6e8ed086bc129b81ad50d12e0460f41313f36 Mon Sep 17 00:00:00 2001 From: yalab Date: Tue, 31 Mar 2020 10:58:12 +0900 Subject: [PATCH 3/3] Change log for #2305 --- Changelog.md | 1 + spec/rspec/rails/matchers/have_enqueued_mail_spec.rb | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Changelog.md b/Changelog.md index 89b508d102..36f63ba610 100644 --- a/Changelog.md +++ b/Changelog.md @@ -5,6 +5,7 @@ Bug Fixes: * Remove warning when calling `driven_by` in system specs. (Aubin Lorieux, #2302) * Fix comparison of times for `#at` in job matchers. (Jon Rowe, Markus Doits, #2304) +* Fix when using a mailer with `delivery_job` set to a sub class of `ActionMailer::DeliveryJob` (Atsushi Yoshida #2305) ### 4.0.0 / 2020-03-24 [Full Changelog](https://github.com/rspec/rspec-rails/compare/v3.9.1...v4.0.0) diff --git a/spec/rspec/rails/matchers/have_enqueued_mail_spec.rb b/spec/rspec/rails/matchers/have_enqueued_mail_spec.rb index 938b05f520..152e02fffc 100644 --- a/spec/rspec/rails/matchers/have_enqueued_mail_spec.rb +++ b/spec/rspec/rails/matchers/have_enqueued_mail_spec.rb @@ -407,7 +407,7 @@ def self.name; "NonMailerJob"; end ) end - it "passes when using a mailer with `delivery_job` set to a sub class of `ActionMailer::Base`" do + it "passes when using a mailer with `delivery_job` set to a sub class of `ActionMailer::DeliveryJob`" do expect { UnifiedMailerWithDeliveryJobSubClass.test_email.deliver_later }.to have_enqueued_mail(UnifiedMailerWithDeliveryJobSubClass, :test_email)