| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
 | require 'abstract_unit'
module Render
  class BlankRenderController < ActionController::Base
    self.view_paths = [ActionView::FixtureResolver.new(
      "render/blank_render/index.html.erb"                  => "Hello world!",
      "render/blank_render/access_request.html.erb"         => "The request: <%= request.method.to_s.upcase %>",
      "render/blank_render/access_action_name.html.erb"     => "Action Name: <%= action_name %>",
      "render/blank_render/access_controller_name.html.erb" => "Controller Name: <%= controller_name %>",
      "render/blank_render/overridden_with_own_view_paths_appended.html.erb"  => "parent content",
      "render/blank_render/overridden_with_own_view_paths_prepended.html.erb" => "parent content",
      "render/blank_render/overridden.html.erb"             => "parent content",
      "render/child_render/overridden.html.erb"             => "child content"
    )]
    def index
      render
    end
    def access_request
      render :action => "access_request"
    end
    def render_action_name
      render :action => "access_action_name"
    end
    def overridden_with_own_view_paths_appended
    end
    def overridden_with_own_view_paths_prepended
    end
    def overridden
    end
    private
    def secretz
      render :text => "FAIL WHALE!"
    end
  end
  class DoubleRenderController < ActionController::Base
    def index
      render :text => "hello"
      render :text => "world"
    end
  end
  class ChildRenderController < BlankRenderController
    append_view_path ActionView::FixtureResolver.new("render/child_render/overridden_with_own_view_paths_appended.html.erb" => "child content")
    prepend_view_path ActionView::FixtureResolver.new("render/child_render/overridden_with_own_view_paths_prepended.html.erb" => "child content")
  end
  class RenderTest < Rack::TestCase
    test "render with blank" do
      with_routing do |set|
        set.draw do
          get ":controller", :action => 'index'
        end
        get "/render/blank_render"
        assert_body "Hello world!"
        assert_status 200
      end
    end
    test "rendering more than once raises an exception" do
      with_routing do |set|
        set.draw do
          get ":controller", :action => 'index'
        end
        assert_raises(AbstractController::DoubleRenderError) do
          get "/render/double_render", {}, "action_dispatch.show_exceptions" => false
        end
      end
    end
  end
  class TestOnlyRenderPublicActions < Rack::TestCase
    # Only public methods on actual controllers are callable actions
    test "raises an exception when a method of Object is called" do
      assert_raises(AbstractController::ActionNotFound) do
        get "/render/blank_render/clone", {}, "action_dispatch.show_exceptions" => false
      end
    end
    test "raises an exception when a private method is called" do
      assert_raises(AbstractController::ActionNotFound) do
        get "/render/blank_render/secretz", {}, "action_dispatch.show_exceptions" => false
      end
    end
  end
  class TestVariousObjectsAvailableInView < Rack::TestCase
    test "The request object is accessible in the view" do
      get "/render/blank_render/access_request"
      assert_body "The request: GET"
    end
    test "The action_name is accessible in the view" do
      get "/render/blank_render/render_action_name"
      assert_body "Action Name: render_action_name"
    end
    test "The controller_name is accessible in the view" do
      get "/render/blank_render/access_controller_name"
      assert_body "Controller Name: blank_render"
    end
  end
  class TestViewInheritance < Rack::TestCase
    test "Template from child controller gets picked over parent one" do
      get "/render/child_render/overridden"
      assert_body "child content"
    end
    test "Template from child controller with custom view_paths prepended gets picked over parent one" do
      get "/render/child_render/overridden_with_own_view_paths_prepended"
      assert_body "child content"
    end
    test "Template from child controller with custom view_paths appended gets picked over parent one" do
      get "/render/child_render/overridden_with_own_view_paths_appended"
      assert_body "child content"
    end
    test "Template from parent controller gets picked if missing in child controller" do
      get "/render/child_render/index"
      assert_body "Hello world!"
    end
  end
end
 |