aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test/activerecord/render_partial_with_record_identification_test.rb
blob: 2a31f3be44caee4869f564326e63a9948094ca90 (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
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_named_scope
    render :partial => Reply.base
  end

  def render_with_has_many_through_association
    @developer = Developer.find(: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.find(:first)
    render :partial => @developer
  end

  def render_with_record_collection
    @developers = Developer.find(: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_template 'projects/_project'
    assert_equal assigns(:developer).projects.map(&:name).join, @response.body
  end

  def test_rendering_partial_with_has_many_association
    get :render_with_has_many_association
    assert_template 'replies/_reply'
    assert_equal 'Birdman is better!', @response.body
  end

  def test_rendering_partial_with_named_scope
    get :render_with_named_scope
    assert_template 'replies/_reply'
    assert_equal 'Birdman is better!Nuh uh!', @response.body
  end

  def test_render_with_record
    get :render_with_record
    assert_template 'developers/_developer'
    assert_equal 'David', @response.body
  end

  def test_render_with_record_collection
    get :render_with_record_collection
    assert_template 'developers/_developer'
    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 assigns(:developer).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_template 'mascots/_mascot'
    assert_equal mascot.name, @response.body
  end
end

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_has_many_through_association
    @developer = Developer.find(:first)
    render :partial => @developer.topics
  end

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

  def render_with_record
    @developer = Developer.find(:first)
    render :partial => @developer
  end

  def render_with_record_collection
    @developers = Developer.find(:all)
    render :partial => @developers
  end
end

class Game < Struct.new(:name, :id)
  extend ActiveModel::Naming
  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_template 'fun/games/_game'
    assert_equal 'Pong', @response.body
  end

  def test_render_with_record_collection_in_nested_controller
    get :render_with_record_collection_in_nested_controller
    assert_template 'fun/games/_game'
    assert_equal 'PongTank', @response.body
  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_template 'fun/serious/games/_game'
    assert_equal 'Chess', @response.body
  end

  def test_render_with_record_collection_in_deeper_nested_controller
    get :render_with_record_collection_in_deeper_nested_controller
    assert_template 'fun/serious/games/_game'
    assert_equal 'ChessSudokuSolitaire', @response.body
  end
end