diff options
author | Carlhuda <carlhuda@engineyard.com> | 2010-09-13 15:53:14 -0700 |
---|---|---|
committer | Carlhuda <carlhuda@engineyard.com> | 2010-09-13 16:06:03 -0700 |
commit | 0fe99e87c0af568df2f557637fff2983c928b8f2 (patch) | |
tree | e740680bb8b922dead8a0597f76a57bf96d731d3 /railties/test/application/middleware/cache_test.rb | |
parent | 254ab7d916e579b9300951f5f33d3c5d3ee755a2 (diff) | |
download | rails-0fe99e87c0af568df2f557637fff2983c928b8f2.tar.gz rails-0fe99e87c0af568df2f557637fff2983c928b8f2.tar.bz2 rails-0fe99e87c0af568df2f557637fff2983c928b8f2.zip |
Add tests for Rack::Cache
Diffstat (limited to 'railties/test/application/middleware/cache_test.rb')
-rw-r--r-- | railties/test/application/middleware/cache_test.rb | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/railties/test/application/middleware/cache_test.rb b/railties/test/application/middleware/cache_test.rb new file mode 100644 index 0000000000..655f9bcd55 --- /dev/null +++ b/railties/test/application/middleware/cache_test.rb @@ -0,0 +1,148 @@ +require 'isolation/abstract_unit' + +module ApplicationTests + class RoutingTest < Test::Unit::TestCase + include ActiveSupport::Testing::Isolation + + def setup + build_app + boot_rails + require 'rack/test' + extend Rack::Test::Methods + end + + def app(env = "production") + old_env = ENV["RAILS_ENV"] + + @app ||= begin + ENV["RAILS_ENV"] = env + require "#{app_path}/config/environment" + Rails.application + end + ensure + ENV["RAILS_ENV"] = old_env + end + + def simple_controller + controller :foo, <<-RUBY + class ExpiresController < ApplicationController + def expires_header + expires_in 10, :public => !params[:private] + render :text => ActiveSupport::SecureRandom.hex(16) + end + + def expires_etag + render_conditionally(:etag => "1") + end + + def expires_last_modified + $last_modified ||= Time.now.utc + render_conditionally(:last_modified => $last_modified) + end + private + def render_conditionally(headers) + if stale?(headers.merge(:public => !params[:private])) + render :text => ActiveSupport::SecureRandom.hex(16) + end + end + end + RUBY + + app_file 'config/routes.rb', <<-RUBY + AppTemplate::Application.routes.draw do + match ':controller(/:action)' + end + RUBY + end + + def test_cache_works_with_expires + simple_controller + + get "/expires/expires_header" + assert_equal "miss, store", last_response.headers["X-Rack-Cache"] + assert_equal "max-age=10, public", last_response.headers["Cache-Control"] + + body = last_response.body + + get "/expires/expires_header" + + assert_equal "fresh", last_response.headers["X-Rack-Cache"] + + assert_equal body, last_response.body + end + + def test_cache_works_with_expires_private + simple_controller + + get "/expires/expires_header", :private => true + assert_equal "miss", last_response.headers["X-Rack-Cache"] + assert_equal "private, max-age=10", last_response.headers["Cache-Control"] + + body = last_response.body + + get "/expires/expires_header", :private => true + assert_equal "miss", last_response.headers["X-Rack-Cache"] + assert_not_equal body, last_response.body + end + + def test_cache_works_with_etags + simple_controller + + get "/expires/expires_etag" + assert_equal "miss, store", last_response.headers["X-Rack-Cache"] + assert_equal "public", last_response.headers["Cache-Control"] + + body = last_response.body + etag = last_response.headers["ETag"] + + get "/expires/expires_etag", {}, "If-None-Match" => etag + assert_equal "stale, valid, store", last_response.headers["X-Rack-Cache"] + assert_equal body, last_response.body + end + + def test_cache_works_with_etags_private + simple_controller + + get "/expires/expires_etag", :private => true + assert_equal "miss", last_response.headers["X-Rack-Cache"] + assert_equal "must-revalidate, private, max-age=0", last_response.headers["Cache-Control"] + + body = last_response.body + etag = last_response.headers["ETag"] + + get "/expires/expires_etag", {:private => true}, "If-None-Match" => etag + assert_equal "miss", last_response.headers["X-Rack-Cache"] + assert_not_equal body, last_response.body + end + + def test_cache_works_with_last_modified + simple_controller + + get "/expires/expires_last_modified" + assert_equal "miss, store", last_response.headers["X-Rack-Cache"] + assert_equal "public", last_response.headers["Cache-Control"] + + body = last_response.body + last = last_response.headers["Last-Modified"] + + get "/expires/expires_last_modified", {}, "If-Modified-Since" => last + assert_equal "stale, valid, store", last_response.headers["X-Rack-Cache"] + assert_equal body, last_response.body + end + + def test_cache_works_with_last_modified_private + simple_controller + + get "/expires/expires_last_modified", :private => true + assert_equal "miss", last_response.headers["X-Rack-Cache"] + assert_equal "must-revalidate, private, max-age=0", last_response.headers["Cache-Control"] + + body = last_response.body + last = last_response.headers["Last-Modified"] + + get "/expires/expires_last_modified", {:private => true}, "If-Modified-Since" => last + assert_equal "miss", last_response.headers["X-Rack-Cache"] + assert_not_equal body, last_response.body + end + end +end |