active_model_serializers/test/array_serializer_test.rb
Luke Mayhew cfcd712123 Fix ArraySerializer's output when falling back on DefaultSerializer
Change ArraySerializer's initialization of DefaultSerializer to pass
:root => false in order to avoid adding root keys to each of the
items in the array. This ensures consistent results between serializing
arrays of objects with serializers and arrays of objects without
serializers. Fixes #495.
2014-04-01 22:38:58 -06:00

76 lines
2.3 KiB
Ruby

require "test_helper"
require "test_fakes"
class ArraySerializerTest < ActiveModel::TestCase
def test_array_items_do_not_have_root
array = [
BasicActiveModel.new(:name => "First model"),
BasicActiveModel.new(:name => "Second model")
]
expected = { "root" => [
{ :name => "First model" },
{ :name => "Second model" }
] }
default_serializer = array.active_model_serializer.new(array, :root => "root")
each_serializer = array.active_model_serializer.new(array, :root => "root", :each_serializer => BasicSerializer)
default_json = default_serializer.as_json
each_json = each_serializer.as_json
assert_equal(expected, default_json)
assert_equal(expected, each_json)
end
# serialize different typed objects
def test_array_serializer
model = Model.new
user = User.new
comments = Comment.new(:title => "Comment1", :id => 1)
array = [model, user, comments]
serializer = array.active_model_serializer.new(array, :scope => {:scope => true})
assert_equal([
{ :model => "Model" },
{ :last_name => "Valim", :ok => true, :first_name => "Jose", :scope => true },
{ :title => "Comment1" }
], serializer.as_json)
end
def test_array_serializer_with_root
comment1 = Comment.new(:title => "Comment1", :id => 1)
comment2 = Comment.new(:title => "Comment2", :id => 2)
array = [ comment1, comment2 ]
serializer = array.active_model_serializer.new(array, :root => :comments)
assert_equal({ :comments => [
{ :title => "Comment1" },
{ :title => "Comment2" }
]}, serializer.as_json)
end
def test_array_serializer_with_hash
hash = {:value => "something"}
array = [hash]
serializer = array.active_model_serializer.new(array, :root => :items)
assert_equal({ :items => [ hash.as_json ]}, serializer.as_json)
end
def test_array_serializer_with_specified_seriailizer
post1 = Post.new(:title => "Post1", :author => "Author1", :id => 1)
post2 = Post.new(:title => "Post2", :author => "Author2", :id => 2)
array = [ post1, post2 ]
serializer = array.active_model_serializer.new array, :each_serializer => CustomPostSerializer
assert_equal([
{ :title => "Post1" },
{ :title => "Post2" }
], serializer.as_json)
end
end