1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
# frozen_string_literal: true
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
class MetaBlockPostBlankMetaSerializer < ActiveModel::Serializer
attributes :id
meta do
{}
end
end
class MetaBlockPostEmptyStringSerializer < ActiveModel::Serializer
attributes :id
meta do
''
end
end
def setup
@post = Post.new(id: 1337, comments: [], author: nil)
end
def test_meta_hash_object_resource
hash = ActiveModelSerializers::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 = ActiveModelSerializers::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
post2 = Post.new(id: 1339, comments: [Comment.new])
posts = [@post, post2]
hash = ActiveModelSerializers::SerializableResource.new(
posts,
each_serializer: MetaBlockPostSerializer,
adapter: :json_api
).serializable_hash
expected = {
data: [
{ id: '1337', type: 'posts', meta: { :"comments-count" => 0 } },
{ id: '1339', type: 'posts', meta: { :"comments-count" => 1 } }
]
}
assert_equal(expected, hash)
end
def test_meta_object_blank_omitted
hash = ActiveModelSerializers::SerializableResource.new(
@post,
serializer: MetaBlockPostBlankMetaSerializer,
adapter: :json_api
).serializable_hash
refute hash[:data].key? :meta
end
def test_meta_object_empty_string_omitted
hash = ActiveModelSerializers::SerializableResource.new(
@post,
serializer: MetaBlockPostEmptyStringSerializer,
adapter: :json_api
).serializable_hash
refute hash[:data].key? :meta
end
end
end
end
end
end
|