render_partial_with_record_identification_test.rb 6.9 KB
Newer Older
1
require 'active_record_unit'
2

3 4 5 6 7
class RenderPartialWithRecordIdentificationController < ActionController::Base
  def render_with_has_many_and_belongs_to_association
    @developer = Developer.find(1)
    render :partial => @developer.projects
  end
8

9 10 11 12 13
  def render_with_has_many_association
    @topic = Topic.find(1)
    render :partial => @topic.replies
  end

14
  def render_with_scope
15 16 17 18
    render :partial => Reply.base
  end

  def render_with_has_many_through_association
19
    @developer = Developer.first
20 21 22 23 24 25 26 27 28 29 30
    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
31
  end
32 33

  def render_with_record
34
    @developer = Developer.first
35 36 37 38
    render :partial => @developer
  end

  def render_with_record_collection
V
Vishnu Atrai 已提交
39
    @developers = Developer.all
40 41
    render :partial => @developers
  end
42 43 44 45 46

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

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

53 54 55
  def test_rendering_partial_with_has_many_and_belongs_to_association
    get :render_with_has_many_and_belongs_to_association
    assert_template 'projects/_project'
56
    assert_equal assigns(:developer).projects.map(&:name).join, @response.body
57
  end
58

59 60 61
  def test_rendering_partial_with_has_many_association
    get :render_with_has_many_association
    assert_template 'replies/_reply'
62
    assert_equal 'Birdman is better!', @response.body
63
  end
64

65 66
  def test_rendering_partial_with_scope
    get :render_with_scope
67
    assert_template 'replies/_reply'
68
    assert_equal 'Birdman is better!Nuh uh!', @response.body
69
  end
70

71 72 73
  def test_render_with_record
    get :render_with_record
    assert_template 'developers/_developer'
74
    assert_equal 'David', @response.body
75
  end
76

77 78 79
  def test_render_with_record_collection
    get :render_with_record_collection
    assert_template 'developers/_developer'
80
    assert_equal 'DavidJamisfixture_3fixture_4fixture_5fixture_6fixture_7fixture_8fixture_9fixture_10Jamis', @response.body
81
  end
82

83 84
  def test_render_with_record_collection_and_spacer_template
    get :render_with_record_collection_and_spacer_template
85
    assert_equal assigns(:developer).projects.map(&:name).join('only partial'), @response.body
86 87
  end

88 89 90 91 92 93
  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
94
end
95 96

class Game < Struct.new(:name, :id)
J
Joshua Peek 已提交
97 98
  extend ActiveModel::Naming
  include ActiveModel::Conversion
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
  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
114

115 116 117 118 119 120 121 122 123 124 125 126 127 128
  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
129
  tests Fun::NestedController
130 131 132

  def test_render_with_record_in_nested_controller
    get :render_with_record_in_nested_controller
133
    assert_template %r{\Afun/games/_game\Z}
134
    assert_equal "Fun Pong\n", @response.body
135 136 137 138
  end

  def test_render_with_record_collection_in_nested_controller
    get :render_with_record_collection_in_nested_controller
139
    assert_template %r{\Afun/games/_game\Z}
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
    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_template %r{\Agames/_game\Z}
    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_template %r{\Agames/_game\Z}
    assert_equal "Just Pong\nJust Tank\n", @response.body
  ensure
    ActionView::Base.prefix_partial_path_with_controller_namespace = old_config
167 168 169 170
  end
end

class RenderPartialWithRecordIdentificationAndNestedDeeperControllersTest < ActiveRecordTestCase
171
  tests Fun::Serious::NestedDeeperController
172 173 174

  def test_render_with_record_in_deeper_nested_controller
    get :render_with_record_in_deeper_nested_controller
175
    assert_template %r{\Afun/serious/games/_game\Z}
176
    assert_equal "Serious Chess\n", @response.body
177 178 179 180
  end

  def test_render_with_record_collection_in_deeper_nested_controller
    get :render_with_record_collection_in_deeper_nested_controller
181
    assert_template %r{\Afun/serious/games/_game\Z}
182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
    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_template %r{\Agames/_game\Z}
    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_template %r{\Agames/_game\Z}
    assert_equal "Just Chess\nJust Sudoku\nJust Solitaire\n", @response.body
  ensure
    ActionView::Base.prefix_partial_path_with_controller_namespace = old_config
209
  end
210
end