Renamed helpers to correspond to renamed Controller classes.
[merb_radiant.git] / radiant_extensions_plugins / plugins / acts_as_tree / test / .svn / text-base / acts_as_tree_test.rb.svn-base
blob018c58e1fe3d203604749442f60268494fd78469
1 require 'test/unit'
3 require 'rubygems'
4 require 'active_record'
6 $:.unshift File.dirname(__FILE__) + '/../lib'
7 require File.dirname(__FILE__) + '/../init'
9 class Test::Unit::TestCase
10   def assert_queries(num = 1)
11     $query_count = 0
12     yield
13   ensure
14     assert_equal num, $query_count, "#{$query_count} instead of #{num} queries were executed."
15   end
17   def assert_no_queries(&block)
18     assert_queries(0, &block)
19   end
20 end
22 ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :dbfile => ":memory:")
24 # AR keeps printing annoying schema statements
25 $stdout = StringIO.new
27 def setup_db
28   ActiveRecord::Base.logger
29   ActiveRecord::Schema.define(:version => 1) do
30     create_table :mixins do |t|
31       t.column :type, :string
32       t.column :parent_id, :integer
33     end
34   end
35 end
37 def teardown_db
38   ActiveRecord::Base.connection.tables.each do |table|
39     ActiveRecord::Base.connection.drop_table(table)
40   end
41 end
43 class Mixin < ActiveRecord::Base
44 end
46 class TreeMixin < Mixin 
47   acts_as_tree :foreign_key => "parent_id", :order => "id"
48 end
50 class TreeMixinWithoutOrder < Mixin
51   acts_as_tree :foreign_key => "parent_id"
52 end
54 class RecursivelyCascadedTreeMixin < Mixin
55   acts_as_tree :foreign_key => "parent_id"
56   has_one :first_child, :class_name => 'RecursivelyCascadedTreeMixin', :foreign_key => :parent_id
57 end
59 class TreeTest < Test::Unit::TestCase
60   
61   def setup
62     setup_db
63     @root1 = TreeMixin.create!
64     @root_child1 = TreeMixin.create! :parent_id => @root1.id
65     @child1_child = TreeMixin.create! :parent_id => @root_child1.id
66     @root_child2 = TreeMixin.create! :parent_id => @root1.id
67     @root2 = TreeMixin.create!
68     @root3 = TreeMixin.create!
69   end
71   def teardown
72     teardown_db
73   end
75   def test_children
76     assert_equal @root1.children, [@root_child1, @root_child2]
77     assert_equal @root_child1.children, [@child1_child]
78     assert_equal @child1_child.children, []
79     assert_equal @root_child2.children, []
80   end
82   def test_parent
83     assert_equal @root_child1.parent, @root1
84     assert_equal @root_child1.parent, @root_child2.parent
85     assert_nil @root1.parent
86   end
88   def test_delete
89     assert_equal 6, TreeMixin.count
90     @root1.destroy
91     assert_equal 2, TreeMixin.count
92     @root2.destroy
93     @root3.destroy
94     assert_equal 0, TreeMixin.count
95   end
97   def test_insert
98     @extra = @root1.children.create
100     assert @extra
102     assert_equal @extra.parent, @root1
104     assert_equal 3, @root1.children.size
105     assert @root1.children.include?(@extra)
106     assert @root1.children.include?(@root_child1)
107     assert @root1.children.include?(@root_child2)
108   end
110   def test_ancestors
111     assert_equal [], @root1.ancestors
112     assert_equal [@root1], @root_child1.ancestors
113     assert_equal [@root_child1, @root1], @child1_child.ancestors
114     assert_equal [@root1], @root_child2.ancestors
115     assert_equal [], @root2.ancestors
116     assert_equal [], @root3.ancestors
117   end
119   def test_root
120     assert_equal @root1, TreeMixin.root
121     assert_equal @root1, @root1.root
122     assert_equal @root1, @root_child1.root
123     assert_equal @root1, @child1_child.root
124     assert_equal @root1, @root_child2.root
125     assert_equal @root2, @root2.root
126     assert_equal @root3, @root3.root
127   end
129   def test_roots
130     assert_equal [@root1, @root2, @root3], TreeMixin.roots
131   end
133   def test_siblings
134     assert_equal [@root2, @root3], @root1.siblings
135     assert_equal [@root_child2], @root_child1.siblings
136     assert_equal [], @child1_child.siblings
137     assert_equal [@root_child1], @root_child2.siblings
138     assert_equal [@root1, @root3], @root2.siblings
139     assert_equal [@root1, @root2], @root3.siblings
140   end
142   def test_self_and_siblings
143     assert_equal [@root1, @root2, @root3], @root1.self_and_siblings
144     assert_equal [@root_child1, @root_child2], @root_child1.self_and_siblings
145     assert_equal [@child1_child], @child1_child.self_and_siblings
146     assert_equal [@root_child1, @root_child2], @root_child2.self_and_siblings
147     assert_equal [@root1, @root2, @root3], @root2.self_and_siblings
148     assert_equal [@root1, @root2, @root3], @root3.self_and_siblings
149   end           
152 class TreeTestWithEagerLoading < Test::Unit::TestCase
153   
154   def setup 
155     teardown_db
156     setup_db
157     @root1 = TreeMixin.create!
158     @root_child1 = TreeMixin.create! :parent_id => @root1.id
159     @child1_child = TreeMixin.create! :parent_id => @root_child1.id
160     @root_child2 = TreeMixin.create! :parent_id => @root1.id
161     @root2 = TreeMixin.create!
162     @root3 = TreeMixin.create!
163     
164     @rc1 = RecursivelyCascadedTreeMixin.create!
165     @rc2 = RecursivelyCascadedTreeMixin.create! :parent_id => @rc1.id 
166     @rc3 = RecursivelyCascadedTreeMixin.create! :parent_id => @rc2.id
167     @rc4 = RecursivelyCascadedTreeMixin.create! :parent_id => @rc3.id
168   end
170   def teardown
171     teardown_db
172   end
173     
174   def test_eager_association_loading
175     roots = TreeMixin.find(:all, :include => :children, :conditions => "mixins.parent_id IS NULL", :order => "mixins.id")
176     assert_equal [@root1, @root2, @root3], roots                     
177     assert_no_queries do
178       assert_equal 2, roots[0].children.size
179       assert_equal 0, roots[1].children.size
180       assert_equal 0, roots[2].children.size
181     end   
182   end
183   
184   def test_eager_association_loading_with_recursive_cascading_three_levels_has_many
185     root_node = RecursivelyCascadedTreeMixin.find(:first, :include => { :children => { :children => :children } }, :order => 'mixins.id')
186     assert_equal @rc4, assert_no_queries { root_node.children.first.children.first.children.first }
187   end
188   
189   def test_eager_association_loading_with_recursive_cascading_three_levels_has_one
190     root_node = RecursivelyCascadedTreeMixin.find(:first, :include => { :first_child => { :first_child => :first_child } }, :order => 'mixins.id')
191     assert_equal @rc4, assert_no_queries { root_node.first_child.first_child.first_child }
192   end
193   
194   def test_eager_association_loading_with_recursive_cascading_three_levels_belongs_to
195     leaf_node = RecursivelyCascadedTreeMixin.find(:first, :include => { :parent => { :parent => :parent } }, :order => 'mixins.id DESC')
196     assert_equal @rc1, assert_no_queries { leaf_node.parent.parent.parent }
197   end 
200 class TreeTestWithoutOrder < Test::Unit::TestCase
201   
202   def setup                               
203     setup_db
204     @root1 = TreeMixinWithoutOrder.create!
205     @root2 = TreeMixinWithoutOrder.create!
206   end
208   def teardown
209     teardown_db
210   end
212   def test_root
213     assert [@root1, @root2].include?(TreeMixinWithoutOrder.root)
214   end
215   
216   def test_roots
217     assert_equal [], [@root1, @root2] - TreeMixinWithoutOrder.roots
218   end
219 end