aboutsummaryrefslogtreecommitdiffstats
path: root/railties/test/application/middleware
diff options
context:
space:
mode:
authorCarlhuda <carlhuda@engineyard.com>2010-09-13 15:53:14 -0700
committerCarlhuda <carlhuda@engineyard.com>2010-09-13 16:06:03 -0700
commit0fe99e87c0af568df2f557637fff2983c928b8f2 (patch)
treee740680bb8b922dead8a0597f76a57bf96d731d3 /railties/test/application/middleware
parent254ab7d916e579b9300951f5f33d3c5d3ee755a2 (diff)
downloadrails-0fe99e87c0af568df2f557637fff2983c928b8f2.tar.gz
rails-0fe99e87c0af568df2f557637fff2983c928b8f2.tar.bz2
rails-0fe99e87c0af568df2f557637fff2983c928b8f2.zip
Add tests for Rack::Cache
Diffstat (limited to 'railties/test/application/middleware')
-rw-r--r--railties/test/application/middleware/cache_test.rb148
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