Spec for linked resource type name demodulization

This commit is contained in:
Robbie Pitts 2015-01-11 16:10:02 -05:00
parent 90023b1af7
commit b626ec8f14
4 changed files with 38 additions and 3 deletions

View File

@ -64,7 +64,7 @@ module ActiveModel
assert_equal({comments: [], author: nil}, adapter.serializable_hash[:posts][:links]) assert_equal({comments: [], author: nil}, adapter.serializable_hash[:posts][:links])
end end
def test_include_type_for_association_when_is_different_than_name def test_include_type_for_association_when_different_than_name
serializer = BlogSerializer.new(@blog) serializer = BlogSerializer.new(@blog)
adapter = ActiveModel::Serializer::Adapter::JsonApi.new(serializer) adapter = ActiveModel::Serializer::Adapter::JsonApi.new(serializer)
links = adapter.serializable_hash[:blogs][:links] links = adapter.serializable_hash[:blogs][:links]

View File

@ -78,10 +78,15 @@ module ActiveModel
assert_nil adapter.serializable_hash[:linked] assert_nil adapter.serializable_hash[:linked]
end end
def test_include_type_for_association_when_is_different_than_name def test_include_type_for_association_when_different_than_name
serializer = BlogSerializer.new(@blog) serializer = BlogSerializer.new(@blog)
adapter = ActiveModel::Serializer::Adapter::JsonApi.new(serializer) adapter = ActiveModel::Serializer::Adapter::JsonApi.new(serializer)
assert_equal({type: "posts", ids: ["1"]}, adapter.serializable_hash[:blogs][:links][:articles]) actual = adapter.serializable_hash[:blogs][:links][:articles]
expected = {
type: "posts",
ids: ["1"]
}
assert_equal(expected, actual)
end end
end end
end end

View File

@ -138,6 +138,21 @@ module ActiveModel
} }
assert_equal expected, @adapter.serializable_hash[:linked] assert_equal expected, @adapter.serializable_hash[:linked]
end end
def test_ignore_model_namespace_for_linked_resource_type
spammy_post = Post.new(id: 123)
spammy_post.related = [Spam::UnrelatedLink.new(id: 456)]
serializer = SpammyPostSerializer.new(spammy_post)
adapter = ActiveModel::Serializer::Adapter::JsonApi.new(serializer)
links = adapter.serializable_hash[:posts][:links]
expected = {
related: {
type: 'unrelated_links',
ids: ['456']
}
}
assert_equal expected, links
end
end end
end end
end end

15
test/fixtures/poro.rb vendored
View File

@ -47,6 +47,8 @@ Author = Class.new(Model)
Bio = Class.new(Model) Bio = Class.new(Model)
Blog = Class.new(Model) Blog = Class.new(Model)
Role = Class.new(Model) Role = Class.new(Model)
module Spam; end
Spam::UnrelatedLink = Class.new(Model)
PostSerializer = Class.new(ActiveModel::Serializer) do PostSerializer = Class.new(ActiveModel::Serializer) do
attributes :title, :body, :id attributes :title, :body, :id
@ -56,6 +58,15 @@ PostSerializer = Class.new(ActiveModel::Serializer) do
url :comments url :comments
end end
SpammyPostSerializer = Class.new(ActiveModel::Serializer) do
attributes :id
has_many :related
def self.root_name
'posts'
end
end
CommentSerializer = Class.new(ActiveModel::Serializer) do CommentSerializer = Class.new(ActiveModel::Serializer) do
attributes :id, :body attributes :id, :body
@ -123,3 +134,7 @@ PostPreviewSerializer = Class.new(ActiveModel::Serializer) do
has_many :comments, serializer: CommentPreviewSerializer has_many :comments, serializer: CommentPreviewSerializer
belongs_to :author, serializer: AuthorPreviewSerializer belongs_to :author, serializer: AuthorPreviewSerializer
end end
Spam::UnrelatedLinkSerializer = Class.new(ActiveModel::Serializer) do
attributes :id
end