mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-23 14:29:31 +00:00
- The removed classes and modules were added back with deprecation warning and deprecation test were added for them. - One test was renamed because it contained `__`. - Some tests were refactored. - The ActiveModelSerializers::Deserialization module is now called Adapter instead of ActiveModelSerializers::Adapter. - The changelog was added for #1535
165 lines
4.4 KiB
Ruby
165 lines
4.4 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}" } }
|
|
expected = { links: { self: "#{@blog.id}" } }
|
|
test_relationship(expected, links: links)
|
|
end
|
|
|
|
def test_relationship_block_link_with_meta
|
|
links = {
|
|
self: proc do
|
|
href "#{object.id}"
|
|
meta(id: object.id)
|
|
end
|
|
}
|
|
expected = {
|
|
links: {
|
|
self: {
|
|
href: "#{@blog.id}",
|
|
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}"
|
|
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 = {})
|
|
options = params.fetch(:options, {})
|
|
links = params.fetch(:links, {})
|
|
meta = params[:meta]
|
|
parent_serializer = AuthorSerializer.new(@author)
|
|
relationship = Relationship.new(parent_serializer, @serializer, options, links, meta)
|
|
assert_equal(expected, relationship.as_json)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|