mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-22 22:06:50 +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:
parent
6d651bc9e3
commit
60ba54a3b0
69
.github/workflows/ci.yml
vendored
Normal file
69
.github/workflows/ci.yml
vendored
Normal file
@ -0,0 +1,69 @@
|
||||
---
|
||||
|
||||
name: CI
|
||||
|
||||
on:
|
||||
- "push"
|
||||
|
||||
jobs:
|
||||
test:
|
||||
name: "Testing"
|
||||
runs-on: ubuntu-18.04
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
# Recent Rubies and Rails
|
||||
- ruby-version: '2.6'
|
||||
rails-version: '6.1'
|
||||
- ruby-version: '2.6'
|
||||
rails-version: '6.0'
|
||||
- ruby-version: '2.7'
|
||||
rails-version: '6.0'
|
||||
- ruby-version: '2.6'
|
||||
rails-version: '5.2'
|
||||
# Old Rubies and Rails
|
||||
- ruby-version: '2.5'
|
||||
rails-version: '5.1'
|
||||
bundler: '1'
|
||||
- ruby-version: '2.4'
|
||||
rails-version: '5.0'
|
||||
bundler: '1'
|
||||
- ruby-version: '2.4'
|
||||
rails-version: '4.2'
|
||||
bundler: '1'
|
||||
# Failing with a stack trace in active support
|
||||
# - ruby-version: '2.4'
|
||||
# rails-version: '4.1'
|
||||
# bundler: '1'
|
||||
|
||||
continue-on-error: "${{ endsWith(matrix.ruby-version, 'head') }}"
|
||||
|
||||
env:
|
||||
CI: "1"
|
||||
|
||||
steps:
|
||||
- name: "Checkout Code"
|
||||
uses: "actions/checkout@v2"
|
||||
timeout-minutes: 5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Install required libs
|
||||
run: |
|
||||
sudo apt-get -yqq install libsqlite3-dev
|
||||
|
||||
- name: "Build Ruby"
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: "${{ matrix.ruby-version }}"
|
||||
bundler: "${{ matrix.bundler || 2 }}"
|
||||
bundler-cache: true
|
||||
env:
|
||||
RAILS_VERSION: ${{ matrix.rails-version }}
|
||||
|
||||
- name: "Run tests"
|
||||
run: |
|
||||
bundle exec rake
|
||||
env:
|
||||
RAILS_VERSION: ${{ matrix.rails-version }}
|
||||
110
.simplecov
110
.simplecov
@ -1,110 +0,0 @@
|
||||
# https://github.com/colszowka/simplecov#using-simplecov-for-centralized-config
|
||||
# see https://github.com/colszowka/simplecov/blob/master/lib/simplecov/defaults.rb
|
||||
# vim: set ft=ruby
|
||||
|
||||
## DEFINE VARIABLES
|
||||
@minimum_coverage = ENV.fetch('COVERAGE_MINIMUM') {
|
||||
case (defined?(RUBY_ENGINE) && RUBY_ENGINE) || "ruby"
|
||||
when 'jruby', 'rbx'
|
||||
96.0
|
||||
else
|
||||
98.1
|
||||
end
|
||||
}.to_f.round(2)
|
||||
# rubocop:disable Style/DoubleNegation
|
||||
ENV['FULL_BUILD'] ||= ENV['CI']
|
||||
@running_ci = !!(ENV['FULL_BUILD'] =~ /\Atrue\z/i)
|
||||
@generate_report = @running_ci || !!(ENV['COVERAGE'] =~ /\Atrue\z/i)
|
||||
@output = STDOUT
|
||||
# rubocop:enable Style/DoubleNegation
|
||||
|
||||
## CONFIGURE SIMPLECOV
|
||||
|
||||
SimpleCov.profiles.define 'app' do
|
||||
coverage_dir 'coverage'
|
||||
load_profile 'test_frameworks'
|
||||
|
||||
add_group 'Libraries', 'lib'
|
||||
|
||||
add_group 'Long files' do |src_file|
|
||||
src_file.lines.count > 100
|
||||
end
|
||||
class MaxLinesFilter < SimpleCov::Filter
|
||||
def matches?(source_file)
|
||||
source_file.lines.count < filter_argument
|
||||
end
|
||||
end
|
||||
add_group 'Short files', MaxLinesFilter.new(5)
|
||||
|
||||
# Exclude these paths from analysis
|
||||
add_filter '/config/'
|
||||
add_filter '/db/'
|
||||
add_filter 'tasks'
|
||||
add_filter '/.bundle/'
|
||||
end
|
||||
|
||||
## START TRACKING COVERAGE (before activating SimpleCov)
|
||||
require 'coverage'
|
||||
Coverage.start
|
||||
|
||||
## ADD SOME CUSTOM REPORTING AT EXIT
|
||||
SimpleCov.at_exit do
|
||||
next if $! and not ($!.kind_of? SystemExit and $!.success?)
|
||||
|
||||
header = "#{'*' * 20} SimpleCov Results #{'*' * 20}"
|
||||
results = SimpleCov.result.format!.join("\n")
|
||||
exit_message = <<-EOF
|
||||
|
||||
#{header}
|
||||
{{RESULTS}}
|
||||
{{FAILURE_MESSAGE}}
|
||||
|
||||
#{'*' * header.size}
|
||||
EOF
|
||||
percent = Float(SimpleCov.result.covered_percent)
|
||||
if percent < @minimum_coverage
|
||||
failure_message = <<-EOF
|
||||
Spec coverage was not high enough: #{percent.round(2)}% is < #{@minimum_coverage}%
|
||||
EOF
|
||||
exit_message.sub!('{{RESULTS}}', results).sub!('{{FAILURE_MESSAGE}}', failure_message)
|
||||
@output.puts exit_message
|
||||
abort(failure_message) if @generate_report
|
||||
elsif @running_ci
|
||||
exit_message.sub!('{{RESULTS}}', results).sub!('{{FAILURE_MESSAGE}}', <<-EOF)
|
||||
Nice job! Spec coverage (#{percent.round(2)}%) is still at or above #{@minimum_coverage}%
|
||||
EOF
|
||||
@output.puts exit_message
|
||||
end
|
||||
end
|
||||
|
||||
## CAPTURE CONFIG IN CLOSURE 'AppCoverage.start'
|
||||
## to defer running until test/test_helper.rb is loaded.
|
||||
# rubocop:disable Style/MultilineBlockChain
|
||||
AppCoverage = Class.new do
|
||||
def initialize(&block)
|
||||
@block = block
|
||||
end
|
||||
|
||||
def start
|
||||
@block.call
|
||||
end
|
||||
end.new do
|
||||
SimpleCov.start 'app'
|
||||
if @generate_report
|
||||
if @running_ci
|
||||
require 'codeclimate-test-reporter'
|
||||
@output.puts '[COVERAGE] Running with SimpleCov Simple Formatter and CodeClimate Test Reporter'
|
||||
formatters = [
|
||||
SimpleCov::Formatter::SimpleFormatter,
|
||||
CodeClimate::TestReporter::Formatter
|
||||
]
|
||||
else
|
||||
@output.puts '[COVERAGE] Running with SimpleCov HTML Formatter'
|
||||
formatters = [SimpleCov::Formatter::HTMLFormatter]
|
||||
end
|
||||
else
|
||||
formatters = []
|
||||
end
|
||||
SimpleCov.formatters = formatters
|
||||
end
|
||||
# rubocop:enable Style/MultilineBlockChain
|
||||
@ -13,7 +13,6 @@
|
||||
<td>
|
||||
<a href="https://codeclimate.com/github/rails-api/active_model_serializers"><img src="https://codeclimate.com/github/rails-api/active_model_serializers/badges/gpa.svg" alt="Code Quality"></a>
|
||||
<a href="https://codebeat.co/projects/github-com-rails-api-active_model_serializers"><img src="https://codebeat.co/badges/a9ab35fa-8b5a-4680-9d4e-a81f9a55ebcd" alt="codebeat" ></a>
|
||||
<a href="https://codeclimate.com/github/rails-api/active_model_serializers/coverage"><img src="https://codeclimate.com/github/rails-api/active_model_serializers/badges/coverage.svg" alt="Test Coverage"></a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
13
Rakefile
13
Rakefile
@ -5,10 +5,6 @@ begin
|
||||
rescue LoadError
|
||||
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
||||
end
|
||||
begin
|
||||
require 'simplecov'
|
||||
rescue LoadError # rubocop:disable Lint/HandleExceptions
|
||||
end
|
||||
import('lib/tasks/rubocop.rake')
|
||||
|
||||
Bundler::GemHelper.install_tasks
|
||||
@ -56,13 +52,20 @@ namespace :test do
|
||||
# https://github.com/rails/rails/blob/3d590add45/railties/lib/rails/generators/app_base.rb#L345-L363
|
||||
_bundle_command = Gem.bin_path('bundler', 'bundle')
|
||||
require 'bundler'
|
||||
Bundler.with_clean_env do
|
||||
with_clean_env = proc do
|
||||
isolated_test_files.all? do |test_file|
|
||||
command = "-w -I#{dir}/lib -I#{dir}/test #{Shellwords.shellescape(test_file)}"
|
||||
full_command = %("#{Gem.ruby}" #{command})
|
||||
system(full_command)
|
||||
end or fail 'Failures' # rubocop:disable Style/AndOr
|
||||
end
|
||||
bundler_method =
|
||||
if Bundler.method_defined?(:with_unbundled_env)
|
||||
:with_unbundled_env
|
||||
else
|
||||
:with_clean_env
|
||||
end
|
||||
Bundler.public_send(bundler_method, &with_clean_env)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@ -55,9 +55,8 @@ Gem::Specification.new do |spec|
|
||||
spec.add_development_dependency 'will_paginate', '~> 3.0', '>= 3.0.7'
|
||||
|
||||
spec.add_development_dependency 'bundler'
|
||||
spec.add_development_dependency 'simplecov', '>= 0.11'
|
||||
spec.add_development_dependency 'timecop', '~> 0.7'
|
||||
spec.add_development_dependency 'grape', ['>= 0.13', '< 0.19.1']
|
||||
spec.add_development_dependency 'grape', '>= 0.13'
|
||||
spec.add_development_dependency 'json_schema'
|
||||
spec.add_development_dependency 'rake', ['>= 10.0', '< 13.0']
|
||||
spec.add_development_dependency 'rake', '>= 10.0'
|
||||
end
|
||||
|
||||
@ -18,8 +18,6 @@
|
||||
|
||||
- [Improve code quality](https://codeclimate.com/github/rails-api/active_model_serializers/code?sort=smell_count&sort_direction=desc).
|
||||
|
||||
- [Improve amount of code exercised by tests](https://codeclimate.com/github/rails-api/active_model_serializers/coverage?sort=covered_percent&sort_direction=asc).
|
||||
|
||||
- [Fix RuboCop (Style) TODOS](https://github.com/rails-api/active_model_serializers/blob/master/.rubocop_todo.yml).
|
||||
- Delete and offsense, run `rake rubocop` (or possibly `rake rubocop:auto_correct`),
|
||||
and [submit a PR](CONTRIBUTING.md#submitting-a-pull-request-pr).
|
||||
|
||||
@ -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'
|
||||
|
||||
Loading…
Reference in New Issue
Block a user