test for json adapter

This commit is contained in:
Tema Bolshakov and Dmitry Myaskovskiy 2014-08-29 19:40:01 +04:00 committed by Tema Bolshakov
parent 7293072670
commit ff37b6260d
5 changed files with 80 additions and 16 deletions

View File

@ -3,9 +3,16 @@ module ActiveModel
class Adapter
class Json < Adapter
def serializable_hash(options = {})
serializer.attributes.each_with_object({}) do |(attr, value), h|
h[attr] = value
@hash = serializer.attributes
serializer.associations.each do |name, association|
if association.respond_to?(:each)
@hash[name] = association.map(&:attributes)
else
@hash[name] = association.attributes
end
end
@hash
end
end
end

View File

@ -0,0 +1,25 @@
require 'test_helper'
module ActiveModel
class Serializer
class Adapter
class Json
class BelongsToTest < Minitest::Test
def setup
@post = Post.new(id: 42, title: 'New Post', body: 'Body')
@comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
@post.comments = [@comment]
@comment.post = @post
@serializer = CommentSerializer.new(@comment)
@adapter = ActiveModel::Serializer::Adapter::Json.new(@serializer)
end
def test_includes_post
assert_equal({id: 42, title: 'New Post', body: 'Body'}, @adapter.serializable_hash[:post])
end
end
end
end
end
end

View File

@ -0,0 +1,31 @@
require 'test_helper'
module ActiveModel
class Serializer
class Adapter
class Json
class HasManyTestTest < Minitest::Test
def setup
@post = Post.new(title: 'New Post', body: 'Body')
@first_comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
@second_comment = Comment.new(id: 2, body: 'ZOMG ANOTHER COMMENT')
@post.comments = [@first_comment, @second_comment]
@first_comment.post = @post
@second_comment.post = @post
@serializer = PostSerializer.new(@post)
@adapter = ActiveModel::Serializer::Adapter::Json.new(@serializer)
end
def test_has_many
assert_equal([
{id: 1, body: 'ZOMG A COMMENT'},
{id: 2, body: 'ZOMG ANOTHER COMMENT'}
], @adapter.serializable_hash[:comments])
end
end
end
end
end
end

View File

@ -14,7 +14,7 @@ module ActiveModel
@second_comment.post = @post
@serializer = PostSerializer.new(@post)
@adapter = ActiveModel::Serializer::Adapter::JsonApiAdapter.new(@serializer)
@adapter = ActiveModel::Serializer::Adapter::JsonApi.new(@serializer)
end
def test_includes_comment_ids

View File

@ -3,23 +3,24 @@ require 'test_helper'
module ActiveModel
class Serializer
class Adapter
class JsonAdapterTest < Minitest::Test
class JsonTest < Minitest::Test
def setup
@profile = Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' })
@profile_serializer = ProfileSerializer.new(@profile)
@post = Post.new(title: 'New Post', body: 'Body')
@first_comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
@second_comment = Comment.new(id: 2, body: 'ZOMG ANOTHER COMMENT')
@post.comments = [@first_comment, @second_comment]
@first_comment.post = @post
@second_comment.post = @post
@adapter = Json.new(@profile_serializer)
@serializer = PostSerializer.new(@post)
@adapter = ActiveModel::Serializer::Adapter::Json.new(@serializer)
end
def test_serializable_hash
assert_equal({name: 'Name 1', description: 'Description 1'}, @adapter.serializable_hash)
end
def test_simple_adapter
assert_equal('{"name":"Name 1","description":"Description 1"}',
@adapter.to_json)
JSON
def test_has_many
assert_equal([
{id: 1, body: 'ZOMG A COMMENT'},
{id: 2, body: 'ZOMG ANOTHER COMMENT'}
], @adapter.serializable_hash[:comments])
end
end
end