From 34f058e082754bb726a4753fa26e8e8c082702c0 Mon Sep 17 00:00:00 2001 From: Yehuda Katz Date: Mon, 23 Mar 2009 12:07:34 -0700 Subject: Add a bunch of tests for various render :action, layout combinations --- actionpack/test/new_base/render_action_test.rb | 281 ++++++++++++++++++++----- 1 file changed, 233 insertions(+), 48 deletions(-) (limited to 'actionpack/test/new_base/render_action_test.rb') diff --git a/actionpack/test/new_base/render_action_test.rb b/actionpack/test/new_base/render_action_test.rb index 99dbfb878b..bbc8939af4 100644 --- a/actionpack/test/new_base/render_action_test.rb +++ b/actionpack/test/new_base/render_action_test.rb @@ -1,138 +1,323 @@ require File.join(File.expand_path(File.dirname(__FILE__)), "test_helper") -module HappyPath +module RenderAction # This has no layout and it works - class RenderActionController < ActionController::Base2 + class BasicController < ActionController::Base2 self.view_paths = [ActionView::FixtureTemplate::FixturePath.new( - "happy_path/render_action/hello_world.html.erb" => "Hello world!" + "render_action/basic/hello_world.html.erb" => "Hello world!" )] - def render_action_hello_world + def hello_world render :action => "hello_world" end - def render_action_hello_world_as_string + def hello_world_as_string render "hello_world" end - def render_action_hello_world_as_string_with_options + def hello_world_as_string_with_options render "hello_world", :status => 404 end - def render_action_hello_world_as_symbol + def hello_world_as_symbol render :hello_world end - def render_action_hello_world_with_symbol + def hello_world_with_symbol render :action => :hello_world end + def hello_world_with_layout + render :action => "hello_world", :layout => true + end + + def hello_world_with_layout_false + render :action => "hello_world", :layout => false + end + + def hello_world_with_layout_nil + render :action => "hello_world", :layout => nil + end + + def hello_world_with_custom_layout + render :action => "hello_world", :layout => "greetings" + end + end - class TestRenderAction < SimpleRouteCase + class TestBasic < SimpleRouteCase describe "Rendering an action using :action => " - get "/happy_path/render_action/render_action_hello_world" + get "/render_action/basic/hello_world" assert_body "Hello world!" assert_status 200 end - class TestRenderActionWithString < SimpleRouteCase + class TestWithString < SimpleRouteCase describe "Render an action using 'hello_world'" - get "/happy_path/render_action/render_action_hello_world_as_string" + get "/render_action/basic/hello_world_as_string" assert_body "Hello world!" assert_status 200 end - class TestRenderActionWithStringAndOptions < SimpleRouteCase + class TestWithStringAndOptions < SimpleRouteCase describe "Render an action using 'hello_world'" - get "/happy_path/render_action/render_action_hello_world_as_string_with_options" + get "/render_action/basic/hello_world_as_string_with_options" assert_body "Hello world!" assert_status 404 end - class TestRenderActionAsSymbol < SimpleRouteCase + class TestAsSymbol < SimpleRouteCase describe "Render an action using :hello_world" - get "/happy_path/render_action/render_action_hello_world_as_symbol" + get "/render_action/basic/hello_world_as_symbol" assert_body "Hello world!" assert_status 200 end - class TestRenderActionWithSymbol < SimpleRouteCase + class TestWithSymbol < SimpleRouteCase describe "Render an action using :action => :hello_world" - get "/happy_path/render_action/render_action_hello_world_with_symbol" + get "/render_action/basic/hello_world_with_symbol" assert_body "Hello world!" assert_status 200 end - # # ==== Render actions with layouts ==== - - class RenderActionWithLayoutController < ActionController::Base2 - # Set the view path to an application view structure with layouts - self.view_paths = self.view_paths = [ActionView::FixtureTemplate::FixturePath.new({ - "happy_path/render_action_with_layout/hello_world.html.erb" => "Hello World!", - "layouts/application.html.erb" => "OHAI <%= yield %> KTHXBAI" - })] + class TestLayoutTrue < SimpleRouteCase + describe "rendering a normal template with full path with layout => true" - def hello_world - render :action => "hello_world" + test "raises an exception when requesting a layout and none exist" do + assert_raise(ActionView::MissingTemplate) { get "/render_action/basic/hello_world_with_layout" } end end - class RenderActionWithControllerLayoutController < ActionController::Base2 - self.view_paths = self.view_paths = [ActionView::FixtureTemplate::FixturePath.new({ - "happy_path/render_action_with_controller_layout/hello_world.html.erb" => "Hello World!", - "layouts/happy_path/render_action_with_controller_layout.html.erb" => "With Controller Layout! <%= yield %> KTHXBAI" - })] + class TestLayoutFalse < SimpleRouteCase + describe "rendering a normal template with full path with layout => false" - def hello_world - render :action => "hello_world" + get "/render_action/basic/hello_world_with_layout_false" + assert_body "Hello world!" + assert_status 200 + end + + class TestLayoutNil < SimpleRouteCase + describe "rendering a normal template with full path with layout => :nil" + + get "/render_action/basic/hello_world_with_layout_nil" + assert_body "Hello world!" + assert_status 200 + end + + class TestCustomLayout < SimpleRouteCase + describe "rendering a normal template with full path with layout => 'greetings'" + + test "raises an exception when requesting a layout that does not exist" do + assert_raise(ActionView::MissingTemplate) { get "/render_action/basic/hello_world_with_custom_layout" } end end - class RenderActionWithControllerLayoutFirstController < ActionController::Base2 - self.view_paths = self.view_paths = [ActionView::FixtureTemplate::FixturePath.new({ - "happy_path/render_action_with_controller_layout_first/hello_world.html.erb" => "Hello World!", - "layouts/application.html.erb" => "OHAI <%= yield %> KTHXBAI", - "layouts/happy_path/render_action_with_controller_layout_first.html.erb" => "With Controller Layout! <%= yield %> KTHXBAI" - })] +end + +module RenderActionWithApplicationLayout + + # # ==== Render actions with layouts ==== + + class BasicController < ActionController::Base2 + # Set the view path to an application view structure with layouts + self.view_paths = self.view_paths = [ActionView::FixtureTemplate::FixturePath.new( + "render_action_with_application_layout/basic/hello_world.html.erb" => "Hello World!", + "layouts/application.html.erb" => "OHAI <%= yield %> KTHXBAI", + "layouts/greetings.html.erb" => "Greetings <%= yield %> Bai" + )] def hello_world render :action => "hello_world" end + + def hello_world_with_layout + render :action => "hello_world", :layout => true + end + + def hello_world_with_layout_false + render :action => "hello_world", :layout => false + end + + def hello_world_with_layout_nil + render :action => "hello_world", :layout => nil + end + + def hello_world_with_custom_layout + render :action => "hello_world", :layout => "greetings" + end end - class TestRenderActionWithLayout < SimpleRouteCase + class TestDefaultLayout < SimpleRouteCase describe %( Render hello_world and implicitly use application.html.erb as a layout if no layout is specified and no controller layout is present ) - get "/happy_path/render_action_with_layout/hello_world" + get "/render_action_with_application_layout/basic/hello_world" + assert_body "OHAI Hello World! KTHXBAI" + assert_status 200 + end + + class TestLayoutTrue < SimpleRouteCase + describe "rendering a normal template with full path with layout => true" + + get "/render_action_with_application_layout/basic/hello_world_with_layout" assert_body "OHAI Hello World! KTHXBAI" assert_status 200 end - class TestRenderActionWithControllerLayout < SimpleRouteCase + class TestLayoutFalse < SimpleRouteCase + describe "rendering a normal template with full path with layout => false" + + get "/render_action_with_application_layout/basic/hello_world_with_layout_false" + assert_body "Hello World!" + assert_status 200 + end + + class TestLayoutNil < SimpleRouteCase + describe "rendering a normal template with full path with layout => :nil" + + get "/render_action_with_application_layout/basic/hello_world_with_layout_nil" + assert_body "Hello World!" + assert_status 200 + end + + class TestCustomLayout < SimpleRouteCase + describe "rendering a normal template with full path with layout => 'greetings'" + + get "/render_action_with_application_layout/basic/hello_world_with_custom_layout" + assert_body "Greetings Hello World! Bai" + assert_status 200 + end + +end + +module RenderActionWithControllerLayout + + class BasicController < ActionController::Base2 + self.view_paths = self.view_paths = [ActionView::FixtureTemplate::FixturePath.new( + "render_action_with_controller_layout/basic/hello_world.html.erb" => "Hello World!", + "layouts/render_action_with_controller_layout/basic.html.erb" => "With Controller Layout! <%= yield %> KTHXBAI" + )] + + def hello_world + render :action => "hello_world" + end + + def hello_world_with_layout + render :action => "hello_world", :layout => true + end + + def hello_world_with_layout_false + render :action => "hello_world", :layout => false + end + + def hello_world_with_layout_nil + render :action => "hello_world", :layout => nil + end + + def hello_world_with_custom_layout + render :action => "hello_world", :layout => "greetings" + end + end + + class TestControllerLayout < SimpleRouteCase describe "Render hello_world and implicitly use .html.erb as a layout." - - get "/happy_path/render_action_with_controller_layout/hello_world" + + get "/render_action_with_controller_layout/basic/hello_world" assert_body "With Controller Layout! Hello World! KTHXBAI" assert_status 200 end - class TestRenderActionWithControllerLayoutFirst < SimpleRouteCase + class TestLayoutTrue < SimpleRouteCase + describe "rendering a normal template with full path with layout => true" + + get "/render_action_with_controller_layout/basic/hello_world_with_layout" + assert_body "With Controller Layout! Hello World! KTHXBAI" + assert_status 200 + end + + class TestLayoutFalse < SimpleRouteCase + describe "rendering a normal template with full path with layout => false" + + get "/render_action_with_controller_layout/basic/hello_world_with_layout_false" + assert_body "Hello World!" + assert_status 200 + end + + class TestLayoutNil < SimpleRouteCase + describe "rendering a normal template with full path with layout => :nil" + + get "/render_action_with_controller_layout/basic/hello_world_with_layout_nil" + assert_body "Hello World!" + assert_status 200 + end + +end + +module RenderActionWithBothLayouts + + class BasicController < ActionController::Base2 + self.view_paths = [ActionView::FixtureTemplate::FixturePath.new({ + "render_action_with_both_layouts/basic/hello_world.html.erb" => "Hello World!", + "layouts/application.html.erb" => "OHAI <%= yield %> KTHXBAI", + "layouts/render_action_with_both_layouts/basic.html.erb" => "With Controller Layout! <%= yield %> KTHXBAI" + })] + + def hello_world + render :action => "hello_world" + end + + def hello_world_with_layout + render :action => "hello_world", :layout => true + end + + def hello_world_with_layout_false + render :action => "hello_world", :layout => false + end + + def hello_world_with_layout_nil + render :action => "hello_world", :layout => nil + end + end + + class TestControllerLayoutFirst < SimpleRouteCase describe "Render hello_world and implicitly use .html.erb over application.html.erb as a layout" + + get "/render_action_with_both_layouts/basic/hello_world" + assert_body "With Controller Layout! Hello World! KTHXBAI" + assert_status 200 + end + + class TestLayoutTrue < SimpleRouteCase + describe "rendering a normal template with full path with layout => true" - get "/happy_path/render_action_with_controller_layout_first/hello_world" + get "/render_action_with_both_layouts/basic/hello_world_with_layout" assert_body "With Controller Layout! Hello World! KTHXBAI" assert_status 200 end + class TestLayoutFalse < SimpleRouteCase + describe "rendering a normal template with full path with layout => false" + + get "/render_action_with_both_layouts/basic/hello_world_with_layout_false" + assert_body "Hello World!" + assert_status 200 + end + + class TestLayoutNil < SimpleRouteCase + describe "rendering a normal template with full path with layout => :nil" + + get "/render_action_with_both_layouts/basic/hello_world_with_layout_nil" + assert_body "Hello World!" + assert_status 200 + end + end \ No newline at end of file -- cgit v1.2.3