Changeset 7466
- Timestamp:
- 09/11/07 21:33:06 (10 months ago)
- Files:
-
- plugins/acts_as_tree/test/abstract_unit.rb (modified) (1 diff)
- plugins/acts_as_tree/test/acts_as_tree_test.rb (modified) (1 diff)
- plugins/acts_as_tree/test/database.yml (modified) (1 diff)
- plugins/acts_as_tree/test/fixtures/mixin.rb (modified) (1 diff)
- plugins/acts_as_tree/test/fixtures/mixins.yml (modified) (1 diff)
- plugins/acts_as_tree/test/schema.rb (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
plugins/acts_as_tree/test/abstract_unit.rb
r7458 r7466 1 $:.unshift(File.dirname(__FILE__) + '/../../../rails/activesupport/lib')2 $:.unshift(File.dirname(__FILE__) + '/../../../rails/activerecord/lib')3 4 require 'test/unit'5 require 'active_support'6 require 'active_record'7 require 'active_record/fixtures'8 9 $:.unshift(File.dirname(__FILE__) + '/../lib')10 require "#{File.dirname(__FILE__)}/../init"11 12 config = YAML::load(IO.read(File.dirname(__FILE__) + '/database.yml'))13 ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/debug.log")14 ActiveRecord::Base.configurations = {'test' => config[ENV['DB'] || 'sqlite3']}15 ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations['test'])16 17 load(File.dirname(__FILE__) + "/schema.rb") if File.exist?(File.dirname(__FILE__) + "/schema.rb")18 19 class Test::Unit::TestCase #:nodoc:20 self.fixture_path = File.dirname(__FILE__) + "/fixtures/"21 self.use_transactional_fixtures = true22 self.use_instantiated_fixtures = false23 24 def create_fixtures(*table_names, &block)25 Fixtures.create_fixtures(File.dirname(__FILE__) + "/fixtures/", table_names, {}, &block)26 end27 28 def assert_queries(num = 1)29 $query_count = 030 yield31 ensure32 assert_equal num, $query_count, "#{$query_count} instead of #{num} queries were executed."33 end34 35 def assert_no_queries(&block)36 assert_queries(0, &block)37 end38 39 endplugins/acts_as_tree/test/acts_as_tree_test.rb
r7451 r7466 1 require File.join(File.dirname(__FILE__), 'abstract_unit') 2 require File.join(File.dirname(__FILE__), 'fixtures/mixin') 1 require 'test/unit' 2 3 require 'rubygems' 4 require 'active_record' 5 6 $:.unshift File.dirname(__FILE__) + '/../lib' 7 require File.dirname(__FILE__) + '/../init' 8 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 16 17 def assert_no_queries(&block) 18 assert_queries(0, &block) 19 end 20 end 21 22 ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :dbfile => ":memory:") 23 24 # AR keeps printing annoying schema statements 25 $stdout = StringIO.new 26 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 36 37 def teardown_db 38 ActiveRecord::Base.connection.tables.each do |table| 39 ActiveRecord::Base.connection.drop_table(table) 40 end 41 end 42 43 class Mixin < ActiveRecord::Base 44 end 45 46 class TreeMixin < Mixin 47 acts_as_tree :foreign_key => "parent_id", :order => "id" 48 end 49 50 class TreeMixinWithoutOrder < Mixin 51 acts_as_tree :foreign_key => "parent_id" 52 end 53 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 3 58 4 59 class TreeTest < Test::Unit::TestCase 5 fixtures :mixins 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 70 71 def teardown 72 teardown_db 73 end 6 74 7 75 def test_children 8 assert_equal mixins(:tree_1).children, mixins(:tree_2, :tree_4)9 assert_equal mixins(:tree_2).children, [mixins(:tree_3)]10 assert_equal mixins(:tree_3).children, []11 assert_equal mixins(:tree_4).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, [] 12 80 end 13 81 14 82 def test_parent 15 assert_equal mixins(:tree_2).parent, mixins(:tree_1)16 assert_equal mixins(:tree_2).parent, mixins(:tree_4).parent17 assert_nil mixins(:tree_1).parent83 assert_equal @root_child1.parent, @root1 84 assert_equal @root_child1.parent, @root_child2.parent 85 assert_nil @root1.parent 18 86 end 19 87 20 88 def test_delete 21 89 assert_equal 6, TreeMixin.count 22 mixins(:tree_1).destroy90 @root1.destroy 23 91 assert_equal 2, TreeMixin.count 24 mixins(:tree2_1).destroy25 mixins(:tree3_1).destroy92 @root2.destroy 93 @root3.destroy 26 94 assert_equal 0, TreeMixin.count 27 95 end 28 96 29 97 def test_insert 30 @extra = mixins(:tree_1).children.create98 @extra = @root1.children.create 31 99 32 100 assert @extra 33 101 34 assert_equal @extra.parent, mixins(:tree_1)35 36 assert_equal 3, mixins(:tree_1).children.size37 assert mixins(:tree_1).children.include?(@extra)38 assert mixins(:tree_1).children.include?(mixins(:tree_2))39 assert mixins(:tree_1).children.include?(mixins(:tree_4))102 assert_equal @extra.parent, @root1 103 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) 40 108 end 41 109 42 110 def test_ancestors 43 assert_equal [], mixins(:tree_1).ancestors44 assert_equal [ mixins(:tree_1)], mixins(:tree_2).ancestors45 assert_equal mixins(:tree_2, :tree_1), mixins(:tree_3).ancestors46 assert_equal [ mixins(:tree_1)], mixins(:tree_4).ancestors47 assert_equal [], mixins(:tree2_1).ancestors48 assert_equal [], mixins(:tree3_1).ancestors111 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 49 117 end 50 118 51 119 def test_root 52 assert_equal mixins(:tree_1), TreeMixin.root53 assert_equal mixins(:tree_1), mixins(:tree_1).root54 assert_equal mixins(:tree_1), mixins(:tree_2).root55 assert_equal mixins(:tree_1), mixins(:tree_3).root56 assert_equal mixins(:tree_1), mixins(:tree_4).root57 assert_equal mixins(:tree2_1), mixins(:tree2_1).root58 assert_equal mixins(:tree3_1), mixins(:tree3_1).root120 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 59 127 end 60 128 61 129 def test_roots 62 assert_equal mixins(:tree_1, :tree2_1, :tree3_1), TreeMixin.roots130 assert_equal [@root1, @root2, @root3], TreeMixin.roots 63 131 end 64 132 65 133 def test_siblings 66 assert_equal mixins(:tree2_1, :tree3_1), mixins(:tree_1).siblings67 assert_equal [ mixins(:tree_4)], mixins(:tree_2).siblings68 assert_equal [], mixins(:tree_3).siblings69 assert_equal [ mixins(:tree_2)], mixins(:tree_4).siblings70 assert_equal mixins(:tree_1, :tree3_1), mixins(:tree2_1).siblings71 assert_equal mixins(:tree_1, :tree2_1), mixins(:tree3_1).siblings134 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 72 140 end 73 141 74 142 def test_self_and_siblings 75 assert_equal mixins(:tree_1, :tree2_1, :tree3_1), mixins(:tree_1).self_and_siblings76 assert_equal mixins(:tree_2, :tree_4), mixins(:tree_2).self_and_siblings77 assert_equal [ mixins(:tree_3)], mixins(:tree_3).self_and_siblings78 assert_equal mixins(:tree_2, :tree_4), mixins(:tree_4).self_and_siblings79 assert_equal mixins(:tree_1, :tree2_1, :tree3_1), mixins(:tree2_1).self_and_siblings80 assert_equal mixins(:tree_1, :tree2_1, :tree3_1), mixins(:tree3_1).self_and_siblings143 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 81 149 end 82 150 end 83 151 84 152 class TreeTestWithEagerLoading < Test::Unit::TestCase 85 fixtures :mixins 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 169 170 def teardown 171 teardown_db 172 end 86 173 87 174 def test_eager_association_loading 88 roots = TreeMixin.find(:all, :include =>"children", :conditions=>"mixins.parent_id IS NULL", :order=>"mixins.id")89 assert_equal mixins(:tree_1, :tree2_1, :tree3_1), roots175 roots = TreeMixin.find(:all, :include => :children, :conditions => "mixins.parent_id IS NULL", :order => "mixins.id") 176 assert_equal [@root1, @root2, @root3], roots 90 177 assert_no_queries do 91 178 assert_equal 2, roots[0].children.size 92 179 assert_equal 0, roots[1].children.size 93 180 assert_equal 0, roots[2].children.size 94 end 181 end 95 182 end 96 183 97 184 def test_eager_association_loading_with_recursive_cascading_three_levels_has_many 98 root_node = RecursivelyCascadedTreeMixin.find(:first, :include =>{:children=>{:children=>:children}}, :order => 'mixins.id')99 assert_equal mixins(:recursively_cascaded_tree_4), assert_no_queries { root_node.children.first.children.first.children.first }100 end 101 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 102 189 def test_eager_association_loading_with_recursive_cascading_three_levels_has_one 103 root_node = RecursivelyCascadedTreeMixin.find(:first, :include =>{:first_child=>{:first_child=>:first_child}}, :order => 'mixins.id')104 assert_equal mixins(:recursively_cascaded_tree_4), assert_no_queries { root_node.first_child.first_child.first_child }105 end 106 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 107 194 def test_eager_association_loading_with_recursive_cascading_three_levels_belongs_to 108 leaf_node = RecursivelyCascadedTreeMixin.find(:first, :include =>{:parent=>{:parent=>:parent}}, :order => 'mixins.id DESC')109 assert_equal mixins(:recursively_cascaded_tree_1), assert_no_queries { leaf_node.parent.parent.parent }110 end 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 111 198 end 112 199 113 200 class TreeTestWithoutOrder < Test::Unit::TestCase 114 fixtures :mixins 201 202 def setup 203 setup_db 204 @root1 = TreeMixinWithoutOrder.create! 205 @root2 = TreeMixinWithoutOrder.create! 206 end 207 208 def teardown 209 teardown_db 210 end 115 211 116 212 def test_root 117 assert mixins(:tree_without_order_1, :tree_without_order_2).include?(TreeMixinWithoutOrder.root)118 end 119 213 assert [@root1, @root2].include?(TreeMixinWithoutOrder.root) 214 end 215 120 216 def test_roots 121 assert_equal [], mixins(:tree_without_order_1, :tree_without_order_2)- TreeMixinWithoutOrder.roots122 end 123 end 217 assert_equal [], [@root1, @root2] - TreeMixinWithoutOrder.roots 218 end 219 end plugins/acts_as_tree/test/database.yml
r7451 r7466 1 sqlite:2 :adapter: sqlite3 :dbfile: acts_as_tree_plugin.sqlite.db4 sqlite3:5 :adapter: sqlite36 :dbfile: acts_as_tree_plugin.sqlite3.db7 postgresql:8 :adapter: postgresql9 :username: postgres10 :password: postgres11 :database: acts_as_tree_plugin_test12 :min_messages: ERROR13 mysql:14 :adapter: mysql15 :host: localhost16 :username: rails17 :password:18 :database: acts_as_tree_plugin_testplugins/acts_as_tree/test/fixtures/mixin.rb
r7451 r7466 1 class Mixin < ActiveRecord::Base2 end3 4 class TreeMixin < Mixin5 acts_as_tree :foreign_key => "parent_id", :order => "id"6 end7 8 class TreeMixinWithoutOrder < Mixin9 acts_as_tree :foreign_key => "parent_id"10 end11 12 class RecursivelyCascadedTreeMixin < Mixin13 acts_as_tree :foreign_key => "parent_id"14 has_one :first_child, :class_name => 'RecursivelyCascadedTreeMixin', :foreign_key => :parent_id15 endplugins/acts_as_tree/test/fixtures/mixins.yml
r7451 r7466 1 tree_1:2 id: 10013 type: TreeMixin4 parent_id:5 6 tree_2:7 id: 10028 type: TreeMixin9 parent_id: 100110 11 tree_3:12 id: 100313 type: TreeMixin14 parent_id: 100215 16 tree_4:17 id: 100418 type: TreeMixin19 parent_id: 100120 21 tree2_1:22 id: 100523 type: TreeMixin24 parent_id:25 26 tree3_1:27 id: 100628 type: TreeMixin29 parent_id:30 31 tree_without_order_1:32 id: 110133 type: TreeMixinWithoutOrder34 parent_id:35 36 tree_without_order_2:37 id: 110038 type: TreeMixinWithoutOrder39 parent_id:40 41 recursively_cascaded_tree_1:42 id: 500543 type: RecursivelyCascadedTreeMixin44 parent_id:45 46 recursively_cascaded_tree_2:47 id: 500648 type: RecursivelyCascadedTreeMixin49 parent_id: 500550 51 recursively_cascaded_tree_3:52 id: 500753 type: RecursivelyCascadedTreeMixin54 parent_id: 500655 56 recursively_cascaded_tree_4:57 id: 500858 type: RecursivelyCascadedTreeMixin59 parent_id: 5007plugins/acts_as_tree/test/schema.rb
r7451 r7466 1 ActiveRecord::Schema.define(:version => 1) do2 create_table :mixins, :force => true do |t|3 t.column :parent_id, :integer4 t.column :pos, :integer5 t.column :lft, :integer6 t.column :rgt, :integer7 t.column :root_id, :integer8 t.column :type, :string9 t.column :created_at, :datetime10 t.column :updated_at, :datetime11 end12 end