Skip to content

Commit

Permalink
Support before_enqueue for bulk delivery methods
Browse files Browse the repository at this point in the history
  • Loading branch information
klaaspieter committed Jul 3, 2024
1 parent 27b853a commit 12fdb12
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 1 deletion.
2 changes: 1 addition & 1 deletion app/jobs/noticed/event_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ class EventJob < ApplicationJob
def perform(event)
# Enqueue bulk deliveries
event.bulk_delivery_methods.each_value do |deliver_by|
deliver_by.perform_later(event)
deliver_by.perform_later(event) if deliver_by.perform?(event)
end

# Enqueue individual deliveries
Expand Down
21 changes: 21 additions & 0 deletions test/jobs/event_job_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ module ::Noticed
class DeliveryMethods::Test1 < DeliveryMethod; end

class DeliveryMethods::Test2 < DeliveryMethod; end

class BulkDeliveryMethods::Test1 < BulkDeliveryMethod; end

class BulkDeliveryMethods::Test2 < BulkDeliveryMethod; end
end

test "enqueues jobs for each notification and delivery method" do
Expand All @@ -28,4 +32,21 @@ class DeliveryMethods::Test2 < DeliveryMethod; end
event.class.delivery_methods.delete(:test1)
event.class.delivery_methods.delete(:test2)
end

test "skips enqueueing bulk delivery job if before_enqueue raises an error" do
notification = noticed_notifications(:one)
event = notification.event
event.class.bulk_deliver_by :test1 do |config|
config.before_enqueue = -> { false }
end
event.class.bulk_deliver_by :test2 do |config|
config.before_enqueue = -> { throw :abort }
end

Noticed::EventJob.perform_now(event)
assert_enqueued_jobs 4

event.class.bulk_delivery_methods.delete(:test1)
event.class.bulk_delivery_methods.delete(:test2)
end
end

0 comments on commit 12fdb12

Please sign in to comment.