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,37 +42,41 @@ 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 rendered = @serializers
when NilClass, Regexp, String, Symbol msg = message || "expecting <#{options.inspect}> but rendering with <#{rendered.keys}>"
rendered = @serializers
msg = message || "expecting <#{options.inspect}> but rendering with <#{rendered.keys}>"
matches_serializer = matches_serializer = case options
case options when lambda { |options| options.kind_of?(Class) && options < ActiveModel::Serializer }
when Symbol rendered.any? do |serializer, count|
options = options.to_s.camelize options.name == serializer
rendered.any? do |serializer, count| end
serializer == options when NilClass, Regexp, String, Symbol
end case options
when String when Symbol
!options.empty? && rendered.any? do |serializer, count| options = options.to_s.camelize
serializer == options rendered.any? do |serializer, count|
end serializer == options
when Regexp end
rendered.any? do |serializer, count| when String
serializer.match(options) !options.empty? && rendered.any? do |serializer, count|
end serializer == options
when NilClass end
rendered.blank? when Regexp
end rendered.any? do |serializer, count|
assert matches_serializer, msg serializer.match(options)
else end
raise ArgumentError, "assert_serializer only accepts a String, Symbol, Regexp, or nil" when NilClass
end rendered.blank?
end
else
raise ArgumentError, "assert_serializer only accepts a String, Symbol, Regexp, ActiveModel::Serializer, or nil"
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