Changesets can be listed by changeset number.
The Git repository is here.
- Revision:
- 373
- Log:
Initial import of Radiant 0.9.1, which is now packaged as a gem. This is an
import of the tagged 0.9.1 source checked out from GitHub, which isn't quite
the same as the gem distribution - but it doesn't seem to be available in an
archived form and the installed gem already has modifications, so this is
the closest I can get.
- Author:
- rool
- Date:
- Mon Mar 21 13:40:05 +0000 2011
- Size:
- 6613 Bytes
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 |
58 | |
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 |
70 | |
71 | def teardown |
72 | teardown_db |
73 | end |
74 | |
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 |
81 | |
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 |
87 | |
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 |
96 | |
97 | def test_insert |
98 | @extra = @root1.children.create |
99 | |
100 | assert @extra |
101 | |
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) |
108 | end |
109 | |
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 |
118 | |
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 |
128 | |
129 | def test_roots |
130 | assert_equal [@root1, @root2, @root3], TreeMixin.roots |
131 | end |
132 | |
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 |
141 | |
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 |
150 | end |
151 | |
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 |
169 | |
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 |
198 | end |
199 | |
200 | class TreeTestWithoutOrder < Test::Unit::TestCase |
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 |
211 | |
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 |