diff --git a/Gemfile b/Gemfile index 67246f24..4acd87f3 100644 --- a/Gemfile +++ b/Gemfile @@ -45,4 +45,5 @@ end group :development, :test do gem 'rubocop', '~> 0.36', require: false + gem 'git' end diff --git a/Rakefile b/Rakefile index 04c28a1a..695fcb84 100644 --- a/Rakefile +++ b/Rakefile @@ -74,3 +74,38 @@ end desc 'CI test task' task :ci => [:default] + +require 'git' +require 'benchmark' +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 diff --git a/test/benchmark/serialization_benchmark.rb b/test/benchmark/serialization_benchmark.rb new file mode 100644 index 00000000..8fccc44e --- /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