From 12fdb125890fc66cb89ac4a524e3c838a8a8f6da Mon Sep 17 00:00:00 2001 From: Klaas Pieter Annema Date: Wed, 3 Jul 2024 11:51:07 +0200 Subject: [PATCH] Support before_enqueue for bulk delivery methods --- app/jobs/noticed/event_job.rb | 2 +- test/jobs/event_job_test.rb | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/app/jobs/noticed/event_job.rb b/app/jobs/noticed/event_job.rb index bf1a51d..eaf817e 100644 --- a/app/jobs/noticed/event_job.rb +++ b/app/jobs/noticed/event_job.rb @@ -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 diff --git a/test/jobs/event_job_test.rb b/test/jobs/event_job_test.rb index 07947dc..1a30d64 100644 --- a/test/jobs/event_job_test.rb +++ b/test/jobs/event_job_test.rb @@ -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 @@ -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