diff --git a/activejob/CHANGELOG.md b/activejob/CHANGELOG.md index 2f0d72ccb9..542a4eb2db 100644 --- a/activejob/CHANGELOG.md +++ b/activejob/CHANGELOG.md @@ -1,3 +1,6 @@ +* `assert_enqueued_with` and `assert_performed_with` can now test jobs with relative delay. + + *Vlado Cingel* Please check [6-0-stable](https://github.com/rails/rails/blob/6-0-stable/activejob/CHANGELOG.md) for previous changes. diff --git a/activejob/lib/active_job/test_helper.rb b/activejob/lib/active_job/test_helper.rb index 463020a332..5b1af7da22 100644 --- a/activejob/lib/active_job/test_helper.rb +++ b/activejob/lib/active_job/test_helper.rb @@ -630,7 +630,7 @@ module ActiveJob def prepare_args_for_assertion(args) args.dup.tap do |arguments| - arguments[:at] = arguments[:at].to_f if arguments[:at] + arguments[:at] = round_time_arguments(arguments[:at]) if arguments[:at] arguments[:args] = round_time_arguments(arguments[:args]) if arguments[:args] end end @@ -650,6 +650,7 @@ module ActiveJob def deserialize_args_for_assertion(job) job.dup.tap do |new_job| + new_job[:at] = round_time_arguments(Time.at(new_job[:at])) if new_job[:at] new_job[:args] = ActiveJob::Arguments.deserialize(new_job[:args]) if new_job[:args] end end diff --git a/activejob/test/cases/test_helper_test.rb b/activejob/test/cases/test_helper_test.rb index 32471cfacc..34dfd8eb56 100644 --- a/activejob/test/cases/test_helper_test.rb +++ b/activejob/test/cases/test_helper_test.rb @@ -621,6 +621,12 @@ class EnqueuedJobsTest < ActiveJob::TestCase end end + def test_assert_enqueued_with_with_relative_at_option + assert_enqueued_with(job: HelloJob, at: 5.minutes.from_now) do + HelloJob.set(wait: 5.minutes).perform_later + end + end + def test_assert_enqueued_with_with_no_block_with_at_option HelloJob.set(wait_until: Date.tomorrow.noon).perform_later assert_enqueued_with(job: HelloJob, at: Date.tomorrow.noon) @@ -1663,6 +1669,18 @@ class PerformedJobsTest < ActiveJob::TestCase end end + def test_assert_performed_with_with_relative_at_option + assert_performed_with(job: HelloJob, at: 5.minutes.from_now) do + HelloJob.set(wait: 5.minutes).perform_later + end + + assert_raise ActiveSupport::TestCase::Assertion do + assert_performed_with(job: HelloJob, at: 2.minutes.from_now) do + HelloJob.set(wait: 1.minute).perform_later + end + end + end + def test_assert_performed_with_without_block_with_at_option HelloJob.set(wait_until: Date.tomorrow.noon).perform_later