lib/active_job/test_helper.rb in activejob-7.0.8.6 vs lib/active_job/test_helper.rb in activejob-7.1.0.beta1
- old
+ new
@@ -352,10 +352,17 @@
#
# MyJob.set(wait_until: Date.tomorrow.noon, queue: "my_queue").perform_later
# assert_enqueued_with(at: Date.tomorrow.noon, queue: "my_queue")
# end
#
+ # For keyword arguments, specify them as a hash inside an array:
+ #
+ # def test_assert_enqueued_with_keyword_arguments
+ # MyJob.perform_later(arg1: 'value1', arg2: 'value2')
+ # assert_enqueued_with(job: MyJob, args: [{ arg1: 'value1', arg2: 'value2' }])
+ # end
+ #
# The given arguments may also be specified as matcher procs that return a
# boolean value indicating whether a job's attribute meets certain criteria.
#
# For example, a proc can be used to match a range of times:
#
@@ -593,13 +600,18 @@
# assert_performed_jobs 1
# end
#
# If the +:at+ option is specified, then only run jobs enqueued to run
# immediately or before the given time
+ #
+ # If an adapter other than the test adapter is in use, this method just yields.
+ # See queue_adapter_for_test for more information.
def perform_enqueued_jobs(only: nil, except: nil, queue: nil, at: nil, &block)
return flush_enqueued_jobs(only: only, except: except, queue: queue, at: at) unless block_given?
+ return _assert_nothing_raised_or_warn("perform_enqueued_jobs", &block) unless using_test_adapter?
+
validate_option(only: only, except: except)
old_perform_enqueued_jobs = queue_adapter.perform_enqueued_jobs
old_perform_enqueued_at_jobs = queue_adapter.perform_enqueued_at_jobs
old_filter = queue_adapter.filter
@@ -634,16 +646,20 @@
def queue_adapter
ActiveJob::Base.queue_adapter
end
private
+ def using_test_adapter?
+ queue_adapter.is_a?(ActiveJob::QueueAdapters::TestAdapter)
+ end
+
def clear_enqueued_jobs
- enqueued_jobs.clear
+ enqueued_jobs.clear if using_test_adapter?
end
def clear_performed_jobs
- performed_jobs.clear
+ performed_jobs.clear if using_test_adapter?
end
def jobs_with(jobs, only: nil, except: nil, queue: nil, at: nil)
validate_option(only: only, except: except)
@@ -692,10 +708,14 @@
end.count
end
def prepare_args_for_assertion(args)
args.dup.tap do |arguments|
+ if arguments[:queue].is_a?(Symbol)
+ arguments[:queue] = arguments[:queue].to_s
+ end
+
if arguments[:at].acts_like?(:time)
at_range = arguments[:at] - 1..arguments[:at] + 1
arguments[:at] = ->(at) { at_range.cover?(at) }
end
end
@@ -708,10 +728,10 @@
end
end
def instantiate_job(payload, skip_deserialize_arguments: false)
job = payload[:job].deserialize(payload)
- job.scheduled_at = Time.at(payload[:at]) if payload.key?(:at)
+ job.scheduled_at = payload[:at].to_f if payload.key?(:at)
job.send(:deserialize_arguments_if_needed) unless skip_deserialize_arguments
job
end
def queue_adapter_changed_jobs