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 that the "PostSerializer" serializer was rendered
# assert_serializer "PostSerializer" # assert_serializer "PostSerializer"
# #
# # assert that the instance of PostSerializer was rendered
# assert_serializer PostSerializer
#
# # assert that the "PostSerializer" serializer was rendered # # assert that the "PostSerializer" serializer was rendered
# assert_serializer :post_serializer # assert_serializer :post_serializer
# #
@ -39,16 +42,20 @@ module ActionController
# # assert that no serializer was rendered # # assert that no serializer was rendered
# assert_serializer nil # assert_serializer nil
# #
#
def assert_serializer(options = {}, message = nil) def assert_serializer(options = {}, message = nil)
# Force body to be read in case the template is being streamed. # Force body to be read in case the template is being streamed.
response.body response.body
case options
when NilClass, Regexp, String, Symbol
rendered = @serializers rendered = @serializers
msg = message || "expecting <#{options.inspect}> but rendering with <#{rendered.keys}>" 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 case options
when Symbol when Symbol
options = options.to_s.camelize options = options.to_s.camelize
@ -66,10 +73,10 @@ module ActionController
when NilClass when NilClass
rendered.blank? rendered.blank?
end end
assert matches_serializer, msg
else 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 end
assert matches_serializer, msg
end end
end end
end end

View File

@ -15,6 +15,11 @@ module ActionController
tests MyController 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 def test_supports_specifying_serializers_with_a_regexp
get :render_using_serializer get :render_using_serializer
assert_serializer %r{\AProfile.+\Z} assert_serializer %r{\AProfile.+\Z}
@ -43,12 +48,13 @@ module ActionController
assert_match 'expecting <"PostSerializer"> but rendering with <["ProfileSerializer"]>', e.message assert_match 'expecting <"PostSerializer"> but rendering with <["ProfileSerializer"]>', e.message
end end
def test_raises_argument_error_when_asserting_with_invalid_object def test_raises_argument_error_when_asserting_with_invalid_object
get :render_using_serializer get :render_using_serializer
e = assert_raise ArgumentError do e = assert_raise ArgumentError do
assert_serializer OpenStruct.new assert_serializer Hash
end 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 end
end end