mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-25 07:16:49 +00:00
Restrict serializable_hash to accepted options (#1647)
Restrict tests/impl from passing AMS options into serializable_hash
This commit is contained in:
@@ -8,9 +8,11 @@ module ActiveModelSerializers
|
||||
context = Minitest::Mock.new
|
||||
context.expect(:request_url, URI)
|
||||
context.expect(:query_parameters, {})
|
||||
@options = {}
|
||||
@options[:key_transform] = key_transform if key_transform
|
||||
@options[:serialization_context] = context
|
||||
options = {}
|
||||
options[:key_transform] = key_transform if key_transform
|
||||
options[:serialization_context] = context
|
||||
serializer = CustomBlogSerializer.new(@blog)
|
||||
@adapter = ActiveModelSerializers::Adapter::Json.new(serializer, options)
|
||||
end
|
||||
|
||||
Post = Class.new(::Model)
|
||||
@@ -18,24 +20,22 @@ module ActiveModelSerializers
|
||||
attributes :id, :title, :body, :publish_at
|
||||
end
|
||||
|
||||
def setup
|
||||
setup do
|
||||
ActionController::Base.cache_store.clear
|
||||
@blog = Blog.new(id: 1, name: 'My Blog!!', special_attribute: 'neat')
|
||||
serializer = CustomBlogSerializer.new(@blog)
|
||||
@adapter = ActiveModelSerializers::Adapter::Json.new(serializer)
|
||||
end
|
||||
|
||||
def test_transform_default
|
||||
mock_request
|
||||
assert_equal({
|
||||
blog: { id: 1, special_attribute: 'neat', articles: nil }
|
||||
}, @adapter.serializable_hash(@options))
|
||||
}, @adapter.serializable_hash)
|
||||
end
|
||||
|
||||
def test_transform_global_config
|
||||
mock_request
|
||||
result = with_config(key_transform: :camel_lower) do
|
||||
@adapter.serializable_hash(@options)
|
||||
@adapter.serializable_hash
|
||||
end
|
||||
assert_equal({
|
||||
blog: { id: 1, specialAttribute: 'neat', articles: nil }
|
||||
@@ -45,7 +45,7 @@ module ActiveModelSerializers
|
||||
def test_transform_serialization_ctx_overrides_global_config
|
||||
mock_request(:camel)
|
||||
result = with_config(key_transform: :camel_lower) do
|
||||
@adapter.serializable_hash(@options)
|
||||
@adapter.serializable_hash
|
||||
end
|
||||
assert_equal({
|
||||
Blog: { Id: 1, SpecialAttribute: 'neat', Articles: nil }
|
||||
@@ -56,7 +56,7 @@ module ActiveModelSerializers
|
||||
mock_request(:blam)
|
||||
result = nil
|
||||
assert_raises NoMethodError do
|
||||
result = @adapter.serializable_hash(@options)
|
||||
result = @adapter.serializable_hash
|
||||
end
|
||||
end
|
||||
|
||||
@@ -64,28 +64,28 @@ module ActiveModelSerializers
|
||||
mock_request(:dash)
|
||||
assert_equal({
|
||||
blog: { id: 1, :"special-attribute" => 'neat', articles: nil }
|
||||
}, @adapter.serializable_hash(@options))
|
||||
}, @adapter.serializable_hash)
|
||||
end
|
||||
|
||||
def test_transform_unaltered
|
||||
mock_request(:unaltered)
|
||||
assert_equal({
|
||||
blog: { id: 1, special_attribute: 'neat', articles: nil }
|
||||
}, @adapter.serializable_hash(@options))
|
||||
}, @adapter.serializable_hash)
|
||||
end
|
||||
|
||||
def test_transform_camel
|
||||
mock_request(:camel)
|
||||
assert_equal({
|
||||
Blog: { Id: 1, SpecialAttribute: 'neat', Articles: nil }
|
||||
}, @adapter.serializable_hash(@options))
|
||||
}, @adapter.serializable_hash)
|
||||
end
|
||||
|
||||
def test_transform_camel_lower
|
||||
mock_request(:camel_lower)
|
||||
assert_equal({
|
||||
blog: { id: 1, specialAttribute: 'neat', articles: nil }
|
||||
}, @adapter.serializable_hash(@options))
|
||||
}, @adapter.serializable_hash)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -25,13 +25,13 @@ module ActiveModelSerializers
|
||||
context = Minitest::Mock.new
|
||||
context.expect(:request_url, original_url)
|
||||
context.expect(:query_parameters, query_parameters)
|
||||
@options = {}
|
||||
@options[:serialization_context] = context
|
||||
context.expect(:key_transform, nil)
|
||||
end
|
||||
|
||||
def load_adapter(paginated_collection, options = {})
|
||||
options = options.merge(adapter: :json_api)
|
||||
ActiveModelSerializers::SerializableResource.new(paginated_collection, options)
|
||||
def load_adapter(paginated_collection, mock_request = nil)
|
||||
render_options = { adapter: :json_api }
|
||||
render_options[:serialization_context] = mock_request if mock_request
|
||||
serializable(paginated_collection, render_options)
|
||||
end
|
||||
|
||||
def using_kaminari(page = 2)
|
||||
@@ -102,43 +102,38 @@ module ActiveModelSerializers
|
||||
end
|
||||
|
||||
def test_pagination_links_using_kaminari
|
||||
adapter = load_adapter(using_kaminari)
|
||||
adapter = load_adapter(using_kaminari, mock_request)
|
||||
|
||||
mock_request
|
||||
assert_equal expected_response_with_pagination_links, adapter.serializable_hash(@options)
|
||||
assert_equal expected_response_with_pagination_links, adapter.serializable_hash
|
||||
end
|
||||
|
||||
def test_pagination_links_using_will_paginate
|
||||
adapter = load_adapter(using_will_paginate)
|
||||
adapter = load_adapter(using_will_paginate, mock_request)
|
||||
|
||||
mock_request
|
||||
assert_equal expected_response_with_pagination_links, adapter.serializable_hash(@options)
|
||||
assert_equal expected_response_with_pagination_links, adapter.serializable_hash
|
||||
end
|
||||
|
||||
def test_pagination_links_with_additional_params
|
||||
adapter = load_adapter(using_will_paginate)
|
||||
adapter = load_adapter(using_will_paginate, mock_request({ test: 'test' }))
|
||||
|
||||
mock_request({ test: 'test' })
|
||||
assert_equal expected_response_with_pagination_links_and_additional_params,
|
||||
adapter.serializable_hash(@options)
|
||||
adapter.serializable_hash
|
||||
end
|
||||
|
||||
def test_last_page_pagination_links_using_kaminari
|
||||
adapter = load_adapter(using_kaminari(3))
|
||||
adapter = load_adapter(using_kaminari(3), mock_request)
|
||||
|
||||
mock_request
|
||||
assert_equal expected_response_with_last_page_pagination_links, adapter.serializable_hash(@options)
|
||||
assert_equal expected_response_with_last_page_pagination_links, adapter.serializable_hash
|
||||
end
|
||||
|
||||
def test_last_page_pagination_links_using_will_paginate
|
||||
adapter = load_adapter(using_will_paginate(3))
|
||||
adapter = load_adapter(using_will_paginate(3), mock_request)
|
||||
|
||||
mock_request
|
||||
assert_equal expected_response_with_last_page_pagination_links, adapter.serializable_hash(@options)
|
||||
assert_equal expected_response_with_last_page_pagination_links, adapter.serializable_hash
|
||||
end
|
||||
|
||||
def test_not_showing_pagination_links
|
||||
adapter = load_adapter(@array)
|
||||
adapter = load_adapter(@array, mock_request)
|
||||
|
||||
assert_equal expected_response_without_pagination_links, adapter.serializable_hash
|
||||
end
|
||||
|
||||
@@ -67,8 +67,8 @@ module ActiveModelSerializers
|
||||
def test_success_document_transform_default
|
||||
mock_request
|
||||
serializer = PostSerializer.new(@post)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
|
||||
result = adapter.serializable_hash(@options)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
|
||||
result = adapter.serializable_hash
|
||||
assert_equal({
|
||||
data: {
|
||||
id: '1337',
|
||||
@@ -102,8 +102,8 @@ module ActiveModelSerializers
|
||||
mock_request
|
||||
result = with_config(key_transform: :camel_lower) do
|
||||
serializer = PostSerializer.new(@post)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
|
||||
adapter.serializable_hash(@options)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
|
||||
adapter.serializable_hash
|
||||
end
|
||||
assert_equal({
|
||||
data: {
|
||||
@@ -138,8 +138,8 @@ module ActiveModelSerializers
|
||||
mock_request(:camel)
|
||||
result = with_config(key_transform: :camel_lower) do
|
||||
serializer = PostSerializer.new(@post)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
|
||||
adapter.serializable_hash(@options)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
|
||||
adapter.serializable_hash
|
||||
end
|
||||
assert_equal({
|
||||
Data: {
|
||||
@@ -173,8 +173,8 @@ module ActiveModelSerializers
|
||||
def test_success_document_transform_dash
|
||||
mock_request(:dash)
|
||||
serializer = PostSerializer.new(@post)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
|
||||
result = adapter.serializable_hash(@options)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
|
||||
result = adapter.serializable_hash
|
||||
assert_equal({
|
||||
data: {
|
||||
id: '1337',
|
||||
@@ -207,8 +207,8 @@ module ActiveModelSerializers
|
||||
def test_success_document_transform_unaltered
|
||||
mock_request(:unaltered)
|
||||
serializer = PostSerializer.new(@post)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
|
||||
result = adapter.serializable_hash(@options)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
|
||||
result = adapter.serializable_hash
|
||||
assert_equal({
|
||||
data: {
|
||||
id: '1337',
|
||||
@@ -241,17 +241,18 @@ module ActiveModelSerializers
|
||||
def test_success_document_transform_undefined
|
||||
mock_request(:zoot)
|
||||
serializer = PostSerializer.new(@post)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
|
||||
assert_raises NoMethodError do
|
||||
adapter.serializable_hash(@options)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
|
||||
exception = assert_raises NoMethodError do
|
||||
adapter.serializable_hash
|
||||
end
|
||||
assert_match(/undefined method.*zoot/, exception.message)
|
||||
end
|
||||
|
||||
def test_success_document_transform_camel
|
||||
mock_request(:camel)
|
||||
serializer = PostSerializer.new(@post)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
|
||||
result = adapter.serializable_hash(@options)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
|
||||
result = adapter.serializable_hash
|
||||
assert_equal({
|
||||
Data: {
|
||||
Id: '1337',
|
||||
@@ -284,8 +285,8 @@ module ActiveModelSerializers
|
||||
def test_success_document_transform_camel_lower
|
||||
mock_request(:camel_lower)
|
||||
serializer = PostSerializer.new(@post)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
|
||||
result = adapter.serializable_hash(@options)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
|
||||
result = adapter.serializable_hash
|
||||
assert_equal({
|
||||
data: {
|
||||
id: '1337',
|
||||
@@ -321,8 +322,8 @@ module ActiveModelSerializers
|
||||
resource.errors.add(:published_at, 'must be in the future')
|
||||
resource.errors.add(:title, 'must be longer')
|
||||
serializer = ActiveModel::Serializer::ErrorSerializer.new(resource)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
|
||||
result = adapter.serializable_hash(@options)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
|
||||
result = adapter.serializable_hash
|
||||
expected_errors_object =
|
||||
{ :errors =>
|
||||
[
|
||||
@@ -345,8 +346,8 @@ module ActiveModelSerializers
|
||||
resource.errors.add(:published_at, 'must be in the future')
|
||||
resource.errors.add(:title, 'must be longer')
|
||||
serializer = ActiveModel::Serializer::ErrorSerializer.new(resource)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
|
||||
adapter.serializable_hash(@options)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
|
||||
adapter.serializable_hash
|
||||
end
|
||||
expected_errors_object =
|
||||
{ :Errors =>
|
||||
@@ -371,8 +372,8 @@ module ActiveModelSerializers
|
||||
resource.errors.add(:published_at, 'must be in the future')
|
||||
resource.errors.add(:title, 'must be longer')
|
||||
serializer = ActiveModel::Serializer::ErrorSerializer.new(resource)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
|
||||
adapter.serializable_hash(@options)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
|
||||
adapter.serializable_hash
|
||||
end
|
||||
expected_errors_object =
|
||||
{ :Errors =>
|
||||
@@ -398,8 +399,8 @@ module ActiveModelSerializers
|
||||
resource.errors.add(:title, 'must be longer')
|
||||
|
||||
serializer = ActiveModel::Serializer::ErrorSerializer.new(resource)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
|
||||
result = adapter.serializable_hash(@options)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
|
||||
result = adapter.serializable_hash
|
||||
|
||||
expected_errors_object =
|
||||
{ :errors =>
|
||||
@@ -425,8 +426,8 @@ module ActiveModelSerializers
|
||||
resource.errors.add(:title, 'must be longer')
|
||||
|
||||
serializer = ActiveModel::Serializer::ErrorSerializer.new(resource)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
|
||||
result = adapter.serializable_hash(@options)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
|
||||
result = adapter.serializable_hash
|
||||
|
||||
expected_errors_object =
|
||||
{ :errors =>
|
||||
@@ -446,11 +447,12 @@ module ActiveModelSerializers
|
||||
resource.errors.add(:title, 'must be longer')
|
||||
|
||||
serializer = ActiveModel::Serializer::ErrorSerializer.new(resource)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
|
||||
|
||||
assert_raises NoMethodError do
|
||||
adapter.serializable_hash(@options)
|
||||
exception = assert_raises NoMethodError do
|
||||
adapter.serializable_hash
|
||||
end
|
||||
assert_match(/undefined method.*krazy/, exception.message)
|
||||
end
|
||||
|
||||
def test_error_document_transform_camel
|
||||
@@ -461,8 +463,8 @@ module ActiveModelSerializers
|
||||
resource.errors.add(:title, 'must be longer')
|
||||
|
||||
serializer = ActiveModel::Serializer::ErrorSerializer.new(resource)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
|
||||
result = adapter.serializable_hash(@options)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
|
||||
result = adapter.serializable_hash
|
||||
|
||||
expected_errors_object =
|
||||
{ :Errors =>
|
||||
@@ -482,8 +484,8 @@ module ActiveModelSerializers
|
||||
resource.errors.add(:title, 'must be longer')
|
||||
|
||||
serializer = ActiveModel::Serializer::ErrorSerializer.new(resource)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
|
||||
result = adapter.serializable_hash(@options)
|
||||
adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
|
||||
result = adapter.serializable_hash
|
||||
|
||||
expected_errors_object =
|
||||
{ :errors =>
|
||||
|
||||
Reference in New Issue
Block a user