Defect #44300 » mailer_with_deliveries_v2.patch
| app/models/mailer.rb | ||
|---|---|---|
| 31 | 31 |
class DeliveryJob < ActionMailer::MailDeliveryJob |
| 32 | 32 |
include Redmine::JobWrapper |
| 33 | 33 | |
| 34 |
before_enqueue {throw :abort unless Mailer.perform_deliveries?}
|
|
| 35 | ||
| 34 | 36 |
around_enqueue :keep_current_user |
| 35 | 37 |
end |
| 36 | 38 | |
| 39 |
class CurrentDeliveries < ActiveSupport::CurrentAttributes |
|
| 40 |
attribute :disabled |
|
| 41 |
end |
|
| 42 | ||
| 37 | 43 |
self.delivery_job = DeliveryJob |
| 38 | 44 | |
| 39 | 45 |
# Overrides ActionMailer::Base#process in order to set the recipient as the current user |
| ... | ... | |
| 641 | 647 |
end |
| 642 | 648 |
end |
| 643 | 649 | |
| 644 |
# Activates/desactivates email deliveries during +block+ |
|
| 650 |
# Activates/desactivates email deliveries during +block+, in the current |
|
| 651 |
# thread only |
|
| 645 | 652 |
def self.with_deliveries(enabled = true, &) |
| 646 |
was_enabled = ActionMailer::Base.perform_deliveries
|
|
| 647 |
ActionMailer::Base.perform_deliveries = !!enabled
|
|
| 648 |
yield |
|
| 649 |
ensure
|
|
| 650 |
ActionMailer::Base.perform_deliveries = was_enabled
|
|
| 653 |
CurrentDeliveries.set(disabled: !enabled, &)
|
|
| 654 |
end
|
|
| 655 | ||
| 656 |
def self.perform_deliveries?
|
|
| 657 |
ActionMailer::Base.perform_deliveries && !CurrentDeliveries.disabled
|
|
| 651 | 658 |
end |
| 652 | 659 | |
| 653 | 660 |
# Execute the given block with inline sending of emails if the default Async |
| ... | ... | |
| 736 | 743 |
end |
| 737 | 744 | |
| 738 | 745 |
def self.deliver_mail(mail) |
| 746 |
return false unless perform_deliveries? |
|
| 739 | 747 |
return false if mail.to.blank? && mail.cc.blank? && mail.bcc.blank? |
| 740 | 748 | |
| 741 | 749 |
begin |
| test/unit/mailer_test.rb | ||
|---|---|---|
| 1103 | 1103 |
assert ActionMailer::Base.perform_deliveries |
| 1104 | 1104 |
end |
| 1105 | 1105 | |
| 1106 |
def test_with_deliveries_off_should_not_enqueue_delivery_jobs |
|
| 1107 |
previous_adapter = ActionMailer::MailDeliveryJob.queue_adapter |
|
| 1108 |
ActionMailer::MailDeliveryJob.queue_adapter = :test |
|
| 1109 |
Mailer.with_deliveries false do |
|
| 1110 |
Mailer.test_email(User.find(1)).deliver_later |
|
| 1111 |
end |
|
| 1112 |
assert_empty ActionMailer::MailDeliveryJob.queue_adapter.enqueued_jobs |
|
| 1113 |
assert ActionMailer::Base.deliveries.empty? |
|
| 1114 |
ensure |
|
| 1115 |
ActionMailer::MailDeliveryJob.queue_adapter = previous_adapter |
|
| 1116 |
end |
|
| 1117 | ||
| 1118 |
def test_with_deliveries_off_should_not_disable_deliveries_in_other_threads |
|
| 1119 |
Mailer.with_deliveries false do |
|
| 1120 |
Thread.new { Mailer.test_email(User.find(1)).deliver_now }.join
|
|
| 1121 |
end |
|
| 1122 |
assert_equal 1, ActionMailer::Base.deliveries.size |
|
| 1123 |
end |
|
| 1124 | ||
| 1106 | 1125 |
def test_token_for_should_strip_trailing_gt_from_address_with_full_name |
| 1107 | 1126 |
with_settings :mail_from => "Redmine Mailer<no-reply@redmine.org>" do |
| 1108 | 1127 |
assert_match /\Aredmine.issue-\d+\.\d+\.3@redmine.org\z/, |
- « Previous
- 1
- 2
- 3
- Next »