module ActiveJob::TestHelper

def perform_enqueued_jobs(only: nil, except: nil, queue: nil, at: nil, &block)

+perform_enqueued_jobs+ will merely execute the block.
If queue_adapter_for_test is overridden to return a different adapter,

that have been enqueued without a time.
to run at or before the given time will be performed. This includes jobs
If the +:at+ option is specified, then only jobs that have been enqueued

end
assert_performed_jobs 1
end
HelloJob.set(queue: :other_queue).perform_later(1, 2, 3) # will not be performed
MyJob.set(queue: :some_queue).perform_later(1, 2, 3) # will be performed
perform_enqueued_jobs queue: :some_queue do
def test_perform_enqueued_jobs_with_queue

then only the job(s) enqueued to a specific queue will be performed.
If the +:queue+ option is specified,

an instance of the job will be passed as argument.
+:only+ and +:except+ options accept Class, Array of Class, or Proc. When passed a Proc,

end
assert_performed_jobs 1
end
HelloJob.perform_later(1, 2, 3) # will not be performed
MyJob.perform_later(1, 2, 3) # will be performed
perform_enqueued_jobs(except: HelloJob) do
def test_perform_enqueued_jobs_with_except

then the job(s) except specific class will be performed.
Also if the +:except+ option is specified,

end
assert_performed_jobs 1
end
HelloJob.perform_later(1, 2, 3) # will not be performed
MyJob.perform_later(1, 2, 3) # will be performed
perform_enqueued_jobs(only: MyJob) do
def test_perform_enqueued_jobs_with_only

then only the listed job(s) will be performed.
This method also supports filtering. If the +:only+ option is specified,

end
assert_performed_jobs 1

perform_enqueued_jobs

MyJob.perform_later(1, 2, 3)
def test_perform_enqueued_jobs_without_block

end
assert_performed_jobs 1
end
MyJob.perform_later(1, 2, 3)
perform_enqueued_jobs do
def test_perform_enqueued_jobs

not given, performs all of the enqueued jobs up to this point in the test.
that were enqueued throughout the duration of the block. If a block is
Performs all enqueued jobs. If a block is given, performs all of the jobs
def perform_enqueued_jobs(only: nil, except: nil, queue: nil, at: nil, &block)
  unless block_given?
    require_active_job_test_adapter!("perform_enqueued_jobs (without a block)")
    return flush_enqueued_jobs(only: only, except: except, queue: queue, at: at)
  end
  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
  old_reject = queue_adapter.reject
  old_queue = queue_adapter.queue
  old_at = queue_adapter.at
  begin
    queue_adapter.perform_enqueued_jobs = true
    queue_adapter.perform_enqueued_at_jobs = true
    queue_adapter.filter = only
    queue_adapter.reject = except
    queue_adapter.queue = queue
    queue_adapter.at = at
    _assert_nothing_raised_or_warn("perform_enqueued_jobs", &block)
  ensure
    queue_adapter.perform_enqueued_jobs = old_perform_enqueued_jobs
    queue_adapter.perform_enqueued_at_jobs = old_perform_enqueued_at_jobs
    queue_adapter.filter = old_filter
    queue_adapter.reject = old_reject
    queue_adapter.queue = old_queue
    queue_adapter.at = old_at
  end
end