active_model_serializers/test/serializers/associations_test.rb
Gary Gordon d5bae0c2f0 Include 'linked' member for json-api collections
The options passed to the render are partitioned into adapter options
and serializer options. 'include' and 'root' are sent to the adapter,
not sure what options would go directly to serializer, but leaving this
in until I understand that better.
2014-11-03 17:13:55 -05:00

67 lines
2.0 KiB
Ruby

require 'test_helper'
module ActiveModel
class Serializer
class AssociationsTest < Minitest::Test
class Model
def initialize(hash={})
@attributes = hash
end
def read_attribute_for_serialization(name)
@attributes[name]
end
def method_missing(meth, *args)
if meth.to_s =~ /^(.*)=$/
@attributes[$1.to_sym] = args[0]
elsif @attributes.key?(meth)
@attributes[meth]
else
super
end
end
end
def setup
@author = Author.new(name: 'Steve K.')
@post = Post.new({ title: 'New Post', body: 'Body' })
@comment = Comment.new({ id: 1, body: 'ZOMG A COMMENT' })
@post.comments = [@comment]
@comment.post = @post
@comment.author = nil
@post.author = @author
@author.posts = [@post]
@author_serializer = AuthorSerializer.new(@author)
@comment_serializer = CommentSerializer.new(@comment)
end
def test_has_many
assert_equal({posts: {type: :has_many, options: {embed: :ids}}}, @author_serializer.class._associations)
@author_serializer.each_association do |name, serializer, options|
assert_equal(:posts, name)
assert_equal({embed: :ids}, options)
assert_kind_of(ActiveModel::Serializer.config.array_serializer, serializer)
end
end
def test_has_one
assert_equal({post: {type: :belongs_to, options: {}}, :author=>{:type=>:belongs_to, :options=>{}}}, @comment_serializer.class._associations)
@comment_serializer.each_association do |name, serializer, options|
if name == :post
assert_equal({}, options)
assert_kind_of(PostSerializer, serializer)
elsif name == :author
assert_equal({}, options)
assert_nil serializer
else
flunk "Unknown association: #{name}"
end
end
end
end
end
end