From 1f01e54c1ea4644cfe3dae7de3f99120612df56b Mon Sep 17 00:00:00 2001 From: Ricardo Amendoeira Date: Sun, 19 Oct 2025 01:02:57 +0100 Subject: [PATCH 1/4] Fix #duration when #scheduled_at is not set --- lib/active_job/job_proxy.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/active_job/job_proxy.rb b/lib/active_job/job_proxy.rb index 8a586242..630b62d3 100644 --- a/lib/active_job/job_proxy.rb +++ b/lib/active_job/job_proxy.rb @@ -27,7 +27,7 @@ def perform_now end def duration - finished_at - scheduled_at + finished_at - (scheduled_at || enqueued_at) end ActiveJob::JobsRelation::STATUSES.each do |status| From edea17f67b6f8040b98c67f2d0ec9c90ebec8d23 Mon Sep 17 00:00:00 2001 From: Ricardo Amendoeira Date: Sun, 19 Oct 2025 01:31:23 +0100 Subject: [PATCH 2/4] Update job_proxy_test.rb --- test/active_job/job_proxy_test.rb | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/active_job/job_proxy_test.rb b/test/active_job/job_proxy_test.rb index c8c2446d..e8e1ba5f 100644 --- a/test/active_job/job_proxy_test.rb +++ b/test/active_job/job_proxy_test.rb @@ -6,4 +6,11 @@ class ActiveJob::JobProxyTest < ActiveSupport::TestCase job_proxy = ActiveJob::JobProxy.new(job.serialize) assert_instance_of DummyJob, ActiveJob::Base.deserialize(job_proxy.serialize) end + + test "#duration does not break if scheduled_at is not set" do + job = DummyJob.new(123) + job_proxy = ActiveJob::JobProxy.new(job.serialize) + job_proxy.finished_at = job_proxy.enqueued_at + 5.seconds + assert_equal 5.seconds, job_proxy.duration + end end From 42a8901db7e0d7d7f7f6aad48fcb2dc1975fa67d Mon Sep 17 00:00:00 2001 From: Ricardo Amendoeira Date: Thu, 30 Oct 2025 01:24:47 +0000 Subject: [PATCH 3/4] Rubocop fix --- test/active_job/job_proxy_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/active_job/job_proxy_test.rb b/test/active_job/job_proxy_test.rb index e8e1ba5f..63485f78 100644 --- a/test/active_job/job_proxy_test.rb +++ b/test/active_job/job_proxy_test.rb @@ -11,6 +11,6 @@ class ActiveJob::JobProxyTest < ActiveSupport::TestCase job = DummyJob.new(123) job_proxy = ActiveJob::JobProxy.new(job.serialize) job_proxy.finished_at = job_proxy.enqueued_at + 5.seconds - assert_equal 5.seconds, job_proxy.duration + assert_equal 5.seconds, job_proxy.duration end end From 398b43dba8ddd8561c8df11069d49d79da69b7f0 Mon Sep 17 00:00:00 2001 From: Ricardo Amendoeira Date: Thu, 30 Oct 2025 01:36:26 +0000 Subject: [PATCH 4/4] Add assertion to ensure the scenario is correctly setup --- test/active_job/job_proxy_test.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/active_job/job_proxy_test.rb b/test/active_job/job_proxy_test.rb index 63485f78..2e2ccc14 100644 --- a/test/active_job/job_proxy_test.rb +++ b/test/active_job/job_proxy_test.rb @@ -11,6 +11,8 @@ class ActiveJob::JobProxyTest < ActiveSupport::TestCase job = DummyJob.new(123) job_proxy = ActiveJob::JobProxy.new(job.serialize) job_proxy.finished_at = job_proxy.enqueued_at + 5.seconds + + assert_nil job_proxy.scheduled_at assert_equal 5.seconds, job_proxy.duration end end