Froze rails gems
[depot.git] / vendor / rails / activerecord / test / cases / associations / eager_singularization_test.rb
1 require "cases/helper"
2
3 class Virus < ActiveRecord::Base
4 belongs_to :octopus
5 end
6 class Octopus < ActiveRecord::Base
7 has_one :virus
8 end
9 class Pass < ActiveRecord::Base
10 belongs_to :bus
11 end
12 class Bus < ActiveRecord::Base
13 has_many :passes
14 end
15 class Mess < ActiveRecord::Base
16 has_and_belongs_to_many :crises
17 end
18 class Crisis < ActiveRecord::Base
19 has_and_belongs_to_many :messes
20 has_many :analyses, :dependent => :destroy
21 has_many :successes, :through => :analyses
22 has_many :dresses, :dependent => :destroy
23 has_many :compresses, :through => :dresses
24 end
25 class Analysis < ActiveRecord::Base
26 belongs_to :crisis
27 belongs_to :success
28 end
29 class Success < ActiveRecord::Base
30 has_many :analyses, :dependent => :destroy
31 has_many :crises, :through => :analyses
32 end
33 class Dress < ActiveRecord::Base
34 belongs_to :crisis
35 has_many :compresses
36 end
37 class Compress < ActiveRecord::Base
38 belongs_to :dress
39 end
40
41
42 class EagerSingularizationTest < ActiveRecord::TestCase
43
44 def setup
45 if ActiveRecord::Base.connection.supports_migrations?
46 ActiveRecord::Base.connection.create_table :viri do |t|
47 t.column :octopus_id, :integer
48 t.column :species, :string
49 end
50 ActiveRecord::Base.connection.create_table :octopi do |t|
51 t.column :species, :string
52 end
53 ActiveRecord::Base.connection.create_table :passes do |t|
54 t.column :bus_id, :integer
55 t.column :rides, :integer
56 end
57 ActiveRecord::Base.connection.create_table :buses do |t|
58 t.column :name, :string
59 end
60 ActiveRecord::Base.connection.create_table :crises_messes, :id => false do |t|
61 t.column :crisis_id, :integer
62 t.column :mess_id, :integer
63 end
64 ActiveRecord::Base.connection.create_table :messes do |t|
65 t.column :name, :string
66 end
67 ActiveRecord::Base.connection.create_table :crises do |t|
68 t.column :name, :string
69 end
70 ActiveRecord::Base.connection.create_table :successes do |t|
71 t.column :name, :string
72 end
73 ActiveRecord::Base.connection.create_table :analyses do |t|
74 t.column :crisis_id, :integer
75 t.column :success_id, :integer
76 end
77 ActiveRecord::Base.connection.create_table :dresses do |t|
78 t.column :crisis_id, :integer
79 end
80 ActiveRecord::Base.connection.create_table :compresses do |t|
81 t.column :dress_id, :integer
82 end
83 @have_tables = true
84 else
85 @have_tables = false
86 end
87 end
88
89 def teardown
90 ActiveRecord::Base.connection.drop_table :viri
91 ActiveRecord::Base.connection.drop_table :octopi
92 ActiveRecord::Base.connection.drop_table :passes
93 ActiveRecord::Base.connection.drop_table :buses
94 ActiveRecord::Base.connection.drop_table :crises_messes
95 ActiveRecord::Base.connection.drop_table :messes
96 ActiveRecord::Base.connection.drop_table :crises
97 ActiveRecord::Base.connection.drop_table :successes
98 ActiveRecord::Base.connection.drop_table :analyses
99 ActiveRecord::Base.connection.drop_table :dresses
100 ActiveRecord::Base.connection.drop_table :compresses
101 end
102
103 def test_eager_no_extra_singularization_belongs_to
104 return unless @have_tables
105 assert_nothing_raised do
106 Virus.find(:all, :include => :octopus)
107 end
108 end
109
110 def test_eager_no_extra_singularization_has_one
111 return unless @have_tables
112 assert_nothing_raised do
113 Octopus.find(:all, :include => :virus)
114 end
115 end
116
117 def test_eager_no_extra_singularization_has_many
118 return unless @have_tables
119 assert_nothing_raised do
120 Bus.find(:all, :include => :passes)
121 end
122 end
123
124 def test_eager_no_extra_singularization_has_and_belongs_to_many
125 return unless @have_tables
126 assert_nothing_raised do
127 Crisis.find(:all, :include => :messes)
128 Mess.find(:all, :include => :crises)
129 end
130 end
131
132 def test_eager_no_extra_singularization_has_many_through_belongs_to
133 return unless @have_tables
134 assert_nothing_raised do
135 Crisis.find(:all, :include => :successes)
136 end
137 end
138
139 def test_eager_no_extra_singularization_has_many_through_has_many
140 return unless @have_tables
141 assert_nothing_raised do
142 Crisis.find(:all, :include => :compresses)
143 end
144 end
145 end