Add tests for meta on resource objects.

This commit is contained in:
Rafael Chacón 2015-11-27 09:56:39 -08:00 committed by Lucas Hosseini
parent 0bd5c6584f
commit 207c85f0fd
2 changed files with 79 additions and 0 deletions

View File

@ -0,0 +1,63 @@
require 'test_helper'
module ActiveModel
class Serializer
module Adapter
class JsonApi
class ResourceMetaTest < Minitest::Test
class MetaHashPostSerializer < ActiveModel::Serializer
attributes :id
meta stuff: 'value'
end
class MetaBlockPostSerializer < ActiveModel::Serializer
attributes :id
meta do
{ comments_count: object.comments.count }
end
end
def setup
@post = Post.new(id: 1337, comments: [], author: nil)
end
def test_meta_hash_object_resource
hash = ActiveModel::SerializableResource.new(
@post,
serializer: MetaHashPostSerializer,
adapter: :json_api
).serializable_hash
expected = {
stuff: 'value'
}
assert_equal(expected, hash[:data][:meta])
end
def test_meta_block_object_resource
hash = ActiveModel::SerializableResource.new(
@post,
serializer: MetaBlockPostSerializer,
adapter: :json_api
).serializable_hash
expected = {
comments_count: @post.comments.count
}
assert_equal(expected, hash[:data][:meta])
end
def test_meta_object_resource_in_array
hash = ActiveModel::SerializableResource.new(
[@post, @post],
each_serializer: MetaBlockPostSerializer,
adapter: :json_api
).serializable_hash
expected = {
comments_count: @post.comments.count
}
assert_equal([expected, expected], hash[:data].map { |obj| obj[:meta] })
end
end
end
end
end
end

View File

@ -3,6 +3,8 @@ require 'test_helper'
module ActiveModel module ActiveModel
class Serializer class Serializer
class MetaTest < ActiveSupport::TestCase class MetaTest < ActiveSupport::TestCase
MetaBlogSerializer = Class.new(ActiveModel::Serializer)
def setup def setup
@blog = Blog.new(id: 1, @blog = Blog.new(id: 1,
name: 'AMS Hints', name: 'AMS Hints',
@ -125,6 +127,20 @@ module ActiveModel
} }
assert_equal(expected, actual) assert_equal(expected, actual)
end end
def test_meta_is_set_with_direct_attributes
MetaBlogSerializer.meta stuff: 'value'
blog_meta_serializer = MetaBlogSerializer.new(@blog)
assert_equal(blog_meta_serializer.meta, stuff: 'value')
end
def test_meta_is_set_with_block
MetaBlogSerializer.meta do
{ articles_count: object.articles.count }
end
blog_meta_serializer = MetaBlogSerializer.new(@blog)
assert_equal(blog_meta_serializer.meta, articles_count: @blog.articles.count)
end
end end
end end
end end