diff --git a/lib/sidekiq_unique_jobs/on_conflict/reschedule.rb b/lib/sidekiq_unique_jobs/on_conflict/reschedule.rb index 454b80aa1..45f569c28 100644 --- a/lib/sidekiq_unique_jobs/on_conflict/reschedule.rb +++ b/lib/sidekiq_unique_jobs/on_conflict/reschedule.rb @@ -21,7 +21,7 @@ def initialize(item, redis_pool = nil) # This will mess up sidekiq stats because a new job is created def call if sidekiq_job_class? - if job_class.set(queue: item["queue"].to_sym).perform_in(5, *item[ARGS]) + if job_class.set(queue: item["queue"].to_sym).perform_in(schedule_in, *item[ARGS]) reflect(:rescheduled, item) else reflect(:reschedule_failed, item) @@ -30,6 +30,10 @@ def call reflect(:unknown_sidekiq_worker, item) end end + + def schedule_in + job_class.get_sidekiq_options["schedule_in"] || 5 + end end end end diff --git a/spec/sidekiq_unique_jobs/on_conflict/reschedule_spec.rb b/spec/sidekiq_unique_jobs/on_conflict/reschedule_spec.rb index da91fe652..f352ef2b4 100644 --- a/spec/sidekiq_unique_jobs/on_conflict/reschedule_spec.rb +++ b/spec/sidekiq_unique_jobs/on_conflict/reschedule_spec.rb @@ -26,6 +26,21 @@ allow(UniqueJobOnConflictReschedule).to receive(:perform_in).and_call_original end + context "when schedule_in is set to ten seconds" do + around do |block| + UniqueJobOnConflictReschedule.use_options(schedule_in: 10) do + block.call + end + end + + it "schedules a job ten seconds from now" do + expect { call }.to change { schedule_count }.by(1) + + expect(UniqueJobOnConflictReschedule).to have_received(:perform_in) + .with(10, *item["args"]) + end + end + it "schedules a job five seconds from now" do expect { call }.to change { schedule_count }.by(1)