d64acfdcac
Similarly to Action Mailbox, these tests didn't pass because the skip patch was included before ActiveSupport::TestCase was defined. Moving the patch to the bottom of the file fixes the issue. Once the skip patch was fixed, all of the skips were due to differences in adapters which aren't really test skips as much as tests that should not ever run against those adapters.
103 lines
3.3 KiB
Ruby
103 lines
3.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "helper"
|
|
require "jobs/hello_job"
|
|
require "jobs/enqueue_error_job"
|
|
require "jobs/multiple_kwargs_job"
|
|
require "active_support/core_ext/numeric/time"
|
|
require "minitest/mock"
|
|
|
|
class QueuingTest < ActiveSupport::TestCase
|
|
setup do
|
|
JobBuffer.clear
|
|
end
|
|
|
|
test "run queued job" do
|
|
HelloJob.perform_later
|
|
assert_equal "David says hello", JobBuffer.last_value
|
|
end
|
|
|
|
test "run queued job with arguments" do
|
|
HelloJob.perform_later "Jamie"
|
|
assert_equal "Jamie says hello", JobBuffer.last_value
|
|
end
|
|
|
|
test "run queued job later" do
|
|
result = HelloJob.set(wait_until: 1.second.ago).perform_later "Jamie"
|
|
assert result
|
|
rescue NotImplementedError
|
|
end
|
|
|
|
test "job returned by enqueue has the arguments available" do
|
|
job = HelloJob.perform_later "Jamie"
|
|
assert_equal [ "Jamie" ], job.arguments
|
|
end
|
|
|
|
test "job returned by perform_at has the timestamp available" do
|
|
job = HelloJob.set(wait_until: Time.utc(2014, 1, 1)).perform_later
|
|
assert_equal Time.utc(2014, 1, 1), job.scheduled_at
|
|
rescue NotImplementedError
|
|
end
|
|
|
|
test "job is yielded to block after enqueue with successfully_enqueued property set" do
|
|
HelloJob.perform_later "John" do |job|
|
|
assert_equal "John says hello", JobBuffer.last_value
|
|
assert_equal [ "John" ], job.arguments
|
|
assert_equal true, job.successfully_enqueued?
|
|
assert_nil job.enqueue_error
|
|
end
|
|
end
|
|
|
|
test "when enqueuing raises an EnqueueError job is yielded to block with error set on job" do
|
|
EnqueueErrorJob.perform_later do |job|
|
|
assert_equal false, job.successfully_enqueued?
|
|
assert_equal ActiveJob::EnqueueError, job.enqueue_error.class
|
|
end
|
|
end
|
|
|
|
test "run multiple queued jobs" do
|
|
ActiveJob.perform_all_later(HelloJob.new("Jamie"), HelloJob.new("John"))
|
|
assert_equal ["Jamie says hello", "John says hello"], JobBuffer.values.sort
|
|
end
|
|
|
|
test "run multiple queued jobs passed as array" do
|
|
ActiveJob.perform_all_later([HelloJob.new("Jamie"), HelloJob.new("John")])
|
|
assert_equal ["Jamie says hello", "John says hello"], JobBuffer.values.sort
|
|
end
|
|
|
|
test "run multiple queued jobs of different classes" do
|
|
ActiveJob.perform_all_later([HelloJob.new("Jamie"), MultipleKwargsJob.new(argument1: "John", argument2: 42)])
|
|
assert_equal ["Jamie says hello", "Job with argument1: John, argument2: 42"], JobBuffer.values.sort
|
|
end
|
|
|
|
test "perform_all_later enqueues jobs with schedules" do
|
|
scheduled_job_1 = HelloJob.new("Scheduled 2014")
|
|
scheduled_job_1.set(wait_until: Time.utc(2014, 1, 1))
|
|
|
|
scheduled_job_2 = HelloJob.new("Scheduled 2015")
|
|
scheduled_job_2.scheduled_at = Time.utc(2015, 1, 1)
|
|
|
|
ActiveJob.perform_all_later(scheduled_job_1, scheduled_job_2)
|
|
assert_equal ["Scheduled 2014 says hello", "Scheduled 2015 says hello"], JobBuffer.values.sort
|
|
rescue NotImplementedError
|
|
end
|
|
|
|
test "perform_all_later instrumentation" do
|
|
jobs = HelloJob.new("Jamie"), HelloJob.new("John")
|
|
called = false
|
|
|
|
subscriber = proc do |_, _, _, _, payload|
|
|
called = true
|
|
assert payload[:adapter]
|
|
assert_equal jobs, payload[:jobs]
|
|
assert_equal 2, payload[:enqueued_count]
|
|
end
|
|
|
|
ActiveSupport::Notifications.subscribed(subscriber, "enqueue_all.active_job") do
|
|
ActiveJob.perform_all_later(jobs)
|
|
end
|
|
|
|
assert called
|
|
end
|
|
end
|