提交 14e278f8 编写于 作者: S Sharang Dashputre

Make `assert_<enqueued|performed>_with()` compare hashes ignoring order of keys

The test helpers now treat `{ a: 1, b: 2 }` and `{ b: 2, a: 1 }` as equals
上级 d99d4a58
......@@ -345,7 +345,7 @@ def assert_no_performed_jobs(only: nil, except: nil, queue: nil, &block)
# end
def assert_enqueued_with(job: nil, args: nil, at: nil, queue: nil)
expected = { job: job, args: args, at: at, queue: queue }.compact
serialized_args = serialize_args_for_assertion(expected)
expected_args = prepare_args_for_assertion(expected)
if block_given?
original_enqueued_jobs_count = enqueued_jobs.count
......@@ -358,7 +358,8 @@ def assert_enqueued_with(job: nil, args: nil, at: nil, queue: nil)
end
matching_job = jobs.find do |enqueued_job|
serialized_args.all? { |key, value| value == enqueued_job[key] }
deserialized_job = deserialize_args_for_assertion(enqueued_job)
expected_args.all? { |key, value| value == deserialized_job[key] }
end
assert matching_job, "No enqueued job found with #{expected}"
......@@ -396,7 +397,7 @@ def assert_enqueued_with(job: nil, args: nil, at: nil, queue: nil)
# end
def assert_performed_with(job: nil, args: nil, at: nil, queue: nil, &block)
expected = { job: job, args: args, at: at, queue: queue }.compact
serialized_args = serialize_args_for_assertion(expected)
expected_args = prepare_args_for_assertion(expected)
if block_given?
original_performed_jobs_count = performed_jobs.count
......@@ -408,8 +409,9 @@ def assert_performed_with(job: nil, args: nil, at: nil, queue: nil, &block)
jobs = performed_jobs
end
matching_job = jobs.find do |performed_job|
serialized_args.all? { |key, value| value == performed_job[key] }
matching_job = jobs.find do |enqueued_job|
deserialized_job = deserialize_args_for_assertion(enqueued_job)
expected_args.all? { |key, value| value == deserialized_job[key] }
end
assert matching_job, "No performed job found with #{expected}"
......@@ -552,10 +554,15 @@ def flush_enqueued_jobs(only: nil, except: nil, queue: nil)
end
end
def serialize_args_for_assertion(args)
args.dup.tap do |serialized_args|
serialized_args[:args] = ActiveJob::Arguments.serialize(serialized_args[:args]) if serialized_args[:args]
serialized_args[:at] = serialized_args[:at].to_f if serialized_args[:at]
def prepare_args_for_assertion(args)
args.dup.tap do |arguments|
arguments[:at] = arguments[:at].to_f if arguments[:at]
end
end
def deserialize_args_for_assertion(job)
job.dup.tap do |job|
job[:args] = ActiveJob::Arguments.deserialize(job[:args]) if job[:args]
end
end
......
......@@ -8,6 +8,7 @@
require "jobs/nested_job"
require "jobs/rescue_job"
require "jobs/inherited_job"
require "jobs/multiple_kwargs_job"
require "models/person"
class EnqueuedJobsTest < ActiveJob::TestCase
......@@ -555,6 +556,12 @@ def test_assert_enqueued_with_with_no_block_with_at_option
assert_enqueued_with(job: HelloJob, at: Date.tomorrow.noon)
end
def test_assert_enqueued_with_with_hash_arg
assert_enqueued_with(job: MultipleKwargsJob, args: [{ argument1: 1, argument2: { a: 1, b: 2 } }]) do
MultipleKwargsJob.perform_later(argument2: { b: 2, a: 1 }, argument1: 1)
end
end
def test_assert_enqueued_with_with_global_id_args
ricardo = Person.new(9)
assert_enqueued_with(job: HelloJob, args: [ricardo]) do
......@@ -1566,6 +1573,12 @@ def test_assert_performed_with_without_block_with_at_option
end
end
def test_assert_performed_with_with_hash_arg
assert_performed_with(job: MultipleKwargsJob, args: [{ argument1: 1, argument2: { a: 1, b: 2 } }]) do
MultipleKwargsJob.perform_later(argument2: { b: 2, a: 1 }, argument1: 1)
end
end
def test_assert_performed_with_with_global_id_args
ricardo = Person.new(9)
assert_performed_with(job: HelloJob, args: [ricardo]) do
......
# frozen_string_literal: true
require_relative "../support/job_buffer"
class MultipleKwargsJob < ActiveJob::Base
def perform(argument1:, argument2:)
JobBuffer.add("Job with argument1: #{argument1}, argument2: #{argument2}")
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册