Fix #1759, Grape integration, adds serialization_context

- improves improves serialization_context to take options and not depend
on a `request` object.
- adds descriptive error on missing serialization_context.
- Document overriding `CollectionSerializer#paginated?`.
This commit is contained in:
Benjamin Fleischer
2016-05-29 16:21:45 -05:00
parent a52189c9c0
commit a7296e8a92
6 changed files with 63 additions and 14 deletions

View File

@@ -5,13 +5,19 @@ require 'minitest/mock'
class SerializationContextTest < ActiveSupport::TestCase
include ActiveSupport::Testing::Isolation
def create_request
request = Minitest::Mock.new
request.expect(:original_url, 'original_url')
request.expect(:query_parameters, 'query_parameters')
end
class WithRails < SerializationContextTest
def create_request
request = ActionDispatch::Request.new({})
def request.original_url
'http://example.com/articles?page=2'
end
def request.query_parameters
{ 'page' => 2 }
end
request
end
setup do
require 'rails'
require 'active_model_serializers'
@@ -20,8 +26,8 @@ class SerializationContextTest < ActiveSupport::TestCase
end
test 'create context with request url and query parameters' do
assert_equal @context.request_url, 'original_url'
assert_equal @context.query_parameters, 'query_parameters'
assert_equal @context.request_url, 'http://example.com/articles'
assert_equal @context.query_parameters, 'page' => 2
end
test 'url_helpers is set up for Rails url_helpers' do
@@ -36,14 +42,21 @@ class SerializationContextTest < ActiveSupport::TestCase
end
class WithoutRails < SerializationContextTest
def create_request
{
request_url: 'http://example.com/articles',
query_parameters: { 'page' => 2 }
}
end
setup do
require 'active_model_serializers/serialization_context'
@context = ActiveModelSerializers::SerializationContext.new(create_request)
end
test 'create context with request url and query parameters' do
assert_equal @context.request_url, 'original_url'
assert_equal @context.query_parameters, 'query_parameters'
assert_equal @context.request_url, 'http://example.com/articles'
assert_equal @context.query_parameters, 'page' => 2
end
test 'url_helpers is a module when Rails is not present' do

View File

@@ -161,6 +161,17 @@ module ActiveModelSerializers
assert_equal expected_response_without_pagination_links, adapter.serializable_hash
end
def test_raises_descriptive_error_when_serialization_context_unset
render_options = { adapter: :json_api }
adapter = serializable(using_kaminari, render_options)
exception = assert_raises do
adapter.as_json
end
exception_class = ActiveModelSerializers::Adapter::JsonApi::PaginationLinks::MissingSerializationContextError
assert_equal exception_class, exception.class
assert_match(/CollectionSerializer#paginated\?/, exception.message)
end
end
end
end