diff options
author | Nicholas Seckar <nseckar@gmail.com> | 2006-08-13 04:15:22 +0000 |
---|---|---|
committer | Nicholas Seckar <nseckar@gmail.com> | 2006-08-13 04:15:22 +0000 |
commit | 84bacf99d67617421edfbbd787c845afb34a9d06 (patch) | |
tree | b238052e5e0a526204e787f8b06ef8ae8d32e3d9 /actionpack/test | |
parent | 440655e1fae5ec5d22676a65462808fa11c2464e (diff) | |
download | rails-84bacf99d67617421edfbbd787c845afb34a9d06.tar.gz rails-84bacf99d67617421edfbbd787c845afb34a9d06.tar.bz2 rails-84bacf99d67617421edfbbd787c845afb34a9d06.zip |
Invoke method_missing directly for hidden actions. Closes #3030.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4755 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'actionpack/test')
-rw-r--r-- | actionpack/test/controller/base_test.rb | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/actionpack/test/controller/base_test.rb b/actionpack/test/controller/base_test.rb index 588b9f60af..9cf035d1cb 100644 --- a/actionpack/test/controller/base_test.rb +++ b/actionpack/test/controller/base_test.rb @@ -12,6 +12,7 @@ module Submodule hide_action :hidden_action def hidden_action + raise "Noooo!" end def another_hidden_action @@ -33,6 +34,21 @@ class NonEmptyController < ActionController::Base end end +class MethodMissingController < ActionController::Base + + hide_action :shouldnt_be_called + def shouldnt_be_called + raise "NO WAY!" + end + +protected + + def method_missing(selector) + render :text => selector.to_s + end + +end + class ControllerClassTests < Test::Unit::TestCase def test_controller_path assert_equal 'empty', EmptyController.controller_path @@ -64,4 +80,46 @@ class ControllerInstanceTests < Test::Unit::TestCase assert_equal Set.new('public_action'), c.send(:action_methods), "#{c.controller_path} should not be empty!" end end + end + + +class PerformActionTest < Test::Unit::TestCase + def use_controller(controller_class) + @controller = controller_class.new + + # enable a logger so that (e.g.) the benchmarking stuff runs, so we can get + # a more accurate simulation of what happens in "real life". + @controller.logger = Logger.new(nil) + + @request = ActionController::TestRequest.new + @response = ActionController::TestResponse.new + + @request.host = "www.nextangle.com" + end + + def test_get_on_priv_should_show_selector + use_controller MethodMissingController + get :shouldnt_be_called + assert_response :success + assert_equal 'shouldnt_be_called', @response.body + end + + def test_method_missing_is_not_an_action_name + use_controller MethodMissingController + assert ! @controller.send(:action_methods).include?('method_missing') + + get :method_missing + assert_response :success + assert_equal 'method_missing', @response.body + end + + def test_get_on_hidden_should_fail + use_controller NonEmptyController + get :hidden_action + assert_response 404 + + get :another_hidden_action + assert_response 404 + end +end
\ No newline at end of file |