rails/railties/test/application/per_request_digest_cache_test.rb
Kasper Timm Hansen 40f79da8f2 Make digest cache work in development.
Avoid computing the same fragment digest many times when looping over templates.

The cache is cleared on every request so template changes are still picked up.
2015-07-18 21:54:19 +02:00

64 lines
1.7 KiB
Ruby

require 'isolation/abstract_unit'
require 'rack/test'
require 'minitest/mock'
require 'action_view'
require 'active_support/testing/method_call_assertions'
class PerRequestDigestCacheTest < ActiveSupport::TestCase
include ActiveSupport::Testing::Isolation
include ActiveSupport::Testing::MethodCallAssertions
include Rack::Test::Methods
setup do
build_app
add_to_config 'config.consider_all_requests_local = true'
app_file 'app/models/customer.rb', <<-RUBY
class Customer < Struct.new(:name, :id)
extend ActiveModel::Naming
include ActiveModel::Conversion
end
RUBY
app_file 'config/routes.rb', <<-RUBY
Rails.application.routes.draw do
resources :customers, only: :index
end
RUBY
app_file 'app/controllers/customers_controller.rb', <<-RUBY
class CustomersController < ApplicationController
def index
render [ Customer.new('david', 1), Customer.new('dingus', 2) ]
end
end
RUBY
app_file 'app/views/customers/_customer.html.erb', <<-RUBY
<% cache customer do %>
<%= customer.name %>
<% end %>
RUBY
require "#{app_path}/config/environment"
end
teardown :teardown_app
test "digests are reused when rendering the same template twice" do
get '/customers'
assert_equal 200, last_response.status
assert_equal [ '8ba099b7749542fe765ff34a6824d548' ], ActionView::Digestor.cache.values
assert_equal %w(david dingus), last_response.body.split.map(&:strip)
end
test "template digests are cleared before a request" do
assert_called(ActionView::Digestor.cache, :clear) do
get '/customers'
assert_equal 200, last_response.status
end
end
end