]> source.dussan.org Git - redmine.git/commitdiff
Use the base layout for all 403, 404, and 500 pages. #6172
authorEric Davis <edavis@littlestreamsoftware.com>
Thu, 19 Aug 2010 01:01:35 +0000 (01:01 +0000)
committerEric Davis <edavis@littlestreamsoftware.com>
Thu, 19 Aug 2010 01:01:35 +0000 (01:01 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3949 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/application_controller.rb
test/integration/layout_test.rb [new file with mode: 0644]

index e5909e69b360873717fca334890f8ec9b2cd687d..725bde788a6745811c8ecd1458852f97ffdc0de0 100644 (file)
@@ -258,7 +258,7 @@ class ApplicationController < ActionController::Base
   def render_403
     @project = nil
     respond_to do |format|
-      format.html { render :template => "common/403", :layout => (request.xhr? ? false : 'base'), :status => 403 }
+      format.html { render :template => "common/403", :layout => use_layout, :status => 403 }
       format.atom { head 403 }
       format.xml { head 403 }
       format.js { head 403 }
@@ -269,7 +269,7 @@ class ApplicationController < ActionController::Base
     
   def render_404
     respond_to do |format|
-      format.html { render :template => "common/404", :layout => !request.xhr?, :status => 404 }
+      format.html { render :template => "common/404", :layout => use_layout, :status => 404 }
       format.atom { head 404 }
       format.xml { head 404 }
       format.js { head 404 }
@@ -282,7 +282,7 @@ class ApplicationController < ActionController::Base
     respond_to do |format|
       format.html { 
         flash.now[:error] = msg
-        render :text => '', :layout => !request.xhr?, :status => 500
+        render :text => '', :layout => use_layout, :status => 500
       }
       format.atom { head 500 }
       format.xml { head 500 }
@@ -290,6 +290,13 @@ class ApplicationController < ActionController::Base
       format.json { head 500 }
     end
   end
+
+  # Picks which layout to use based on the request
+  #
+  # @return [boolean, string] name of the layout to use or false for no layout
+  def use_layout
+    request.xhr? ? false : 'base'
+  end
   
   def invalid_authenticity_token
     if api_request?
diff --git a/test/integration/layout_test.rb b/test/integration/layout_test.rb
new file mode 100644 (file)
index 0000000..03d407d
--- /dev/null
@@ -0,0 +1,26 @@
+require "#{File.dirname(__FILE__)}/../test_helper"
+
+class LayoutTest < ActionController::IntegrationTest
+  fixtures :all
+
+  test "browsing to a missing page should render the base layout" do
+    get "/users/100000000"
+
+    assert_response :not_found
+
+    # UsersController uses the admin layout by default
+    assert_select "#admin-menu", :count => 0
+  end
+
+  test "browsing to an unauthorized page should render the base layout" do
+    user = User.find(9)
+    user.password, user.password_confirmation = 'test', 'test'
+    user.save!
+    
+    log_user('miscuser9','test')
+
+    get "/admin"
+    assert_response :forbidden
+    assert_select "#admin-menu", :count => 0
+  end
+end