mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-22 22:06:50 +00:00
122 lines
3.4 KiB
Ruby
122 lines
3.4 KiB
Ruby
require 'test_helper'
|
|
|
|
module ActiveModel
|
|
class Serializer
|
|
class MetaTest < Minitest::Test
|
|
def setup
|
|
ActionController::Base.cache_store.clear
|
|
@blog = Blog.new(id: 1,
|
|
name: 'AMS Hints',
|
|
writer: Author.new(id: 2, name: 'Steve'),
|
|
articles: [Post.new(id: 3, title: 'AMS')])
|
|
end
|
|
|
|
def test_meta_is_present_with_root
|
|
serializer = AlternateBlogSerializer.new(@blog, meta: { total: 10 })
|
|
adapter = ActiveModel::Serializer::Adapter::Json.new(serializer)
|
|
expected = {
|
|
blog: {
|
|
id: 1,
|
|
title: 'AMS Hints'
|
|
},
|
|
'meta' => {
|
|
total: 10
|
|
}
|
|
}
|
|
assert_equal expected, adapter.as_json
|
|
end
|
|
|
|
def test_meta_is_not_included_when_root_is_missing
|
|
# load_adapter uses FlattenJson Adapter
|
|
adapter = load_adapter(meta: { total: 10 })
|
|
expected = {
|
|
id: 1,
|
|
title: 'AMS Hints'
|
|
}
|
|
assert_equal expected, adapter.as_json
|
|
end
|
|
|
|
def test_meta_key_is_used
|
|
serializer = AlternateBlogSerializer.new(@blog, meta: { total: 10 }, meta_key: 'haha_meta')
|
|
adapter = ActiveModel::Serializer::Adapter::Json.new(serializer)
|
|
expected = {
|
|
blog: {
|
|
id: 1,
|
|
title: 'AMS Hints'
|
|
},
|
|
'haha_meta' => {
|
|
total: 10
|
|
}
|
|
}
|
|
assert_equal expected, adapter.as_json
|
|
end
|
|
|
|
def test_meta_key_is_used_with_json_api
|
|
serializer = AlternateBlogSerializer.new(@blog, meta: { total: 10 }, meta_key: 'haha_meta')
|
|
adapter = ActiveModel::Serializer::Adapter::JsonApi.new(serializer)
|
|
expected = {
|
|
data: {
|
|
id: '1',
|
|
type: 'blogs',
|
|
attributes: { title: 'AMS Hints' }
|
|
},
|
|
'haha_meta' => { total: 10 }
|
|
}
|
|
assert_equal expected, adapter.as_json
|
|
end
|
|
|
|
def test_meta_is_not_present_on_arrays_without_root
|
|
serializer = ArraySerializer.new([@blog], meta: { total: 10 })
|
|
# FlattenJSON doesn't have support to root
|
|
adapter = ActiveModel::Serializer::Adapter::FlattenJson.new(serializer)
|
|
expected = [{
|
|
id: 1,
|
|
name: 'AMS Hints',
|
|
writer: {
|
|
id: 2,
|
|
name: 'Steve'
|
|
},
|
|
articles: [{
|
|
id: 3,
|
|
title: 'AMS',
|
|
body: nil
|
|
}]
|
|
}]
|
|
assert_equal expected, adapter.as_json
|
|
end
|
|
|
|
def test_meta_is_present_on_arrays_with_root
|
|
serializer = ArraySerializer.new([@blog], meta: { total: 10 }, meta_key: 'haha_meta')
|
|
# JSON adapter adds root by default
|
|
adapter = ActiveModel::Serializer::Adapter::Json.new(serializer)
|
|
expected = {
|
|
blogs: [{
|
|
id: 1,
|
|
name: 'AMS Hints',
|
|
writer: {
|
|
id: 2,
|
|
name: 'Steve'
|
|
},
|
|
articles: [{
|
|
id: 3,
|
|
title: 'AMS',
|
|
body: nil
|
|
}]
|
|
}],
|
|
'haha_meta' => {
|
|
total: 10
|
|
}
|
|
}
|
|
assert_equal expected, adapter.as_json
|
|
end
|
|
|
|
private
|
|
|
|
def load_adapter(options)
|
|
options = options.merge(adapter: :flatten_json, serializer: AlternateBlogSerializer)
|
|
ActiveModel::SerializableResource.new(@blog, options)
|
|
end
|
|
end
|
|
end
|
|
end
|