mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-25 15:23:06 +00:00
* Fix #1759, Grape integration, adds serialization_context - `serialization_context` is added in grape formatter so grape continues to render models without an explicit call to the `render` helper method - Made it straightforward for subclasses to add other serializer options (such as `serialization_scope`). * Updated Grape tests to include: - paginated collections - implicit Grape serializer (i.e. without explicit invocation of `render` helper method) * Update Changelog with fixes.
This commit is contained in:
committed by
Benjamin Fleischer
parent
a7296e8a92
commit
580492282f
@@ -1,6 +1,9 @@
|
||||
require 'test_helper'
|
||||
require 'grape'
|
||||
require 'grape/active_model_serializers'
|
||||
require 'kaminari'
|
||||
require 'kaminari/hooks'
|
||||
::Kaminari::Hooks.init
|
||||
|
||||
class ActiveModelSerializers::GrapeTest < ActiveSupport::TestCase
|
||||
include Rack::Test::Methods
|
||||
@@ -21,6 +24,30 @@ class ActiveModelSerializers::GrapeTest < ActiveSupport::TestCase
|
||||
ARModels::Post.all
|
||||
end
|
||||
end
|
||||
|
||||
def self.reset_all
|
||||
ARModels::Post.delete_all
|
||||
@all = nil
|
||||
end
|
||||
|
||||
def self.collection_per
|
||||
2
|
||||
end
|
||||
|
||||
def self.collection
|
||||
@collection ||=
|
||||
begin
|
||||
Kaminari.paginate_array(
|
||||
[
|
||||
Profile.new(id: 1, name: 'Name 1', description: 'Description 1', comments: 'Comments 1'),
|
||||
Profile.new(id: 2, name: 'Name 2', description: 'Description 2', comments: 'Comments 2'),
|
||||
Profile.new(id: 3, name: 'Name 3', description: 'Description 3', comments: 'Comments 3'),
|
||||
Profile.new(id: 4, name: 'Name 4', description: 'Description 4', comments: 'Comments 4'),
|
||||
Profile.new(id: 5, name: 'Name 5', description: 'Description 5', comments: 'Comments 5')
|
||||
]
|
||||
).page(1).per(collection_per)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class GrapeTest < Grape::API
|
||||
@@ -41,11 +68,28 @@ class ActiveModelSerializers::GrapeTest < ActiveSupport::TestCase
|
||||
posts = Models.all
|
||||
render posts, adapter: :json_api
|
||||
end
|
||||
|
||||
get '/render_collection_with_json_api' do
|
||||
posts = Models.collection
|
||||
render posts, adapter: :json_api
|
||||
end
|
||||
|
||||
get '/render_with_implicit_formatter' do
|
||||
Models.model1
|
||||
end
|
||||
|
||||
get '/render_array_with_implicit_formatter' do
|
||||
Models.all
|
||||
end
|
||||
|
||||
get '/render_collection_with_implicit_formatter' do
|
||||
Models.collection
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def app
|
||||
GrapeTest.new
|
||||
Grape::Middleware::Globals.new(GrapeTest.new)
|
||||
end
|
||||
|
||||
def test_formatter_returns_json
|
||||
@@ -77,6 +121,53 @@ class ActiveModelSerializers::GrapeTest < ActiveSupport::TestCase
|
||||
assert last_response.ok?
|
||||
assert_equal serializable_resource.to_json, last_response.body
|
||||
ensure
|
||||
ARModels::Post.delete_all
|
||||
Models.reset_all
|
||||
end
|
||||
|
||||
def test_formatter_handles_collections
|
||||
get '/grape/render_collection_with_json_api'
|
||||
assert last_response.ok?
|
||||
|
||||
representation = JSON.parse(last_response.body)
|
||||
assert representation.include?('data')
|
||||
assert representation['data'].count == Models.collection_per
|
||||
assert representation.include?('links')
|
||||
assert representation['links'].count > 0
|
||||
end
|
||||
|
||||
def test_implicit_formatter
|
||||
ActiveModel::Serializer.config.adapter = :json_api
|
||||
get '/grape/render_with_implicit_formatter'
|
||||
|
||||
post = Models.model1
|
||||
serializable_resource = serializable(post, adapter: :json_api)
|
||||
|
||||
assert last_response.ok?
|
||||
assert_equal serializable_resource.to_json, last_response.body
|
||||
end
|
||||
|
||||
def test_implicit_formatter_handles_arrays
|
||||
ActiveModel::Serializer.config.adapter = :json_api
|
||||
get '/grape/render_array_with_implicit_formatter'
|
||||
|
||||
posts = Models.all
|
||||
serializable_resource = serializable(posts, adapter: :json_api)
|
||||
|
||||
assert last_response.ok?
|
||||
assert_equal serializable_resource.to_json, last_response.body
|
||||
ensure
|
||||
Models.reset_all
|
||||
end
|
||||
|
||||
def test_implicit_formatter_handles_collections
|
||||
ActiveModel::Serializer.config.adapter = :json_api
|
||||
get '/grape/render_collection_with_implicit_formatter'
|
||||
assert last_response.ok?
|
||||
|
||||
representation = JSON.parse(last_response.body)
|
||||
assert representation.include?('data')
|
||||
assert representation['data'].count == Models.collection_per
|
||||
assert representation.include?('links')
|
||||
assert representation['links'].count > 0
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user