Assert with serializer class

This commit is contained in:
Tema Bolshakov 2014-08-20 12:34:34 +04:00
parent 865ab64025
commit c5d9d97f26
2 changed files with 41 additions and 28 deletions

View File

@ -30,6 +30,9 @@ module ActionController
# # assert that the "PostSerializer" serializer was rendered
# assert_serializer "PostSerializer"
#
# # assert that the instance of PostSerializer was rendered
# assert_serializer PostSerializer
#
# # assert that the "PostSerializer" serializer was rendered
# assert_serializer :post_serializer
#
@ -39,16 +42,20 @@ module ActionController
# # 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 =
matches_serializer = case options
when lambda { |options| options.kind_of?(Class) && options < ActiveModel::Serializer }
rendered.any? do |serializer, count|
options.name == serializer
end
when NilClass, Regexp, String, Symbol
case options
when Symbol
options = options.to_s.camelize
@ -66,10 +73,10 @@ module ActionController
when NilClass
rendered.blank?
end
assert matches_serializer, msg
else
raise ArgumentError, "assert_serializer only accepts a String, Symbol, Regexp, or nil"
raise ArgumentError, "assert_serializer only accepts a String, Symbol, Regexp, ActiveModel::Serializer, or nil"
end
assert matches_serializer, msg
end
end
end

View File

@ -15,6 +15,11 @@ module ActionController
tests MyController
def test_supports_specifying_serializers_with_a_serializer_class
get :render_using_serializer
assert_serializer ProfileSerializer
end
def test_supports_specifying_serializers_with_a_regexp
get :render_using_serializer
assert_serializer %r{\AProfile.+\Z}
@ -43,12 +48,13 @@ module ActionController
assert_match 'expecting <"PostSerializer"> but rendering with <["ProfileSerializer"]>', e.message
end
def test_raises_argument_error_when_asserting_with_invalid_object
get :render_using_serializer
e = assert_raise ArgumentError do
assert_serializer OpenStruct.new
assert_serializer Hash
end
assert_match 'assert_serializer only accepts a String, Symbol, Regexp, or nil', e.message
assert_match 'assert_serializer only accepts a String, Symbol, Regexp, ActiveModel::Serializer, or nil', e.message
end
end
end