mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-25 07:16:49 +00:00
Set up GitHub actions CI (#2403)
* Set up GitHub actions CI * Remove simplecov entirely for now * Fix deprecations * Relax dev deps * Address Rails 6.0 blocking hosts * Rails 6.1 content type changed to application/json; charset=utf-8 * Test a few more rubies and rails * Stop testing grape. We should drop grape support ``` /home/runner/work/active_model_serializers/active_model_serializers/vendor/bundle/ruby/2.6.0/gems/grape-0.19.0/lib/grape/error_formatter.rb:16: warning: in `formatters': the last argument was passed as a single Hash /home/runner/work/active_model_serializers/active_model_serializers/vendor/bundle/ruby/2.6.0/gems/grape-0.19.0/lib/grape/error_formatter.rb:21: warning: although a splat keyword arguments here Run options: --seed 23470 ..........................................................................................................................................................................................................................................................................................................................................................................................................................................E ActiveModelSerializers::GrapeTest#test_render_helper_passes_through_options_correctly: NoMethodError: undefined method `[]' for nil:NilClass bin/rails test /home/runner/work/active_model_serializers/active_model_serializers/test/grape_test.rb:126 W, [2020-12-29T02:27:48.991413 #2790] WARN -- : You are setting a key that conflicts with a built-in method Hashie::Mash#size defined in Hash. This can cause unexpected behavior when accessing the key as a property. You can still access the key via the #[] method. W, [2020-12-29T02:27:48.991505 #2790] WARN -- : You are setting a key that conflicts with a built-in method Hashie::Mash#size defined in Hash. This can cause unexpected behavior when accessing the key as a property. You can still access the key via the #[] method. W, [2020-12-29T02:27:48.991581 #2790] WARN -- : You are setting a key that conflicts with a built-in method Hashie::Mash#size defined in Hash. This can cause unexpected behavior when accessing the key as a property. You can still access the key via the #[] method. W, [2020-12-29T02:27:48.991625 #2790] WARN -- : You are setting a key that conflicts with a built-in method Hashie::Mash#size defined in Hash. This can cause unexpected behavior when accessing the key as a property. You can still access the key via the #[] method. E Error: ActiveModelSerializers::GrapeTest#test_implicit_formatter_handles_collections: NoMethodError: undefined method `[]' for nil:NilClass bin/rails test /home/runner/work/active_model_serializers/active_model_serializers/test/grape_test.rb:185 ............................................................................................................................................... Finished in 2.052241s, 280.6688 runs/s, 473.6285 assertions/s. 576 runs, 972 assertions, 0 failures, 7 errors, 0 skips rake aborted! Command failed with status (1): [ruby -w -I"lib:lib:test" -r./test/test_helper.rb -w -I"/home/runner/work/active_model_serializers/active_model_serializers/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib" "/home/runner/work/active_model_serializers/active_model_serializers/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/rake_test_loader.rb" "test/action_controller/adapter_selector_test.rb" "test/action_controller/explicit_serializer_test.rb" "test/action_controller/json/include_test.rb" "test/action_controller/json_api/deserialization_test.rb" "test/action_controller/json_api/errors_test.rb" "test/action_controller/json_api/fields_test.rb" "test/action_controller/json_api/linked_test.rb" "test/action_controller/json_api/pagination_test.rb" "test/action_controller/json_api/transform_test.rb" "test/action_controller/lookup_proc_test.rb" "test/action_controller/namespace_lookup_test.rb" "test/action_controller/serialization_scope_name_test.rb" "test/action_controller/serialization_test.rb" "test/active_model_serializers/adapter_for_test.rb" "test/active_model_serializers/json_pointer_test.rb" "test/active_model_serializers/logging_test.rb" "test/active_model_serializers/model_test.rb" "test/active_model_serializers/test/schema_test.rb" "test/active_model_serializers/test/serializer_test.rb" "test/active_record_test.rb" "test/adapter/attributes_test.rb" "test/adapter/deprecation_test.rb" "test/adapter/json/belongs_to_test.rb" "test/adapter/json/collection_test.rb" "test/adapter/json/fields_test.rb" "test/adapter/json/has_many_test.rb" "test/adapter/json/transform_test.rb" "test/adapter/json_api/belongs_to_test.rb" "test/adapter/json_api/collection_test.rb" "test/adapter/json_api/errors_test.rb" "test/adapter/json_api/fields_test.rb" "test/adapter/json_api/has_many_explicit_serializer_test.rb" "test/adapter/json_api/has_many_test.rb" "test/adapter/json_api/has_one_test.rb" "test/adapter/json_api/include_data_if_sideloaded_test.rb" "test/adapter/json_api/json_api_test.rb" "test/adapter/json_api/linked_test.rb" "test/adapter/json_api/links_test.rb" "test/adapter/json_api/pagination_links_test.rb" "test/adapter/json_api/parse_test.rb" "test/adapter/json_api/relationship_test.rb" "test/adapter/json_api/resource_meta_test.rb" "test/adapter/json_api/toplevel_jsonapi_test.rb" "test/adapter/json_api/transform_test.rb" "test/adapter/json_api/type_test.rb" "test/adapter/json_test.rb" "test/adapter/null_test.rb" "test/adapter/polymorphic_test.rb" "test/adapter_test.rb" "test/array_serializer_test.rb" "test/cache_test.rb" "test/collection_serializer_test.rb" "test/generators/scaffold_controller_generator_test.rb" "test/generators/serializer_generator_test.rb" "test/grape_test.rb" "test/lint_test.rb" "test/logger_test.rb" "test/poro_test.rb" "test/serializable_resource_test.rb" "test/serializers/association_macros_test.rb" "test/serializers/associations_test.rb" "test/serializers/attribute_test.rb" "test/serializers/attributes_test.rb" "test/serializers/configuration_test.rb" "test/serializers/fieldset_test.rb" "test/serializers/meta_test.rb" "test/serializers/options_test.rb" "test/serializers/read_attribute_for_serialization_test.rb" "test/serializers/reflection_test.rb" "test/serializers/root_test.rb" "test/serializers/serialization_test.rb" "test/serializers/serializer_for_test.rb" "test/serializers/serializer_for_with_namespace_test.rb" ] /home/runner/work/active_model_serializers/active_model_serializers/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/exe/rake:27:in `<top (required)>' /opt/hostedtoolcache/Ruby/2.6.6/x64/bin/bundle:23:in `load' /opt/hostedtoolcache/Ruby/2.6.6/x64/bin/bundle:23:in `<main>' Tasks: TOP => default => test (See full trace by running task with --trace) Error: Process completed with exit code 1. ```
This commit is contained in:
committed by
GitHub
parent
6d651bc9e3
commit
60ba54a3b0
@@ -71,13 +71,13 @@ module ActionController
|
||||
def test_render_using_explicit_serializer
|
||||
get :render_using_explicit_serializer
|
||||
|
||||
assert_equal 'application/json', @response.content_type
|
||||
assert_match(%r{\Aapplication/json}, @response.content_type)
|
||||
assert_equal '{"name":"Name 1"}', @response.body
|
||||
end
|
||||
|
||||
def test_render_array_using_explicit_serializer
|
||||
get :render_array_using_explicit_serializer
|
||||
assert_equal 'application/json', @response.content_type
|
||||
assert_match(%r{\Aapplication/json}, @response.content_type)
|
||||
|
||||
expected = [
|
||||
{ 'name' => 'Name 1' },
|
||||
@@ -89,7 +89,7 @@ module ActionController
|
||||
|
||||
def test_render_array_using_implicit_serializer
|
||||
get :render_array_using_implicit_serializer
|
||||
assert_equal 'application/json', @response.content_type
|
||||
assert_match(%r{\Aapplication/json}, @response.content_type)
|
||||
|
||||
expected = [
|
||||
{ 'name' => 'Name 1' },
|
||||
|
||||
@@ -155,7 +155,7 @@ module ActionController
|
||||
description: 'Description 1'
|
||||
}
|
||||
|
||||
assert_equal 'application/json', @response.content_type
|
||||
assert_match(%r{\Aapplication/json}, @response.content_type)
|
||||
assert_equal expected.to_json, @response.body
|
||||
end
|
||||
|
||||
@@ -174,7 +174,7 @@ module ActionController
|
||||
}
|
||||
}
|
||||
|
||||
assert_equal 'application/json', @response.content_type
|
||||
assert_match(%r{\Aapplication/json}, @response.content_type)
|
||||
assert_equal expected.to_json, @response.body
|
||||
end
|
||||
|
||||
@@ -183,7 +183,7 @@ module ActionController
|
||||
get :render_array_using_custom_root
|
||||
end
|
||||
expected = { custom_root: [{ name: 'Name 1', description: 'Description 1' }] }
|
||||
assert_equal 'application/json', @response.content_type
|
||||
assert_match(%r{\Aapplication/json}, @response.content_type)
|
||||
assert_equal expected.to_json, @response.body
|
||||
end
|
||||
|
||||
@@ -193,7 +193,7 @@ module ActionController
|
||||
end
|
||||
|
||||
expected = { custom_root: [] }
|
||||
assert_equal 'application/json', @response.content_type
|
||||
assert_match(%r{\Aapplication/json}, @response.content_type)
|
||||
assert_equal expected.to_json, @response.body
|
||||
end
|
||||
|
||||
@@ -203,14 +203,14 @@ module ActionController
|
||||
end
|
||||
|
||||
expected = { custom_root: { name: 'Name 1', description: 'Description 1' } }
|
||||
assert_equal 'application/json', @response.content_type
|
||||
assert_match(%r{\Aapplication/json}, @response.content_type)
|
||||
assert_equal expected.to_json, @response.body
|
||||
end
|
||||
|
||||
def test_render_json_object_without_serializer
|
||||
get :render_json_object_without_serializer
|
||||
|
||||
assert_equal 'application/json', @response.content_type
|
||||
assert_match(%r{\Aapplication/json}, @response.content_type)
|
||||
expected_body = { error: 'Result is Invalid' }
|
||||
assert_equal expected_body.to_json, @response.body
|
||||
end
|
||||
@@ -218,14 +218,14 @@ module ActionController
|
||||
def test_render_json_array_object_without_serializer
|
||||
get :render_json_array_object_without_serializer
|
||||
|
||||
assert_equal 'application/json', @response.content_type
|
||||
assert_match(%r{\Aapplication/json}, @response.content_type)
|
||||
expected_body = [{ error: 'Result is Invalid' }]
|
||||
assert_equal expected_body.to_json, @response.body
|
||||
end
|
||||
|
||||
def test_render_array_using_implicit_serializer
|
||||
get :render_array_using_implicit_serializer
|
||||
assert_equal 'application/json', @response.content_type
|
||||
assert_match(%r{\Aapplication/json}, @response.content_type)
|
||||
|
||||
expected = [
|
||||
{
|
||||
@@ -261,7 +261,7 @@ module ActionController
|
||||
}
|
||||
}
|
||||
|
||||
assert_equal 'application/json', @response.content_type
|
||||
assert_match(%r{\Aapplication/json}, @response.content_type)
|
||||
assert_equal expected.to_json, @response.body
|
||||
end
|
||||
|
||||
@@ -284,7 +284,7 @@ module ActionController
|
||||
}
|
||||
}
|
||||
|
||||
assert_equal 'application/json', @response.content_type
|
||||
assert_match(%r{\Aapplication/json}, @response.content_type)
|
||||
assert_equal expected.to_json, @response.body
|
||||
end
|
||||
|
||||
@@ -313,7 +313,7 @@ module ActionController
|
||||
Timecop.freeze(Time.zone.now) do
|
||||
get :render_object_with_cache_enabled
|
||||
|
||||
assert_equal 'application/json', @response.content_type
|
||||
assert_match(%r{\Aapplication/json}, @response.content_type)
|
||||
assert_equal expected.to_json, @response.body
|
||||
|
||||
get :render_changed_object_with_cache_enabled
|
||||
@@ -349,7 +349,7 @@ module ActionController
|
||||
}
|
||||
}
|
||||
|
||||
assert_equal 'application/json', @response.content_type
|
||||
assert_match(%r{\Aapplication/json}, @response.content_type)
|
||||
actual = @response.body
|
||||
expected = expected.to_json
|
||||
if ENV['APPVEYOR'] && actual != expected
|
||||
@@ -364,7 +364,7 @@ module ActionController
|
||||
get :render_fragment_changed_object_with_only_cache_enabled
|
||||
response = JSON.parse(@response.body)
|
||||
|
||||
assert_equal 'application/json', @response.content_type
|
||||
assert_match(%r{\Aapplication/json}, @response.content_type)
|
||||
assert_equal 'ZOMG A ROLE', response['name']
|
||||
assert_equal 'HUEHUEBRBR', response['description']
|
||||
end
|
||||
@@ -374,7 +374,7 @@ module ActionController
|
||||
get :render_fragment_changed_object_with_except_cache_enabled
|
||||
response = JSON.parse(@response.body)
|
||||
|
||||
assert_equal 'application/json', @response.content_type
|
||||
assert_match(%r{\Aapplication/json}, @response.content_type)
|
||||
assert_equal 5, response['rating']
|
||||
assert_equal 'lol', response['content']
|
||||
end
|
||||
@@ -395,7 +395,7 @@ module ActionController
|
||||
}
|
||||
}
|
||||
|
||||
assert_equal 'application/json', @response.content_type
|
||||
assert_match(%r{\Aapplication/json}, @response.content_type)
|
||||
assert_equal expected_return, response
|
||||
end
|
||||
end
|
||||
@@ -426,7 +426,7 @@ module ActionController
|
||||
|
||||
get :update_and_render_object_with_cache_enabled
|
||||
|
||||
assert_equal 'application/json', @response.content_type
|
||||
assert_match(%r{\Aapplication/json}, @response.content_type)
|
||||
actual = @response.body
|
||||
expected = expected.to_json
|
||||
if ENV['APPVEYOR'] && actual != expected
|
||||
|
||||
@@ -1,198 +0,0 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'test_helper'
|
||||
TestHelper.silence_warnings do
|
||||
require 'grape'
|
||||
end
|
||||
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
|
||||
TestHelper.silence_warnings do
|
||||
include Grape::ActiveModelSerializers
|
||||
end
|
||||
|
||||
def self.resources(*)
|
||||
TestHelper.silence_warnings do
|
||||
super
|
||||
end
|
||||
end
|
||||
|
||||
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
|
||||
|
||||
extend Minitest::Assertions
|
||||
def self.run_one_method(*)
|
||||
_, stderr = capture_io do
|
||||
super
|
||||
end
|
||||
fail Minitest::Assertion, stderr if stderr !~ /grape/
|
||||
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
|
||||
@@ -68,6 +68,7 @@ module TestHelpers
|
||||
fake_logger = Logger.new(nil)
|
||||
config.logger = fake_logger
|
||||
Rails.application.routes.default_url_options = { host: 'example.com' }
|
||||
config.hosts << 'www.example.com' if Rails.version >= '6.0'
|
||||
end
|
||||
def app.name; 'IsolatedRailsApp'; end # rubocop:disable Style/SingleLineMethods
|
||||
app.respond_to?(:secrets) && app.secrets.secret_key_base = '3b7cd727ee24e8444053437c36cc66c4'
|
||||
|
||||
@@ -14,6 +14,8 @@ module ActiveModelSerializers
|
||||
end
|
||||
|
||||
config.filter_parameters += [:password]
|
||||
|
||||
config.hosts << 'www.example.com' if Rails.version >= '6.0'
|
||||
end
|
||||
|
||||
app.routes.default_url_options = { host: 'example.com' }
|
||||
|
||||
@@ -4,13 +4,6 @@
|
||||
ENV['RAILS_ENV'] = 'test'
|
||||
require 'bundler/setup'
|
||||
|
||||
begin
|
||||
require 'simplecov'
|
||||
AppCoverage.start
|
||||
rescue LoadError
|
||||
STDERR.puts 'Running without SimpleCov'
|
||||
end
|
||||
|
||||
require 'pry'
|
||||
require 'timecop'
|
||||
require 'rails'
|
||||
|
||||
Reference in New Issue
Block a user