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