diff --git a/.travis.yml b/.travis.yml index 6ebfd7032..c10a97e75 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,12 +15,15 @@ install: - bundle install --retry=3 env: - - "RAILS_VERSION=4.0" - - "RAILS_VERSION=4.1" - - "RAILS_VERSION=4.2" - - "RAILS_VERSION=master" + global: + - JRUBY_OPTS=-Xcext.enabled=true + matrix: + - "RAILS_VERSION=4.0" + - "RAILS_VERSION=4.1" + - "RAILS_VERSION=4.2" + - "RAILS_VERSION=master" matrix: allow_failures: - rvm: ruby-head - - env: "RAILS_VERSION=master" + - env: "RAILS_VERSION=master" \ No newline at end of file diff --git a/Gemfile b/Gemfile index baf12948d..b4d0083f6 100644 --- a/Gemfile +++ b/Gemfile @@ -3,7 +3,8 @@ source 'https://rubygems.org' # Specify your gem's dependencies in active_model_serializers.gemspec gemspec -gem "minitest" +gem 'minitest' +gem 'git' version = ENV["RAILS_VERSION"] || "4.2" diff --git a/Rakefile b/Rakefile index 8a1f1e9e8..de05f9f18 100644 --- a/Rakefile +++ b/Rakefile @@ -1,7 +1,10 @@ -require "bundler/gem_tasks" - +require 'bundler/gem_tasks' +require 'git' +require 'benchmark' require 'rake/testtask' +task :default => :test + Rake::TestTask.new do |t| t.libs << "test" t.test_files = FileList['test/**/*_test.rb'] @@ -9,4 +12,35 @@ Rake::TestTask.new do |t| t.verbose = true end -task :default => :test +Rake::TestTask.new :benchmark_tests do |t| + t.libs << "test" + t.test_files = FileList['test/**/*_benchmark.rb'] + t.ruby_opts = ['-r./test/test_helper.rb'] + t.verbose = true +end + +task :benchmark do + @git = Git.init('.') + ref = @git.current_branch + + actual = run_benchmark_spec ref + master = run_benchmark_spec 'master' + + @git.checkout(ref) + + puts "\n\nResults ============================\n" + puts "------------------------------------~> (Branch) MASTER" + puts master + puts "------------------------------------\n\n" + + puts "------------------------------------~> (Actual Branch) #{ref}" + puts actual + puts "------------------------------------" +end + +def run_benchmark_spec(ref) + @git.checkout(ref) + response = Benchmark.realtime { Rake::Task['benchmark_tests'].invoke } + Rake::Task['benchmark_tests'].reenable + response +end \ No newline at end of file diff --git a/test/benchmark/serialization_benchmark.rb b/test/benchmark/serialization_benchmark.rb new file mode 100644 index 000000000..8fccc44e8 --- /dev/null +++ b/test/benchmark/serialization_benchmark.rb @@ -0,0 +1,50 @@ +require 'test_helper' + +module ActionController + module Serialization + class SerializerTest < ActionController::TestCase + class PostController < ActionController::Base + + def render_with_cache_enable + comment = Comment.new({ id: 1, body: 'ZOMG A COMMENT' }) + author = Author.new(id: 1, name: 'Joao Moura.') + post = Post.new({ id: 1, title: 'New Post', blog:nil, body: 'Body', comments: [comment], author: author }) + + render json: post + end + end + + tests PostController + + def test_render_with_cache_enable + ActionController::Base.cache_store.clear + get :render_with_cache_enable + + expected = { + id: 1, + title: 'New Post', + body: 'Body', + comments: [ + { + id: 1, + body: 'ZOMG A COMMENT' } + ], + blog: { + id: 999, + name: 'Custom blog' + }, + author: { + id: 1, + name: 'Joao Moura.' + } + } + + assert_equal 'application/json', @response.content_type + assert_equal expected.to_json, @response.body + + get :render_with_cache_enable + assert_equal expected.to_json, @response.body + end + end + end +end diff --git a/test/serializers/generators_test.rb b/test/serializers/generators_test.rb index c40d353e1..b6bdb175b 100644 --- a/test/serializers/generators_test.rb +++ b/test/serializers/generators_test.rb @@ -1,10 +1,3 @@ -class Foo < Rails::Application - if Rails.version.to_s.start_with? '4' - config.eager_load = false - config.secret_key_base = 'abc123' - end -end - Rails.application.load_generators require 'generators/serializer/serializer_generator' diff --git a/test/test_helper.rb b/test/test_helper.rb index a26a1aedf..e57cfa643 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -14,6 +14,8 @@ class Foo < Rails::Application config.action_controller.perform_caching = true config.active_support.test_order = :random ActionController::Base.cache_store = :memory_store + config.eager_load = false + config.secret_key_base = 'abc123' end end