mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-22 22:06:50 +00:00
179 lines
4.9 KiB
Ruby
179 lines
4.9 KiB
Ruby
require 'test_helper'
|
|
require 'grape'
|
|
require 'grape/active_model_serializers'
|
|
require 'kaminari'
|
|
require 'kaminari/hooks'
|
|
::Kaminari::Hooks.init
|
|
|
|
module ActiveModelSerializers
|
|
class GrapeTest < ActiveSupport::TestCase
|
|
include Rack::Test::Methods
|
|
module Models
|
|
def self.model1
|
|
ARModels::Post.new(id: 1, title: 'Dummy Title', body: 'Lorem Ipsum')
|
|
end
|
|
|
|
def self.model2
|
|
ARModels::Post.new(id: 2, title: 'Second Dummy Title', body: 'Second Lorem Ipsum')
|
|
end
|
|
|
|
def self.all
|
|
@all ||=
|
|
begin
|
|
model1.save!
|
|
model2.save!
|
|
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
|
|
format :json
|
|
include Grape::ActiveModelSerializers
|
|
|
|
resources :grape do
|
|
get '/render' do
|
|
render Models.model1
|
|
end
|
|
|
|
get '/render_with_json_api' do
|
|
post = Models.model1
|
|
render post, meta: { page: 1, total_pages: 2 }, adapter: :json_api
|
|
end
|
|
|
|
get '/render_array_with_json_api' do
|
|
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
|
|
Grape::Middleware::Globals.new(GrapeTest.new)
|
|
end
|
|
|
|
def test_formatter_returns_json
|
|
get '/grape/render'
|
|
|
|
post = Models.model1
|
|
serializable_resource = serializable(post)
|
|
|
|
assert last_response.ok?
|
|
assert_equal serializable_resource.to_json, last_response.body
|
|
end
|
|
|
|
def test_render_helper_passes_through_options_correctly
|
|
get '/grape/render_with_json_api'
|
|
|
|
post = Models.model1
|
|
serializable_resource = serializable(post, serializer: ARModels::PostSerializer, adapter: :json_api, meta: { page: 1, total_pages: 2 })
|
|
|
|
assert last_response.ok?
|
|
assert_equal serializable_resource.to_json, last_response.body
|
|
end
|
|
|
|
def test_formatter_handles_arrays
|
|
get '/grape/render_array_with_json_api'
|
|
|
|
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_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
|
|
post = Models.model1
|
|
serializable_resource = serializable(post, adapter: :json_api)
|
|
|
|
with_adapter :json_api do
|
|
get '/grape/render_with_implicit_formatter'
|
|
end
|
|
|
|
assert last_response.ok?
|
|
assert_equal serializable_resource.to_json, last_response.body
|
|
end
|
|
|
|
def test_implicit_formatter_handles_arrays
|
|
posts = Models.all
|
|
serializable_resource = serializable(posts, adapter: :json_api)
|
|
|
|
with_adapter :json_api do
|
|
get '/grape/render_array_with_implicit_formatter'
|
|
end
|
|
|
|
assert last_response.ok?
|
|
assert_equal serializable_resource.to_json, last_response.body
|
|
ensure
|
|
Models.reset_all
|
|
end
|
|
|
|
def test_implicit_formatter_handles_collections
|
|
with_adapter :json_api do
|
|
get '/grape/render_collection_with_implicit_formatter'
|
|
end
|
|
|
|
representation = JSON.parse(last_response.body)
|
|
assert last_response.ok?
|
|
assert representation.include?('data')
|
|
assert representation['data'].count == Models.collection_per
|
|
assert representation.include?('links')
|
|
assert representation['links'].count > 0
|
|
end
|
|
end
|
|
end
|