diff options
author | Marcel Molina <marcel@vernix.org> | 2006-08-03 23:59:38 +0000 |
---|---|---|
committer | Marcel Molina <marcel@vernix.org> | 2006-08-03 23:59:38 +0000 |
commit | d17bd6a0432dde66056e4dd417741731bcb9d323 (patch) | |
tree | 19fd6dfe4611d60c97f09e80a2bbacc5dc5ba3c9 /actionpack/test/controller | |
parent | 58ebf302b206ed30568da60d7f3b124b26e9325b (diff) | |
download | rails-d17bd6a0432dde66056e4dd417741731bcb9d323.tar.gz rails-d17bd6a0432dde66056e4dd417741731bcb9d323.tar.bz2 rails-d17bd6a0432dde66056e4dd417741731bcb9d323.zip |
Make action caching aware of different formats for the same action so that, e.g. foo.xml is cached separately from foo.html. Implicitly set content type when reading in cached content with mime revealing extensions so the entire onous isn't on the webserver. PDI MORE CACHING TESTS [Marcel Molina Jr.]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4656 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'actionpack/test/controller')
-rw-r--r-- | actionpack/test/controller/action_caching_test.rb | 137 | ||||
-rw-r--r-- | actionpack/test/controller/base_test.rb | 1 |
2 files changed, 137 insertions, 1 deletions
diff --git a/actionpack/test/controller/action_caching_test.rb b/actionpack/test/controller/action_caching_test.rb new file mode 100644 index 0000000000..84b0cbd4a5 --- /dev/null +++ b/actionpack/test/controller/action_caching_test.rb @@ -0,0 +1,137 @@ +require 'fileutils' +require File.dirname(__FILE__) + '/../abstract_unit' + +CACHE_DIR = 'test_cache' +# Don't change '/../temp/' cavalierly or you might hoze something you don't want hozed +FILE_STORE_PATH = File.join(File.dirname(__FILE__), '/../temp/', CACHE_DIR) +ActionController::Base.perform_caching = true +ActionController::Base.fragment_cache_store = :file_store, FILE_STORE_PATH + +class ActionCachingTestController < ActionController::Base + caches_action :index + + def index + @cache_this = Time.now.to_f.to_s + render :text => @cache_this + end + + def expire + expire_action :controller => 'action_caching_test', :action => 'index' + render :nothing => true + end + +end + +class ActionCachingMockController + attr_accessor :mock_url_for + attr_accessor :mock_path + + def initialize + yield self if block_given? + end + + def url_for(*args) + @mock_url_for + end + + def request + mocked_path = @mock_path + Object.new.instance_eval(<<-EVAL) + def path; '#{@mock_path}' end + self + EVAL + end +end + +class ActionCacheTest < Test::Unit::TestCase + def setup + reset! + FileUtils.mkdir_p(FILE_STORE_PATH) + @path_class = ActionController::Caching::Actions::ActionCachePath + @mock_controller = ActionCachingMockController.new + end + + def teardown + FileUtils.rm_rf(File.dirname(FILE_STORE_PATH)) + end + + def test_simple_action_cache + get :index + cached_time = content_to_cache + assert_equal cached_time, @response.body + reset! + + get :index + assert_equal cached_time, @response.body + end + + def test_cache_expiration + get :index + cached_time = content_to_cache + reset! + + get :index + assert_equal cached_time, @response.body + reset! + + get :expire + reset! + + get :index + new_cached_time = content_to_cache + assert_not_equal cached_time, @response.body + reset! + + get :index + assert_response :success + assert_equal new_cached_time, @response.body + end + + def test_cache_is_scoped_by_subdomain + @request.host = 'jamis.hostname.com' + get :index + jamis_cache = content_to_cache + + @request.host = 'david.hostname.com' + get :index + david_cache = content_to_cache + assert_not_equal jamis_cache, @response.body + + @request.host = 'jamis.hostname.com' + get :index + assert_equal jamis_cache, @response.body + + @request.host = 'david.hostname.com' + get :index + assert_equal david_cache, @response.body + end + + def test_xml_version_of_resource_is_treated_as_different_cache + @mock_controller.mock_url_for = 'http://example.org/posts/' + @mock_controller.mock_path = '/posts/index.xml' + path_object = @path_class.new(@mock_controller) + assert_equal 'xml', path_object.extension + assert_equal 'example.org/posts/index.xml', path_object.path + end + + def test_empty_path_is_normalized + @mock_controller.mock_url_for = 'http://example.org/' + @mock_controller.mock_path = '/' + + assert_equal 'example.org/index', @path_class.path_for(@mock_controller) + end + + private + + def content_to_cache + assigns(:cache_this) + end + + def reset! + @request = ActionController::TestRequest.new + @response = ActionController::TestResponse.new + @controller = ActionCachingTestController.new + @request.host = 'hostname.com' + end + +end
\ No newline at end of file diff --git a/actionpack/test/controller/base_test.rb b/actionpack/test/controller/base_test.rb index 10a3e0ce35..1a4afcf521 100644 --- a/actionpack/test/controller/base_test.rb +++ b/actionpack/test/controller/base_test.rb @@ -23,7 +23,6 @@ module Submodule end end class EmptyController < ActionController::Base - include ActionController::Caching end class NonEmptyController < ActionController::Base def public_action |