From 74e59ea8b674fac08a6ea4da03e58e29fc57a709 Mon Sep 17 00:00:00 2001
From: Mack Earnhardt <mack@agilereasoning.com>
Date: Sun, 24 Mar 2013 07:54:55 -0400
Subject: Backport #5808

df36c5f - Fix assert_template assertion with :layout option
4bd05a7 - Fix assert_template :layout => nil assertion
0d19a08 - Improve assert_template layout checking
---
 actionpack/lib/action_controller/test_case.rb | 27 +++++++++++++++++++++------
 1 file changed, 21 insertions(+), 6 deletions(-)

(limited to 'actionpack/lib')

diff --git a/actionpack/lib/action_controller/test_case.rb b/actionpack/lib/action_controller/test_case.rb
index bc6828a805..cd9848d65b 100644
--- a/actionpack/lib/action_controller/test_case.rb
+++ b/actionpack/lib/action_controller/test_case.rb
@@ -20,7 +20,12 @@ module ActionController
 
       ActiveSupport::Notifications.subscribe("render_template.action_view") do |name, start, finish, id, payload|
         path = payload[:layout]
-        @layouts[path] += 1
+        if path
+          @layouts[path] += 1
+          if path =~ /^layouts\/(.*)/
+            @layouts[$1] += 1
+          end
+        end
       end
 
       ActiveSupport::Notifications.subscribe("!render_template.action_view") do |name, start, finish, id, payload|
@@ -56,6 +61,15 @@ module ActionController
     #   # assert that the "new" view template was rendered
     #   assert_template "new"
     #
+    #   # assert that the layout 'admin' was rendered
+    #   assert_template :layout => 'admin'
+    #   assert_template :layout => 'layouts/admin'
+    #   assert_template :layout => :admin
+    #
+    #   # assert that no layout was rendered
+    #   assert_template :layout => nil
+    #   assert_template :layout => false
+    #
     #   # assert that the "_customer" partial was rendered twice
     #   assert_template :partial => '_customer', :count => 2
     #
@@ -88,17 +102,18 @@ module ActionController
           end
         end
       when Hash
-        if expected_layout = options[:layout]
+        if options.key?(:layout)
+          expected_layout = options[:layout]
           msg = build_message(message,
                   "expecting layout <?> but action rendered <?>",
                   expected_layout, @layouts.keys)
 
           case expected_layout
-          when String
-            assert(@layouts.keys.include?(expected_layout), msg)
+          when String, Symbol
+            assert_includes @layouts.keys, expected_layout.to_s, msg
           when Regexp
             assert(@layouts.keys.any? {|l| l =~ expected_layout }, msg)
-          when nil
+          when nil, false
             assert(@layouts.empty?, msg)
           end
         end
@@ -125,7 +140,7 @@ module ActionController
                     options[:partial], @partials.keys)
             assert(@partials.include?(expected_partial), msg)
           end
-        else
+        elsif options.key?(:partial)
           assert @partials.empty?,
             "Expected no partials to be rendered"
         end
-- 
cgit v1.2.3