mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-25 07:16:49 +00:00
Rename ArraySerializer to CollectionSerializer for clarity
This commit is contained in:
@@ -23,7 +23,7 @@ module ActiveModel
|
||||
def test_with_serializer_option
|
||||
@blog.special_attribute = 'Special'
|
||||
@blog.articles = [@first_post, @second_post]
|
||||
serializer = ArraySerializer.new([@blog], serializer: CustomBlogSerializer)
|
||||
serializer = CollectionSerializer.new([@blog], serializer: CustomBlogSerializer)
|
||||
adapter = ActiveModel::Serializer::Adapter::Json.new(serializer)
|
||||
|
||||
expected = { blogs: [{
|
||||
@@ -35,7 +35,7 @@ module ActiveModel
|
||||
end
|
||||
|
||||
def test_include_multiple_posts
|
||||
serializer = ArraySerializer.new([@first_post, @second_post])
|
||||
serializer = CollectionSerializer.new([@first_post, @second_post])
|
||||
adapter = ActiveModel::Serializer::Adapter::Json.new(serializer)
|
||||
|
||||
expected = { posts: [{
|
||||
@@ -70,14 +70,14 @@ module ActiveModel
|
||||
|
||||
def test_root_is_underscored
|
||||
virtual_value = VirtualValue.new(id: 1)
|
||||
serializer = ArraySerializer.new([virtual_value])
|
||||
serializer = CollectionSerializer.new([virtual_value])
|
||||
adapter = ActiveModel::Serializer::Adapter::Json.new(serializer)
|
||||
|
||||
assert_equal 1, adapter.serializable_hash[:virtual_values].length
|
||||
end
|
||||
|
||||
def test_include_option
|
||||
serializer = ArraySerializer.new([@first_post, @second_post])
|
||||
serializer = CollectionSerializer.new([@first_post, @second_post])
|
||||
adapter = ActiveModel::Serializer::Adapter::Json.new(serializer, include: '')
|
||||
actual = adapter.serializable_hash
|
||||
expected = { posts: [{ id: 1, title: 'Hello!!', body: 'Hello, world!!' },
|
||||
|
||||
@@ -19,7 +19,7 @@ module ActiveModel
|
||||
@second_post.author = @author
|
||||
@author.posts = [@first_post, @second_post]
|
||||
|
||||
@serializer = ArraySerializer.new([@first_post, @second_post])
|
||||
@serializer = CollectionSerializer.new([@first_post, @second_post])
|
||||
@adapter = ActiveModel::Serializer::Adapter::JsonApi.new(@serializer)
|
||||
ActionController::Base.cache_store.clear
|
||||
end
|
||||
|
||||
@@ -45,7 +45,7 @@ module ActiveModel
|
||||
end
|
||||
|
||||
def test_include_multiple_posts_and_linked_array
|
||||
serializer = ArraySerializer.new([@first_post, @second_post])
|
||||
serializer = CollectionSerializer.new([@first_post, @second_post])
|
||||
adapter = ActiveModel::Serializer::Adapter::JsonApi.new(
|
||||
serializer,
|
||||
include: [:comments, author: [:bio]]
|
||||
@@ -226,7 +226,7 @@ module ActiveModel
|
||||
end
|
||||
|
||||
def test_multiple_references_to_same_resource
|
||||
serializer = ArraySerializer.new([@first_comment, @second_comment])
|
||||
serializer = CollectionSerializer.new([@first_comment, @second_comment])
|
||||
adapter = ActiveModel::Serializer::Adapter::JsonApi.new(
|
||||
serializer,
|
||||
include: [:post]
|
||||
|
||||
@@ -1,92 +1,21 @@
|
||||
require 'test_helper'
|
||||
require_relative 'collection_serializer_test'
|
||||
|
||||
module ActiveModel
|
||||
class Serializer
|
||||
class ArraySerializerTest < Minitest::Test
|
||||
def setup
|
||||
@comment = Comment.new
|
||||
@post = Post.new
|
||||
@resource = build_named_collection @comment, @post
|
||||
@serializer = ArraySerializer.new(@resource, { some: :options })
|
||||
class ArraySerializerTest < CollectionSerializerTest
|
||||
extend ActiveSupport::Testing::Stream
|
||||
def self.run_one_method(*)
|
||||
stderr = (capture(:stderr) do
|
||||
super
|
||||
end)
|
||||
if stderr !~ /Calling deprecated ArraySerializer/
|
||||
fail Minitest::Assertion, stderr
|
||||
end
|
||||
end
|
||||
|
||||
def build_named_collection(*resource)
|
||||
resource.define_singleton_method(:name) { 'MeResource' }
|
||||
resource
|
||||
end
|
||||
|
||||
def test_has_object_reader_serializer_interface
|
||||
assert_equal @serializer.object, @resource
|
||||
end
|
||||
|
||||
def test_respond_to_each
|
||||
assert_respond_to @serializer, :each
|
||||
end
|
||||
|
||||
def test_each_object_should_be_serialized_with_appropriate_serializer
|
||||
serializers = @serializer.to_a
|
||||
|
||||
assert_kind_of CommentSerializer, serializers.first
|
||||
assert_kind_of Comment, serializers.first.object
|
||||
|
||||
assert_kind_of PostSerializer, serializers.last
|
||||
assert_kind_of Post, serializers.last.object
|
||||
|
||||
assert_equal serializers.last.custom_options[:some], :options
|
||||
end
|
||||
|
||||
def test_serializer_option_not_passed_to_each_serializer
|
||||
serializers = ArraySerializer.new([@post], { serializer: PostSerializer }).to_a
|
||||
|
||||
refute serializers.first.custom_options.key?(:serializer)
|
||||
end
|
||||
|
||||
def test_root_default
|
||||
@serializer = ArraySerializer.new([@comment, @post])
|
||||
assert_equal @serializer.root, nil
|
||||
end
|
||||
|
||||
def test_root
|
||||
expected = 'custom_root'
|
||||
@serializer = ArraySerializer.new([@comment, @post], root: expected)
|
||||
assert_equal @serializer.root, expected
|
||||
end
|
||||
|
||||
def test_root_with_no_serializers
|
||||
expected = 'custom_root'
|
||||
@serializer = ArraySerializer.new([], root: expected)
|
||||
assert_equal @serializer.root, expected
|
||||
end
|
||||
|
||||
def test_json_key
|
||||
assert_equal @serializer.json_key, 'comments'
|
||||
end
|
||||
|
||||
def test_json_key_with_resource_with_name_and_no_serializers
|
||||
serializer = ArraySerializer.new(build_named_collection)
|
||||
assert_equal serializer.json_key, 'me_resources'
|
||||
end
|
||||
|
||||
def test_json_key_with_resource_with_nil_name_and_no_serializers
|
||||
resource = []
|
||||
resource.define_singleton_method(:name) { nil }
|
||||
serializer = ArraySerializer.new(resource)
|
||||
assert_equal serializer.json_key, nil
|
||||
end
|
||||
|
||||
def test_json_key_with_resource_without_name_and_no_serializers
|
||||
serializer = ArraySerializer.new([])
|
||||
assert_equal serializer.json_key, nil
|
||||
end
|
||||
|
||||
def test_json_key_with_root
|
||||
serializer = ArraySerializer.new(@resource, root: 'custom_root')
|
||||
assert_equal serializer.json_key, 'custom_roots'
|
||||
end
|
||||
|
||||
def test_json_key_with_root_and_no_serializers
|
||||
serializer = ArraySerializer.new(build_named_collection, root: 'custom_root')
|
||||
assert_equal serializer.json_key, 'custom_roots'
|
||||
def collection_serializer
|
||||
ArraySerializer
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
97
test/collection_serializer_test.rb
Normal file
97
test/collection_serializer_test.rb
Normal file
@@ -0,0 +1,97 @@
|
||||
require 'test_helper'
|
||||
|
||||
module ActiveModel
|
||||
class Serializer
|
||||
class CollectionSerializerTest < Minitest::Test
|
||||
def setup
|
||||
@comment = Comment.new
|
||||
@post = Post.new
|
||||
@resource = build_named_collection @comment, @post
|
||||
@serializer = collection_serializer.new(@resource, { some: :options })
|
||||
end
|
||||
|
||||
def collection_serializer
|
||||
CollectionSerializer
|
||||
end
|
||||
|
||||
def build_named_collection(*resource)
|
||||
resource.define_singleton_method(:name) { 'MeResource' }
|
||||
resource
|
||||
end
|
||||
|
||||
def test_has_object_reader_serializer_interface
|
||||
assert_equal @serializer.object, @resource
|
||||
end
|
||||
|
||||
def test_respond_to_each
|
||||
assert_respond_to @serializer, :each
|
||||
end
|
||||
|
||||
def test_each_object_should_be_serialized_with_appropriate_serializer
|
||||
serializers = @serializer.to_a
|
||||
|
||||
assert_kind_of CommentSerializer, serializers.first
|
||||
assert_kind_of Comment, serializers.first.object
|
||||
|
||||
assert_kind_of PostSerializer, serializers.last
|
||||
assert_kind_of Post, serializers.last.object
|
||||
|
||||
assert_equal serializers.last.custom_options[:some], :options
|
||||
end
|
||||
|
||||
def test_serializer_option_not_passed_to_each_serializer
|
||||
serializers = collection_serializer.new([@post], { serializer: PostSerializer }).to_a
|
||||
|
||||
refute serializers.first.custom_options.key?(:serializer)
|
||||
end
|
||||
|
||||
def test_root_default
|
||||
@serializer = collection_serializer.new([@comment, @post])
|
||||
assert_equal @serializer.root, nil
|
||||
end
|
||||
|
||||
def test_root
|
||||
expected = 'custom_root'
|
||||
@serializer = collection_serializer.new([@comment, @post], root: expected)
|
||||
assert_equal @serializer.root, expected
|
||||
end
|
||||
|
||||
def test_root_with_no_serializers
|
||||
expected = 'custom_root'
|
||||
@serializer = collection_serializer.new([], root: expected)
|
||||
assert_equal @serializer.root, expected
|
||||
end
|
||||
|
||||
def test_json_key
|
||||
assert_equal @serializer.json_key, 'comments'
|
||||
end
|
||||
|
||||
def test_json_key_with_resource_with_name_and_no_serializers
|
||||
serializer = collection_serializer.new(build_named_collection)
|
||||
assert_equal serializer.json_key, 'me_resources'
|
||||
end
|
||||
|
||||
def test_json_key_with_resource_with_nil_name_and_no_serializers
|
||||
resource = []
|
||||
resource.define_singleton_method(:name) { nil }
|
||||
serializer = collection_serializer.new(resource)
|
||||
assert_equal serializer.json_key, nil
|
||||
end
|
||||
|
||||
def test_json_key_with_resource_without_name_and_no_serializers
|
||||
serializer = collection_serializer.new([])
|
||||
assert_equal serializer.json_key, nil
|
||||
end
|
||||
|
||||
def test_json_key_with_root
|
||||
serializer = collection_serializer.new(@resource, root: 'custom_root')
|
||||
assert_equal serializer.json_key, 'custom_roots'
|
||||
end
|
||||
|
||||
def test_json_key_with_root_and_no_serializers
|
||||
serializer = collection_serializer.new(build_named_collection, root: 'custom_root')
|
||||
assert_equal serializer.json_key, 'custom_roots'
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
2
test/fixtures/poro.rb
vendored
2
test/fixtures/poro.rb
vendored
@@ -154,7 +154,7 @@ BlogSerializer = Class.new(ActiveModel::Serializer) do
|
||||
has_many :articles
|
||||
end
|
||||
|
||||
PaginatedSerializer = Class.new(ActiveModel::Serializer::ArraySerializer) do
|
||||
PaginatedSerializer = Class.new(ActiveModel::Serializer::CollectionSerializer) do
|
||||
def json_key
|
||||
'paginated'
|
||||
end
|
||||
|
||||
@@ -33,13 +33,13 @@ module ActiveModel
|
||||
case key
|
||||
when :posts
|
||||
assert_equal({}, options)
|
||||
assert_kind_of(ActiveModel::Serializer.config.array_serializer, serializer)
|
||||
assert_kind_of(ActiveModel::Serializer.config.collection_serializer, serializer)
|
||||
when :bio
|
||||
assert_equal({}, options)
|
||||
assert_nil serializer
|
||||
when :roles
|
||||
assert_equal({}, options)
|
||||
assert_kind_of(ActiveModel::Serializer.config.array_serializer, serializer)
|
||||
assert_kind_of(ActiveModel::Serializer.config.collection_serializer, serializer)
|
||||
else
|
||||
flunk "Unknown association: #{key}"
|
||||
end
|
||||
|
||||
@@ -3,8 +3,25 @@ require 'test_helper'
|
||||
module ActiveModel
|
||||
class Serializer
|
||||
class ConfigurationTest < Minitest::Test
|
||||
def test_collection_serializer
|
||||
assert_equal ActiveModel::Serializer::CollectionSerializer, ActiveModel::Serializer.config.collection_serializer
|
||||
end
|
||||
|
||||
def test_array_serializer
|
||||
assert_equal ActiveModel::Serializer::ArraySerializer, ActiveModel::Serializer.config.array_serializer
|
||||
assert_equal ActiveModel::Serializer::CollectionSerializer, ActiveModel::Serializer.config.array_serializer
|
||||
end
|
||||
|
||||
def test_setting_array_serializer_sets_collection_serializer
|
||||
config = ActiveModel::Serializer.config
|
||||
old_config = config.dup
|
||||
begin
|
||||
assert_equal ActiveModel::Serializer::CollectionSerializer, config.collection_serializer
|
||||
config.array_serializer = :foo
|
||||
assert_equal config.array_serializer, :foo
|
||||
assert_equal config.collection_serializer, :foo
|
||||
ensure
|
||||
ActiveModel::Serializer.config.replace(old_config)
|
||||
end
|
||||
end
|
||||
|
||||
def test_default_adapter
|
||||
|
||||
@@ -3,26 +3,26 @@ require 'test_helper'
|
||||
module ActiveModel
|
||||
class Serializer
|
||||
class SerializerForTest < Minitest::Test
|
||||
class ArraySerializerTest < Minitest::Test
|
||||
class CollectionSerializerTest < Minitest::Test
|
||||
def setup
|
||||
@array = [1, 2, 3]
|
||||
@previous_array_serializer = ActiveModel::Serializer.config.array_serializer
|
||||
@previous_collection_serializer = ActiveModel::Serializer.config.collection_serializer
|
||||
end
|
||||
|
||||
def teardown
|
||||
ActiveModel::Serializer.config.array_serializer = @previous_array_serializer
|
||||
ActiveModel::Serializer.config.collection_serializer = @previous_collection_serializer
|
||||
end
|
||||
|
||||
def test_serializer_for_array
|
||||
serializer = ActiveModel::Serializer.serializer_for(@array)
|
||||
assert_equal ActiveModel::Serializer.config.array_serializer, serializer
|
||||
assert_equal ActiveModel::Serializer.config.collection_serializer, serializer
|
||||
end
|
||||
|
||||
def test_overwritten_serializer_for_array
|
||||
new_array_serializer = Class.new
|
||||
ActiveModel::Serializer.config.array_serializer = new_array_serializer
|
||||
new_collection_serializer = Class.new
|
||||
ActiveModel::Serializer.config.collection_serializer = new_collection_serializer
|
||||
serializer = ActiveModel::Serializer.serializer_for(@array)
|
||||
assert_equal new_array_serializer, serializer
|
||||
assert_equal new_collection_serializer, serializer
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user