1 require 'abstract_unit'
3 class DispatcherTest
< Test
::Unit::TestCase
4 Dispatcher
= ActionController
::Dispatcher
7 ENV['REQUEST_METHOD'] = 'GET'
9 Dispatcher
.middleware
= ActionController
::MiddlewareStack.new
do |middleware
|
10 middlewares
= File
.expand_path(File
.join(File
.dirname(__FILE__
), "../../lib/action_controller/middlewares.rb"))
11 middleware
.instance_eval(File
.read(middlewares
))
14 # Clear callbacks as they are redefined by Dispatcher#define_dispatcher_callbacks
15 Dispatcher
.instance_variable_set("@prepare_dispatch_callbacks", ActiveSupport
::Callbacks::CallbackChain.new
)
16 Dispatcher
.instance_variable_set("@before_dispatch_callbacks", ActiveSupport
::Callbacks::CallbackChain.new
)
17 Dispatcher
.instance_variable_set("@after_dispatch_callbacks", ActiveSupport
::Callbacks::CallbackChain.new
)
19 Dispatcher
.stubs(:require_dependency)
23 ENV.delete
'REQUEST_METHOD'
26 def test_clears_dependencies_after_dispatch_if_in_loading_mode
27 ActiveSupport
::Dependencies.expects(:clear).once
31 def test_reloads_routes_before_dispatch_if_in_loading_mode
32 ActionController
::Routing::Routes.expects(:reload).once
36 def test_leaves_dependencies_after_dispatch_if_not_in_loading_mode
37 ActionController
::Routing::Routes.expects(:reload).never
38 ActiveSupport
::Dependencies.expects(:clear).never
43 # Stub out dispatch error logger
45 def log_failsafe_exception(status
, exception
); end
48 def test_failsafe_response
49 Dispatcher
.any_instance
.expects(:dispatch).raises('b00m')
50 ActionController
::Failsafe.any_instance
.expects(:log_failsafe_exception)
52 assert_nothing_raised
do
55 {"Content-Type" => "text/html"},
56 "<html><body><h1>500 Internal Server Error</h1></body></html>"
61 def test_prepare_callbacks
63 Dispatcher
.to_prepare
{ |*args
| a
= b
= c
= 1 }
64 Dispatcher
.to_prepare
{ |*args
| b
= c
= 2 }
65 Dispatcher
.to_prepare
{ |*args
| c
= 3 }
67 # Ensure to_prepare callbacks are not run when defined
68 assert_nil a
|| b
|| c
71 Dispatcher
.run_prepare_callbacks
77 # Make sure they are only run once
80 assert_nil a
|| b
|| c
83 def test_to_prepare_with_identifier_replaces
85 Dispatcher
.to_prepare(:unique_id) { |*args
| a
= b
= 1 }
86 Dispatcher
.to_prepare(:unique_id) { |*args
| a
= 2 }
88 Dispatcher
.run_prepare_callbacks
94 def dispatch(cache_classes
= true)
95 ActionController
::Routing::RouteSet.any_instance
.stubs(:call).returns([200, {}, 'response'])
96 Dispatcher
.define_dispatcher_callbacks(cache_classes
)
97 Dispatcher
.new
.call({})
100 def assert_subclasses(howmany
, klass
, message
= klass
.subclasses
.inspect
)
101 assert_equal howmany
, klass
.subclasses
.size
, message