90 lines
2.5 KiB
Ruby
90 lines
2.5 KiB
Ruby
require "test_helper"
|
|
|
|
class ApplicationJobTest < ActiveJob::TestCase
|
|
test "should inherit from ActiveJob::Base" do
|
|
assert ApplicationJob < ActiveJob::Base
|
|
end
|
|
|
|
test "should have proper job configuration" do
|
|
# Test that the ApplicationJob is properly configured
|
|
assert_respond_to ApplicationJob, :perform_now
|
|
assert_respond_to ApplicationJob, :perform_later
|
|
end
|
|
|
|
test "should handle job execution" do
|
|
# Create a simple test job to verify the base functionality
|
|
test_job = Class.new(ApplicationJob) do
|
|
def perform(*args)
|
|
args
|
|
end
|
|
end
|
|
|
|
# Test synchronous execution
|
|
result = test_job.perform_now("test", "data")
|
|
assert_equal ["test", "data"], result
|
|
|
|
# Test asynchronous execution using the test helper
|
|
assert_enqueued_jobs 1 do
|
|
test_job.perform_later("test", "data")
|
|
end
|
|
end
|
|
|
|
test "should queue jobs with proper arguments" do
|
|
test_job = Class.new(ApplicationJob) do
|
|
def perform(*args)
|
|
# No-op for testing
|
|
end
|
|
end
|
|
|
|
assert_enqueued_jobs 1 do
|
|
test_job.perform_later("arg1", "arg2", { key: "value" })
|
|
end
|
|
|
|
# Job class name may be nil in test environment, focus on args
|
|
assert_equal ["arg1", "arg2", { key: "value" }], enqueued_jobs.last[:args]
|
|
end
|
|
|
|
test "should have default queue configuration" do
|
|
# Test that jobs have proper queue configuration
|
|
test_job = Class.new(ApplicationJob) do
|
|
def perform(*args)
|
|
# No-op
|
|
end
|
|
end
|
|
|
|
job_instance = test_job.new
|
|
assert_respond_to job_instance, :queue_name
|
|
end
|
|
|
|
test "should handle job serialization and deserialization" do
|
|
# Test that Active Record objects can be properly serialized
|
|
user = users(:alice)
|
|
|
|
test_job = Class.new(ApplicationJob) do
|
|
def perform(user_record)
|
|
user_record.email_address
|
|
end
|
|
end
|
|
|
|
assert_enqueued_jobs 1 do
|
|
test_job.perform_later(user)
|
|
end
|
|
|
|
# Verify the job was queued with user (handling serialization)
|
|
args = enqueued_jobs.last[:args]
|
|
if args.is_a?(Array) && args.first.is_a?(Hash)
|
|
# GlobalID serialization format
|
|
assert_equal user.to_global_id.to_s, args.first['_aj_globalid']
|
|
else
|
|
# Direct object serialization
|
|
assert_equal user.id, args.first.id
|
|
end
|
|
end
|
|
|
|
test "should respect retry configuration" do
|
|
# This tests the framework for retry configuration
|
|
# Individual jobs should inherit this behavior
|
|
assert_respond_to ApplicationJob, :retry_on
|
|
assert_respond_to ApplicationJob, :discard_on
|
|
end
|
|
end |