aboutsummaryrefslogtreecommitdiffstats
path: root/actionview/test/activerecord/render_partial_with_record_identification_test.rb
blob: 60c3ab3045b11b78224ff52c6efbf4c966fc9150 (plain) (blame)
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
require "active_record_unit"

class RenderPartialWithRecordIdentificationController < ActionController::Base
  def render_with_has_many_and_belongs_to_association
    @developer = Developer.find(1)
    render partial: @developer.projects
  end

  def render_with_has_many_association
    @topic = Topic.find(1)
    render partial: @topic.replies
  end

  def render_with_scope
    render partial: Reply.base
  end

  def render_with_has_many_through_association
    @developer = Developer.first
    render partial: @developer.topics
  end

  def render_with_has_one_association
    @company = Company.find(1)
    render partial: @company.mascot
  end

  def render_with_belongs_to_association
    @reply = Reply.find(1)
    render partial: @reply.topic
  end

  def render_with_record
    @developer = Developer.first
    render partial: @developer
  end

  def render_with_record_collection
    @developers = Developer.all
    render partial: @developers
  end

  def render_with_record_collection_and_spacer_template
    @developer = Developer.find(1)
    render partial: @developer.projects, spacer_template: "test/partial_only"
  end
end

class RenderPartialWithRecordIdentificationTest < ActiveRecordTestCase
  tests RenderPartialWithRecordIdentificationController
  fixtures :developers, :projects, :developers_projects, :topics, :replies, :companies, :mascots

  def test_rendering_partial_with_has_many_and_belongs_to_association
    get :render_with_has_many_and_belongs_to_association
    assert_equal Developer.find(1).projects.map(&:name).join, @response.body
  end

  def test_rendering_partial_with_has_many_association
    get :render_with_has_many_association
    assert_equal "Birdman is better!", @response.body
  end

  def test_rendering_partial_with_scope
    get :render_with_scope
    assert_equal "Birdman is better!Nuh uh!", @response.body
  end

  def test_render_with_record
    get :render_with_record
    assert_equal "David", @response.body
  end

  def test_render_with_record_collection
    get :render_with_record_collection
    assert_equal "DavidJamisfixture_3fixture_4fixture_5fixture_6fixture_7fixture_8fixture_9fixture_10Jamis", @response.body
  end

  def test_render_with_record_collection_and_spacer_template
    get :render_with_record_collection_and_spacer_template
    assert_equal Developer.find(1).projects.map(&:name).join("only partial"), @response.body
  end

  def test_rendering_partial_with_has_one_association
    mascot = Company.find(1).mascot
    get :render_with_has_one_association
    assert_equal mascot.name, @response.body
  end
end

Game = Struct.new(:name, :id) do
  extend ActiveModel::Naming
  include ActiveModel::Conversion
  def to_param
    id.to_s
  end
end

module Fun
  class NestedController < ActionController::Base
    def render_with_record_in_nested_controller
      render partial: Game.new("Pong")
    end

    def render_with_record_collection_in_nested_controller
      render partial: [ Game.new("Pong"), Game.new("Tank") ]
    end
  end

  module Serious
    class NestedDeeperController < ActionController::Base
      def render_with_record_in_deeper_nested_controller
        render partial: Game.new("Chess")
      end

      def render_with_record_collection_in_deeper_nested_controller
        render partial: [ Game.new("Chess"), Game.new("Sudoku"), Game.new("Solitaire") ]
      end
    end
  end
end

class RenderPartialWithRecordIdentificationAndNestedControllersTest < ActiveRecordTestCase
  tests Fun::NestedController

  def test_render_with_record_in_nested_controller
    get :render_with_record_in_nested_controller
    assert_equal "Fun Pong\n", @response.body
  end

  def test_render_with_record_collection_in_nested_controller
    get :render_with_record_collection_in_nested_controller
    assert_equal "Fun Pong\nFun Tank\n", @response.body
  end
end

class RenderPartialWithRecordIdentificationAndNestedControllersWithoutPrefixTest < ActiveRecordTestCase
  tests Fun::NestedController

  def test_render_with_record_in_nested_controller
    old_config = ActionView::Base.prefix_partial_path_with_controller_namespace
    ActionView::Base.prefix_partial_path_with_controller_namespace = false

    get :render_with_record_in_nested_controller
    assert_equal "Just Pong\n", @response.body
  ensure
    ActionView::Base.prefix_partial_path_with_controller_namespace = old_config
  end

  def test_render_with_record_collection_in_nested_controller
    old_config = ActionView::Base.prefix_partial_path_with_controller_namespace
    ActionView::Base.prefix_partial_path_with_controller_namespace = false

    get :render_with_record_collection_in_nested_controller
    assert_equal "Just Pong\nJust Tank\n", @response.body
  ensure
    ActionView::Base.prefix_partial_path_with_controller_namespace = old_config
  end
end

class RenderPartialWithRecordIdentificationAndNestedDeeperControllersTest < ActiveRecordTestCase
  tests Fun::Serious::NestedDeeperController

  def test_render_with_record_in_deeper_nested_controller
    get :render_with_record_in_deeper_nested_controller
    assert_equal "Serious Chess\n", @response.body
  end

  def test_render_with_record_collection_in_deeper_nested_controller
    get :render_with_record_collection_in_deeper_nested_controller
    assert_equal "Serious Chess\nSerious Sudoku\nSerious Solitaire\n", @response.body
  end
end

class RenderPartialWithRecordIdentificationAndNestedDeeperControllersWithoutPrefixTest < ActiveRecordTestCase
  tests Fun::Serious::NestedDeeperController

  def test_render_with_record_in_deeper_nested_controller
    old_config = ActionView::Base.prefix_partial_path_with_controller_namespace
    ActionView::Base.prefix_partial_path_with_controller_namespace = false

    get :render_with_record_in_deeper_nested_controller
    assert_equal "Just Chess\n", @response.body
  ensure
    ActionView::Base.prefix_partial_path_with_controller_namespace = old_config
  end

  def test_render_with_record_collection_in_deeper_nested_controller
    old_config = ActionView::Base.prefix_partial_path_with_controller_namespace
    ActionView::Base.prefix_partial_path_with_controller_namespace = false

    get :render_with_record_collection_in_deeper_nested_controller
    assert_equal "Just Chess\nJust Sudoku\nJust Solitaire\n", @response.body
  ensure
    ActionView::Base.prefix_partial_path_with_controller_namespace = old_config
  end
end