diff options
-rw-r--r-- | actionpack/lib/action_controller/metal/testing.rb | 35 | ||||
-rw-r--r-- | actionpack/lib/action_controller/test_case.rb | 9 |
2 files changed, 28 insertions, 16 deletions
diff --git a/actionpack/lib/action_controller/metal/testing.rb b/actionpack/lib/action_controller/metal/testing.rb index a4718376aa..838da3322d 100644 --- a/actionpack/lib/action_controller/metal/testing.rb +++ b/actionpack/lib/action_controller/metal/testing.rb @@ -4,18 +4,33 @@ module ActionController include RackDelegation - def recycle! - @_url_options = nil - end + # This gets included on the second request. We only want to modify this + # behavior on the second request. Ugh. + module Recycled # :nodoc: + def set_response!(request) + end + + def process(name) + ret = super + if cookies = @_request.env['action_dispatch.cookies'] + cookies.write(@_response) + end + @_response.prepare! + ret + end - # TODO: Clean this up - def process_with_new_base_test(request, response) - ret = process(request.parameters[:action]) - if cookies = @_request.env['action_dispatch.cookies'] - cookies.write(@_response) + def recycled? + true end - @_response.prepare! - ret + end + + def recycled? # :nodoc: + false + end + + def recycle! + @_url_options = nil + extend Recycled unless recycled? end # TODO : Rewrite tests using controller.headers= to use Rack env diff --git a/actionpack/lib/action_controller/test_case.rb b/actionpack/lib/action_controller/test_case.rb index 9c73aba22a..480297368f 100644 --- a/actionpack/lib/action_controller/test_case.rb +++ b/actionpack/lib/action_controller/test_case.rb @@ -497,13 +497,10 @@ module ActionController build_request_uri(action, parameters) @controller.class.class_eval { include Testing } - @controller.extend(Module.new { - def set_response!(request) - end - }) - @controller.recycle! - @controller.process_with_new_base_test(@request, @response) + name = @request.parameters[:action] + @controller.process(name) + @assigns = @controller.respond_to?(:view_assigns) ? @controller.view_assigns : {} @request.session.delete('flash') if @request.session['flash'].blank? @response |