2008-01-05 13:32:06 +00:00
|
|
|
require 'abstract_unit'
|
2005-09-20 13:55:27 +00:00
|
|
|
require 'pp' # require 'pp' early to prevent hidden_methods from not picking up the pretty-print methods until too late
|
2005-02-17 19:00:21 +00:00
|
|
|
|
2006-02-26 17:49:09 +00:00
|
|
|
# Provide some controller to run the tests on.
|
|
|
|
module Submodule
|
|
|
|
class ContainedEmptyController < ActionController::Base
|
2005-02-17 19:00:21 +00:00
|
|
|
end
|
2006-02-26 17:49:09 +00:00
|
|
|
class ContainedNonEmptyController < ActionController::Base
|
2005-02-17 19:00:21 +00:00
|
|
|
def public_action
|
2008-07-12 22:54:24 +00:00
|
|
|
render :nothing => true
|
2005-02-17 19:00:21 +00:00
|
|
|
end
|
|
|
|
|
2005-02-23 12:52:38 +00:00
|
|
|
hide_action :hidden_action
|
2005-02-17 19:00:21 +00:00
|
|
|
def hidden_action
|
2006-08-13 04:15:22 +00:00
|
|
|
raise "Noooo!"
|
2005-02-17 19:00:21 +00:00
|
|
|
end
|
2006-02-26 17:49:09 +00:00
|
|
|
|
|
|
|
def another_hidden_action
|
|
|
|
end
|
|
|
|
hide_action :another_hidden_action
|
|
|
|
end
|
|
|
|
class SubclassedController < ContainedNonEmptyController
|
|
|
|
hide_action :public_action # Hiding it here should not affect the superclass.
|
|
|
|
end
|
|
|
|
end
|
|
|
|
class EmptyController < ActionController::Base
|
|
|
|
end
|
|
|
|
class NonEmptyController < ActionController::Base
|
|
|
|
def public_action
|
|
|
|
end
|
|
|
|
|
|
|
|
hide_action :hidden_action
|
|
|
|
def hidden_action
|
2005-02-17 19:00:21 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2006-08-13 04:15:22 +00:00
|
|
|
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
|
|
|
|
|
2008-04-20 04:57:36 +00:00
|
|
|
class DefaultUrlOptionsController < ActionController::Base
|
|
|
|
def default_url_options_action
|
|
|
|
end
|
|
|
|
|
2008-05-04 15:54:08 +00:00
|
|
|
def default_url_options(options = nil)
|
2008-04-20 04:57:36 +00:00
|
|
|
{ :host => 'www.override.com', :action => 'new', :bacon => 'chunky' }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2005-02-17 19:00:21 +00:00
|
|
|
class ControllerClassTests < Test::Unit::TestCase
|
|
|
|
def test_controller_path
|
2006-02-26 17:49:09 +00:00
|
|
|
assert_equal 'empty', EmptyController.controller_path
|
2006-08-05 01:56:58 +00:00
|
|
|
assert_equal EmptyController.controller_path, EmptyController.new.controller_path
|
2006-02-26 17:49:09 +00:00
|
|
|
assert_equal 'submodule/contained_empty', Submodule::ContainedEmptyController.controller_path
|
2006-08-05 01:56:58 +00:00
|
|
|
assert_equal Submodule::ContainedEmptyController.controller_path, Submodule::ContainedEmptyController.new.controller_path
|
2005-02-17 19:00:21 +00:00
|
|
|
end
|
|
|
|
def test_controller_name
|
2006-02-26 17:49:09 +00:00
|
|
|
assert_equal 'empty', EmptyController.controller_name
|
|
|
|
assert_equal 'contained_empty', Submodule::ContainedEmptyController.controller_name
|
2005-02-17 19:00:21 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class ControllerInstanceTests < Test::Unit::TestCase
|
|
|
|
def setup
|
2006-02-26 17:49:09 +00:00
|
|
|
@empty = EmptyController.new
|
|
|
|
@contained = Submodule::ContainedEmptyController.new
|
|
|
|
@empty_controllers = [@empty, @contained, Submodule::SubclassedController.new]
|
2005-02-17 19:00:21 +00:00
|
|
|
|
2006-02-26 17:49:09 +00:00
|
|
|
@non_empty_controllers = [NonEmptyController.new,
|
|
|
|
Submodule::ContainedNonEmptyController.new]
|
2005-02-17 19:00:21 +00:00
|
|
|
end
|
2005-09-20 07:54:55 +00:00
|
|
|
|
2005-02-17 19:00:21 +00:00
|
|
|
def test_action_methods
|
2005-10-20 21:59:48 +00:00
|
|
|
@empty_controllers.each do |c|
|
2006-09-03 23:34:57 +00:00
|
|
|
hide_mocha_methods_from_controller(c)
|
2008-08-31 20:15:26 +00:00
|
|
|
assert_equal Set.new, c.__send__(:action_methods), "#{c.controller_path} should be empty!"
|
2005-10-20 21:59:48 +00:00
|
|
|
end
|
|
|
|
@non_empty_controllers.each do |c|
|
2006-09-03 23:34:57 +00:00
|
|
|
hide_mocha_methods_from_controller(c)
|
2008-08-31 20:15:26 +00:00
|
|
|
assert_equal Set.new(%w(public_action)), c.__send__(:action_methods), "#{c.controller_path} should not be empty!"
|
2005-10-20 21:59:48 +00:00
|
|
|
end
|
2005-02-17 19:00:21 +00:00
|
|
|
end
|
2007-01-24 12:04:08 +00:00
|
|
|
|
2006-09-03 23:34:57 +00:00
|
|
|
protected
|
2007-01-24 12:04:08 +00:00
|
|
|
# Mocha adds some public instance methods to Object that would be
|
|
|
|
# considered actions, so explicitly hide_action them.
|
|
|
|
def hide_mocha_methods_from_controller(controller)
|
2007-12-29 05:16:03 +00:00
|
|
|
mocha_methods = [
|
|
|
|
:expects, :mocha, :mocha_inspect, :reset_mocha, :stubba_object,
|
|
|
|
:stubba_method, :stubs, :verify, :__metaclass__, :__is_a__, :to_matcher,
|
|
|
|
]
|
2008-08-31 20:15:26 +00:00
|
|
|
controller.class.__send__(:hide_action, *mocha_methods)
|
2007-01-24 12:04:08 +00:00
|
|
|
end
|
2005-02-17 19:00:21 +00:00
|
|
|
end
|
2006-08-13 04:15:22 +00:00
|
|
|
|
|
|
|
|
2008-11-07 20:42:34 +00:00
|
|
|
class PerformActionTest < ActionController::TestCase
|
2008-07-12 22:54:24 +00:00
|
|
|
class MockLogger
|
|
|
|
attr_reader :logged
|
|
|
|
|
|
|
|
def initialize
|
|
|
|
@logged = []
|
|
|
|
end
|
|
|
|
|
|
|
|
def method_missing(method, *args)
|
|
|
|
@logged << args.first
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2006-08-13 04:15:22 +00:00
|
|
|
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
|
2008-08-31 20:15:26 +00:00
|
|
|
assert ! @controller.__send__(:action_methods).include?('method_missing')
|
2006-08-13 04:15:22 +00:00
|
|
|
|
|
|
|
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
|
2008-07-12 22:54:24 +00:00
|
|
|
|
|
|
|
def test_namespaced_action_should_log_module_name
|
|
|
|
use_controller Submodule::ContainedNonEmptyController
|
|
|
|
@controller.logger = MockLogger.new
|
|
|
|
get :public_action
|
|
|
|
assert_match /Processing\sSubmodule::ContainedNonEmptyController#public_action/, @controller.logger.logged[1]
|
|
|
|
end
|
2007-01-24 12:04:08 +00:00
|
|
|
end
|
2008-04-20 04:57:36 +00:00
|
|
|
|
|
|
|
class DefaultUrlOptionsTest < Test::Unit::TestCase
|
|
|
|
def setup
|
|
|
|
@controller = DefaultUrlOptionsController.new
|
|
|
|
|
|
|
|
@request = ActionController::TestRequest.new
|
|
|
|
@response = ActionController::TestResponse.new
|
|
|
|
|
|
|
|
@request.host = 'www.example.com'
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_default_url_options_are_used_if_set
|
|
|
|
ActionController::Routing::Routes.draw do |map|
|
|
|
|
map.default_url_options 'default_url_options', :controller => 'default_url_options'
|
|
|
|
map.connect ':controller/:action/:id'
|
|
|
|
end
|
|
|
|
|
|
|
|
get :default_url_options_action # Make a dummy request so that the controller is initialized properly.
|
|
|
|
|
|
|
|
assert_equal 'http://www.override.com/default_url_options/new?bacon=chunky', @controller.url_for(:controller => 'default_url_options')
|
|
|
|
assert_equal 'http://www.override.com/default_url_options?bacon=chunky', @controller.send(:default_url_options_url)
|
|
|
|
ensure
|
|
|
|
ActionController::Routing::Routes.load!
|
|
|
|
end
|
2008-05-06 06:42:52 +00:00
|
|
|
end
|
|
|
|
|
2008-06-05 12:20:54 +00:00
|
|
|
class EmptyUrlOptionsTest < Test::Unit::TestCase
|
|
|
|
def setup
|
|
|
|
@controller = NonEmptyController.new
|
|
|
|
|
|
|
|
@request = ActionController::TestRequest.new
|
|
|
|
@response = ActionController::TestResponse.new
|
|
|
|
|
|
|
|
@request.host = 'www.example.com'
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_ensure_url_for_works_as_expected_when_called_with_no_options_if_default_url_options_is_not_set
|
|
|
|
get :public_action
|
|
|
|
assert_equal "http://www.example.com/non_empty/public_action", @controller.url_for
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2008-05-06 06:42:52 +00:00
|
|
|
class EnsureNamedRoutesWorksTicket22BugTest < Test::Unit::TestCase
|
|
|
|
def test_named_routes_still_work
|
|
|
|
ActionController::Routing::Routes.draw do |map|
|
|
|
|
map.resources :things
|
|
|
|
end
|
|
|
|
EmptyController.send :include, ActionController::UrlWriter
|
|
|
|
|
|
|
|
assert_equal '/things', EmptyController.new.send(:things_path)
|
|
|
|
ensure
|
|
|
|
ActionController::Routing::Routes.load!
|
|
|
|
end
|
2008-06-05 12:20:54 +00:00
|
|
|
end
|