start implementing json_api adapter to understand how associations should work

This commit is contained in:
Tema Bolshakov
2014-08-28 18:55:27 +04:00
parent 466c7d5dd8
commit 597765e3b0
5 changed files with 70 additions and 0 deletions

View File

@@ -0,0 +1,31 @@
require 'test_helper'
module ActiveModel
class Serializer
class Adapter
class JsonApiTest < Minitest::Test
def setup
@post = ::Model.new(title: 'New Post', body: 'Body')
@first_comment = ::Model.new(id: 1, body: 'ZOMG A COMMENT')
@second_comment = ::Model.new(id: 2, body: 'ZOMG ANOTHER COMMENT')
@post.comments = [@first_comment, @second_comment]
@first_comment.post = @post
@second_comment.post = @post
@post_serializer_class = def_serializer do
attributes :title, :body
has_many :comments
end
@post_serializer = @post_serializer_class.new(@post)
@adapter = ActiveModel::Serializer::Adapter::JsonApiAdapter.new(@post_serializer)
end
def test_includes_comment_ids
assert_equal(['1', '2'], @adapter.serializable_hash[:comments])
end
end
end
end
end

10
test/fixtures/poro.rb vendored
View File

@@ -10,6 +10,16 @@ class Model
@attributes[name]
end
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
class Profile < Model

View File

@@ -25,3 +25,7 @@ ActionController::TestCase.class_eval do
@routes = TestHelper::Routes
end
end
def def_serializer(&block)
Class.new(ActiveModel::Serializer, &block)
end