Skip to content

Commit

Permalink
Add tests for Rack::Cache
Browse files Browse the repository at this point in the history
  • Loading branch information
Carlhuda committed Sep 13, 2010
1 parent 254ab7d commit 0fe99e8
Show file tree
Hide file tree
Showing 2 changed files with 161 additions and 4 deletions.
148 changes: 148 additions & 0 deletions railties/test/application/middleware/cache_test.rb
Original file line number Diff line number Diff line change
@@ -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
17 changes: 13 additions & 4 deletions railties/test/railties/engine_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -328,15 +328,23 @@ class Engine < ::Rails::Engine

env = Rack::MockRequest.env_for("/app.html")
response = Rails.application.call(env)
assert_equal response[2].path, File.join(app_path, "public/app.html")
assert_equal rack_body(response[2]), rack_body(File.open(File.join(app_path, "public/app.html")))

env = Rack::MockRequest.env_for("/bukkits/bukkits.html")
response = Rails.application.call(env)
assert_equal response[2].path, File.join(@plugin.path, "public/bukkits.html")
assert_equal rack_body(response[2]), rack_body(File.open(File.join(@plugin.path, "public/bukkits.html")))

env = Rack::MockRequest.env_for("/bukkits/file_from_app.html")
response = Rails.application.call(env)
assert_equal response[2].path, File.join(app_path, "public/bukkits/file_from_app.html")
assert_equal rack_body(response[2]), rack_body(File.open(File.join(app_path, "public/bukkits/file_from_app.html")))
end

def rack_body(obj)
buffer = ""
obj.each do |part|
buffer << part
end
buffer
end

test "shared engine should include application's helpers and own helpers" do
Expand Down Expand Up @@ -570,7 +578,8 @@ def new

env = Rack::MockRequest.env_for("/bukkits/posts/new")
response = AppTemplate::Application.call(env)
assert response[2].body =~ /name="post\[title\]"/
p rack_body(response[2])
assert rack_body(response[2]) =~ /name="post\[title\]"/
end

test "creating symlinks" do
Expand Down

0 comments on commit 0fe99e8

Please sign in to comment.