mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-22 22:06:50 +00:00
162 lines
4.3 KiB
Ruby
162 lines
4.3 KiB
Ruby
require 'test_helper'
|
|
|
|
module ActiveModelSerializers
|
|
module Adapter
|
|
class JsonApi
|
|
class RelationshipTest < ActiveSupport::TestCase
|
|
setup do
|
|
@blog = Blog.new(id: 1)
|
|
@author = Author.new(id: 1, name: 'Steve K.', blog: @blog)
|
|
@serializer = BlogSerializer.new(@blog)
|
|
ActionController::Base.cache_store.clear
|
|
end
|
|
|
|
def test_relationship_with_data
|
|
expected = {
|
|
data: {
|
|
id: '1',
|
|
type: 'blogs'
|
|
}
|
|
}
|
|
test_relationship(expected, options: { include_data: true })
|
|
end
|
|
|
|
def test_relationship_with_nil_model
|
|
@serializer = BlogSerializer.new(nil)
|
|
expected = { data: nil }
|
|
test_relationship(expected, options: { include_data: true })
|
|
end
|
|
|
|
def test_relationship_with_nil_serializer
|
|
@serializer = nil
|
|
expected = { data: nil }
|
|
test_relationship(expected, options: { include_data: true })
|
|
end
|
|
|
|
def test_relationship_with_data_array
|
|
posts = [Post.new(id: 1), Post.new(id: 2)]
|
|
@serializer = ActiveModel::Serializer::CollectionSerializer.new(posts)
|
|
@author.posts = posts
|
|
@author.blog = nil
|
|
expected = {
|
|
data: [
|
|
{
|
|
id: '1',
|
|
type: 'posts'
|
|
},
|
|
{
|
|
id: '2',
|
|
type: 'posts'
|
|
}
|
|
]
|
|
}
|
|
test_relationship(expected, options: { include_data: true })
|
|
end
|
|
|
|
def test_relationship_data_not_included
|
|
test_relationship({}, options: { include_data: false })
|
|
end
|
|
|
|
def test_relationship_simple_link
|
|
links = { self: 'a link' }
|
|
test_relationship({ links: { self: 'a link' } }, links: links)
|
|
end
|
|
|
|
def test_relationship_many_links
|
|
links = {
|
|
self: 'a link',
|
|
related: 'another link'
|
|
}
|
|
expected = {
|
|
links: {
|
|
self: 'a link',
|
|
related: 'another link'
|
|
}
|
|
}
|
|
test_relationship(expected, links: links)
|
|
end
|
|
|
|
def test_relationship_block_link
|
|
links = { self: proc { object.id.to_s } }
|
|
expected = { links: { self: @blog.id.to_s } }
|
|
test_relationship(expected, links: links)
|
|
end
|
|
|
|
def test_relationship_block_link_with_meta
|
|
links = {
|
|
self: proc do
|
|
href object.id.to_s
|
|
meta(id: object.id)
|
|
end
|
|
}
|
|
expected = {
|
|
links: {
|
|
self: {
|
|
href: @blog.id.to_s,
|
|
meta: { id: @blog.id }
|
|
}
|
|
}
|
|
}
|
|
test_relationship(expected, links: links)
|
|
end
|
|
|
|
def test_relationship_simple_meta
|
|
meta = { id: '1' }
|
|
expected = { meta: meta }
|
|
test_relationship(expected, meta: meta)
|
|
end
|
|
|
|
def test_relationship_block_meta
|
|
meta = proc do
|
|
{ id: object.id }
|
|
end
|
|
expected = {
|
|
meta: {
|
|
id: @blog.id
|
|
}
|
|
}
|
|
test_relationship(expected, meta: meta)
|
|
end
|
|
|
|
def test_relationship_with_everything
|
|
links = {
|
|
self: 'a link',
|
|
related: proc do
|
|
href object.id.to_s
|
|
meta object.id
|
|
end
|
|
|
|
}
|
|
meta = proc do
|
|
{ id: object.id }
|
|
end
|
|
expected = {
|
|
data: {
|
|
id: '1',
|
|
type: 'blogs'
|
|
},
|
|
links: {
|
|
self: 'a link',
|
|
related: {
|
|
href: '1', meta: 1
|
|
}
|
|
},
|
|
meta: {
|
|
id: @blog.id
|
|
}
|
|
}
|
|
test_relationship(expected, meta: meta, options: { include_data: true }, links: links)
|
|
end
|
|
|
|
private
|
|
|
|
def test_relationship(expected, params = {})
|
|
parent_serializer = AuthorSerializer.new(@author)
|
|
relationship = Relationship.new(parent_serializer, @serializer, nil, params)
|
|
assert_equal(expected, relationship.as_json)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|