diff --git a/lib/sidekiq_unique_jobs/on_conflict/reschedule.rb b/lib/sidekiq_unique_jobs/on_conflict/reschedule.rb index 454b80aa1..1cc8dfb4a 100644 --- a/lib/sidekiq_unique_jobs/on_conflict/reschedule.rb +++ b/lib/sidekiq_unique_jobs/on_conflict/reschedule.rb @@ -21,7 +21,8 @@ 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]) + schedule_in = job_class.get_sidekiq_options["schedule_in"] || 5 + if job_class.set(queue: item["queue"].to_sym).perform_in(schedule_in, *item[ARGS]) reflect(:rescheduled, item) else reflect(:reschedule_failed, item) diff --git a/spec/sidekiq_unique_jobs/on_conflict/reschedule_spec.rb b/spec/sidekiq_unique_jobs/on_conflict/reschedule_spec.rb index da91fe652..1c93f9593 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)