diff --git a/activejob/lib/active_job/queue_adapters/test_adapter.rb b/activejob/lib/active_job/queue_adapters/test_adapter.rb index 75111a3b76..37b6e88f8c 100644 --- a/activejob/lib/active_job/queue_adapters/test_adapter.rb +++ b/activejob/lib/active_job/queue_adapters/test_adapter.rb @@ -41,7 +41,11 @@ module ActiveJob private def job_to_hash(job, extras = {}) - { job: job.class, args: job.serialize.fetch("arguments"), queue: job.queue_name }.merge!(extras) + job.serialize.tap do |job_data| + job_data[:job] = job.class + job_data[:args] = job_data.fetch("arguments") + job_data[:queue] = job_data.fetch("queue_name") + end.merge(extras) end def perform_or_enqueue(perform, job, job_data) diff --git a/activejob/lib/active_job/test_helper.rb b/activejob/lib/active_job/test_helper.rb index 8d57ac992f..dc911b8537 100644 --- a/activejob/lib/active_job/test_helper.rb +++ b/activejob/lib/active_job/test_helper.rb @@ -674,10 +674,9 @@ module ActiveJob end def instantiate_job(payload) - args = ActiveJob::Arguments.deserialize(payload[:args]) - job = payload[:job].new(*args) + job = payload[:job].deserialize(payload) job.scheduled_at = Time.at(payload[:at]) if payload.key?(:at) - job.queue_name = payload[:queue] + job.send(:deserialize_arguments_if_needed) job end diff --git a/activejob/test/cases/test_helper_test.rb b/activejob/test/cases/test_helper_test.rb index f72fe2e081..3ac5ff1cd3 100644 --- a/activejob/test/cases/test_helper_test.rb +++ b/activejob/test/cases/test_helper_test.rb @@ -7,6 +7,7 @@ require "jobs/hello_job" require "jobs/logging_job" require "jobs/nested_job" require "jobs/rescue_job" +require "jobs/raising_job" require "jobs/inherited_job" require "jobs/multiple_kwargs_job" require "models/person" @@ -660,7 +661,7 @@ class EnqueuedJobsTest < ActiveJob::TestCase end end assert_match(/No enqueued job found with {:job=>HelloJob, :args=>\[#{wilma.inspect}\]}/, error.message) - assert_match(/Potential matches: {:job=>HelloJob, :args=>\[#\], :queue=>\"default\"}/, error.message) + assert_match(/Potential matches: {.*?:job=>HelloJob, :args=>\[#\], :queue=>\"default\"}/, error.message) end def test_assert_enqueued_with_failure_with_no_block_with_global_id_args @@ -672,7 +673,7 @@ class EnqueuedJobsTest < ActiveJob::TestCase end assert_match(/No enqueued job found with {:job=>HelloJob, :args=>\[#{wilma.inspect}\]}/, error.message) - assert_match(/Potential matches: {:job=>HelloJob, :args=>\[#\], :queue=>\"default\"}/, error.message) + assert_match(/Potential matches: {.*?:job=>HelloJob, :args=>\[#\], :queue=>\"default\"}/, error.message) end def test_assert_enqueued_with_does_not_change_jobs_count @@ -1825,7 +1826,7 @@ class PerformedJobsTest < ActiveJob::TestCase end end assert_match(/No performed job found with {:job=>HelloJob, :args=>\[#{wilma.inspect}\]}/, error.message) - assert_match(/Potential matches: {:job=>HelloJob, :args=>\[#\], :queue=>\"default\"}/, error.message) + assert_match(/Potential matches: {.*?:job=>HelloJob, :args=>\[#\], :queue=>\"default\"}/, error.message) end def test_assert_performed_with_without_block_failure_with_global_id_args @@ -1838,7 +1839,7 @@ class PerformedJobsTest < ActiveJob::TestCase end assert_match(/No performed job found with {:job=>HelloJob, :args=>\[#{wilma.inspect}\]}/, error.message) - assert_match(/Potential matches: {:job=>HelloJob, :args=>\[#\], :queue=>\"default\"}/, error.message) + assert_match(/Potential matches: {.*?:job=>HelloJob, :args=>\[#\], :queue=>\"default\"}/, error.message) end def test_assert_performed_with_does_not_change_jobs_count @@ -1864,6 +1865,16 @@ class PerformedJobsTest < ActiveJob::TestCase assert_equal 2, queue_adapter.performed_jobs.count end + + test "TestAdapter respect max attempts" do + RaisingJob.perform_later + + assert_raises(RaisingJob::MyError) do + perform_enqueued_jobs + end + + assert_equal 2, queue_adapter.enqueued_jobs.count + end end class OverrideQueueAdapterTest < ActiveJob::TestCase diff --git a/activejob/test/jobs/raising_job.rb b/activejob/test/jobs/raising_job.rb new file mode 100644 index 0000000000..ced35c4070 --- /dev/null +++ b/activejob/test/jobs/raising_job.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class RaisingJob < ActiveJob::Base + MyError = Class.new(StandardError) + + retry_on(MyError, attempts: 2) + + def perform + raise MyError + end +end