mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-25 07:16:49 +00:00
Test::Unit assert_serializer implemented
So you can assert specific serializer to be used.
This commit is contained in:
committed by
Tema Bolshakov
parent
be6ff586a2
commit
eaedcefa4e
72
lib/action_controller/serialization_test_case.rb
Normal file
72
lib/action_controller/serialization_test_case.rb
Normal file
@@ -0,0 +1,72 @@
|
||||
module ActionController
|
||||
module SerializationAssertions
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
included do
|
||||
setup :setup_subscriptions
|
||||
teardown :teardown_subscriptions
|
||||
end
|
||||
|
||||
def setup_subscriptions
|
||||
@serializers = Hash.new(0)
|
||||
|
||||
ActiveSupport::Notifications.subscribe("!serialize.active_model_serializers") do |name, start, finish, id, payload|
|
||||
serializer = payload[:serializer]
|
||||
@serializers[serializer] += 1
|
||||
end
|
||||
end
|
||||
|
||||
def teardown_subscriptions
|
||||
ActiveSupport::Notifications.unsubscribe("!serialize.active_model_serializers")
|
||||
end
|
||||
|
||||
def process(*args)
|
||||
@serializers = Hash.new(0)
|
||||
super
|
||||
end
|
||||
|
||||
# Asserts that the request was rendered with the appropriate serializers.
|
||||
#
|
||||
# # assert that the "PostSerializer" serializer was rendered
|
||||
# assert_serializer "PostSerializer"
|
||||
#
|
||||
# # assert that the exact serializer "Post" was rendered
|
||||
# assert_serializer %r{\APost.+\Z}
|
||||
#
|
||||
# # assert that no serializer was rendered
|
||||
# assert_serializer nil
|
||||
#
|
||||
def assert_serializer(options = {}, message = nil)
|
||||
# Force body to be read in case the template is being streamed.
|
||||
response.body
|
||||
|
||||
case options
|
||||
when NilClass, Regexp, String, Symbol
|
||||
rendered = @serializers
|
||||
msg = message || "expecting <#{options.inspect}> but rendering with <#{rendered.keys}>"
|
||||
|
||||
matches_serializer =
|
||||
case options
|
||||
when Symbol
|
||||
options = options.to_s.camelize
|
||||
rendered.any? do |serializer, count|
|
||||
serializer == options
|
||||
end
|
||||
when String
|
||||
!options.empty? && rendered.any? do |serializer, count|
|
||||
serializer == options
|
||||
end
|
||||
when Regexp
|
||||
rendered.any? do |serializer, count|
|
||||
serializer.match(options)
|
||||
end
|
||||
when NilClass
|
||||
rendered.blank?
|
||||
end
|
||||
assert matches_serializer, msg
|
||||
else
|
||||
raise ArgumentError, "assert_serializer only accepts a String, Symbol, Regexp, or nil"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user