From 60ba54a3b02644891b4b59e2404dde83b2ea6f6c Mon Sep 17 00:00:00 2001 From: Benjamin Fleischer Date: Thu, 31 Dec 2020 17:15:21 -0500 Subject: [PATCH] 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 `' /opt/hostedtoolcache/Ruby/2.6.6/x64/bin/bundle:23:in `load' /opt/hostedtoolcache/Ruby/2.6.6/x64/bin/bundle:23:in `
' Tasks: TOP => default => test (See full trace by running task with --trace) Error: Process completed with exit code 1. ``` --- .github/workflows/ci.yml | 69 ++++++ .simplecov | 110 ---------- README.md | 1 - Rakefile | 13 +- active_model_serializers.gemspec | 5 +- docs/STYLE.md | 2 - .../explicit_serializer_test.rb | 6 +- test/action_controller/serialization_test.rb | 32 +-- test/grape_test.rb | 198 ------------------ test/support/isolated_unit.rb | 1 + test/support/rails_app.rb | 2 + test/test_helper.rb | 7 - 12 files changed, 101 insertions(+), 345 deletions(-) create mode 100644 .github/workflows/ci.yml delete mode 100644 .simplecov delete mode 100644 test/grape_test.rb diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..750cab2d --- /dev/null +++ b/.github/workflows/ci.yml @@ -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 }} diff --git a/.simplecov b/.simplecov deleted file mode 100644 index 955a6060..00000000 --- a/.simplecov +++ /dev/null @@ -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 diff --git a/README.md b/README.md index 295ed228..88033a3e 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,6 @@ Code Quality codebeat - Test Coverage diff --git a/Rakefile b/Rakefile index f45d4479..bb1a08de 100644 --- a/Rakefile +++ b/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 diff --git a/active_model_serializers.gemspec b/active_model_serializers.gemspec index f37f5a8a..e50275b1 100644 --- a/active_model_serializers.gemspec +++ b/active_model_serializers.gemspec @@ -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 diff --git a/docs/STYLE.md b/docs/STYLE.md index ccd75dd4..236c5138 100644 --- a/docs/STYLE.md +++ b/docs/STYLE.md @@ -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). diff --git a/test/action_controller/explicit_serializer_test.rb b/test/action_controller/explicit_serializer_test.rb index 71df54b2..2d39e7b6 100644 --- a/test/action_controller/explicit_serializer_test.rb +++ b/test/action_controller/explicit_serializer_test.rb @@ -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' }, diff --git a/test/action_controller/serialization_test.rb b/test/action_controller/serialization_test.rb index 6e9bb454..8d360b6f 100644 --- a/test/action_controller/serialization_test.rb +++ b/test/action_controller/serialization_test.rb @@ -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 diff --git a/test/grape_test.rb b/test/grape_test.rb deleted file mode 100644 index 3abcd1db..00000000 --- a/test/grape_test.rb +++ /dev/null @@ -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 diff --git a/test/support/isolated_unit.rb b/test/support/isolated_unit.rb index 968ae007..b83e0b29 100644 --- a/test/support/isolated_unit.rb +++ b/test/support/isolated_unit.rb @@ -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' diff --git a/test/support/rails_app.rb b/test/support/rails_app.rb index 5f81d434..26cc770e 100644 --- a/test/support/rails_app.rb +++ b/test/support/rails_app.rb @@ -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' } diff --git a/test/test_helper.rb b/test/test_helper.rb index e8f60cc9..7d8ca63e 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -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'