require "test_helper" require "test_fakes" class ArraySerializerTest < ActiveModel::TestCase # 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_active_model_with_root comment1 = ModelWithActiveModelSerializer.new(title: "Comment1") comment2 = ModelWithActiveModelSerializer.new(title: "Comment2") 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_serializer 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 def test_array_serializer_using_default_serializer hash = { "value" => "something" } class << hash def active_model_serializer nil end end array = [hash] serializer = array.active_model_serializer.new array assert_equal([ { "value" => "something" } ], serializer.as_json) end end