activerecord 1.15.6 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of activerecord might be problematic. Click here for more details.

Files changed (185) hide show
  1. data/CHANGELOG +2454 -34
  2. data/README +1 -1
  3. data/RUNNING_UNIT_TESTS +3 -34
  4. data/Rakefile +98 -77
  5. data/install.rb +1 -1
  6. data/lib/active_record.rb +13 -22
  7. data/lib/active_record/aggregations.rb +38 -49
  8. data/lib/active_record/associations.rb +452 -333
  9. data/lib/active_record/associations/association_collection.rb +66 -20
  10. data/lib/active_record/associations/association_proxy.rb +9 -8
  11. data/lib/active_record/associations/has_and_belongs_to_many_association.rb +46 -51
  12. data/lib/active_record/associations/has_many_association.rb +21 -57
  13. data/lib/active_record/associations/has_many_through_association.rb +38 -18
  14. data/lib/active_record/associations/has_one_association.rb +30 -14
  15. data/lib/active_record/attribute_methods.rb +253 -0
  16. data/lib/active_record/base.rb +719 -494
  17. data/lib/active_record/calculations.rb +62 -63
  18. data/lib/active_record/callbacks.rb +57 -83
  19. data/lib/active_record/connection_adapters/abstract/connection_specification.rb +38 -9
  20. data/lib/active_record/connection_adapters/abstract/database_statements.rb +56 -15
  21. data/lib/active_record/connection_adapters/abstract/query_cache.rb +87 -0
  22. data/lib/active_record/connection_adapters/abstract/quoting.rb +23 -12
  23. data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +191 -62
  24. data/lib/active_record/connection_adapters/abstract/schema_statements.rb +37 -34
  25. data/lib/active_record/connection_adapters/abstract_adapter.rb +28 -17
  26. data/lib/active_record/connection_adapters/mysql_adapter.rb +119 -37
  27. data/lib/active_record/connection_adapters/postgresql_adapter.rb +473 -210
  28. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +34 -0
  29. data/lib/active_record/connection_adapters/sqlite_adapter.rb +91 -107
  30. data/lib/active_record/fixtures.rb +503 -113
  31. data/lib/active_record/locking/optimistic.rb +72 -34
  32. data/lib/active_record/migration.rb +80 -57
  33. data/lib/active_record/observer.rb +13 -10
  34. data/lib/active_record/query_cache.rb +16 -57
  35. data/lib/active_record/reflection.rb +35 -38
  36. data/lib/active_record/schema.rb +5 -5
  37. data/lib/active_record/schema_dumper.rb +35 -13
  38. data/lib/active_record/serialization.rb +98 -0
  39. data/lib/active_record/serializers/json_serializer.rb +71 -0
  40. data/lib/active_record/{xml_serialization.rb → serializers/xml_serializer.rb} +90 -83
  41. data/lib/active_record/timestamp.rb +20 -21
  42. data/lib/active_record/transactions.rb +39 -43
  43. data/lib/active_record/validations.rb +256 -107
  44. data/lib/active_record/version.rb +3 -3
  45. data/lib/activerecord.rb +1 -0
  46. data/test/aaa_create_tables_test.rb +15 -2
  47. data/test/abstract_unit.rb +24 -17
  48. data/test/active_schema_test_mysql.rb +20 -8
  49. data/test/adapter_test.rb +23 -5
  50. data/test/adapter_test_sqlserver.rb +15 -1
  51. data/test/aggregations_test.rb +16 -1
  52. data/test/all.sh +2 -2
  53. data/test/associations/ar_joins_test.rb +0 -0
  54. data/test/associations/callbacks_test.rb +51 -30
  55. data/test/associations/cascaded_eager_loading_test.rb +1 -29
  56. data/test/associations/eager_singularization_test.rb +145 -0
  57. data/test/associations/eager_test.rb +42 -6
  58. data/test/associations/extension_test.rb +6 -1
  59. data/test/associations/inner_join_association_test.rb +88 -0
  60. data/test/associations/join_model_test.rb +47 -16
  61. data/test/associations_test.rb +449 -226
  62. data/test/attribute_methods_test.rb +97 -0
  63. data/test/base_test.rb +251 -105
  64. data/test/binary_test.rb +22 -27
  65. data/test/calculations_test.rb +37 -5
  66. data/test/callbacks_test.rb +23 -0
  67. data/test/connection_test_firebird.rb +2 -2
  68. data/test/connection_test_mysql.rb +30 -0
  69. data/test/connections/native_mysql/connection.rb +3 -0
  70. data/test/connections/native_sqlite/connection.rb +5 -14
  71. data/test/connections/native_sqlite3/connection.rb +5 -14
  72. data/test/connections/native_sqlite3/in_memory_connection.rb +1 -1
  73. data/test/{copy_table_sqlite.rb → copy_table_test_sqlite.rb} +8 -3
  74. data/test/datatype_test_postgresql.rb +178 -27
  75. data/test/{empty_date_time_test.rb → date_time_test.rb} +13 -1
  76. data/test/defaults_test.rb +8 -1
  77. data/test/deprecated_finder_test.rb +7 -128
  78. data/test/finder_test.rb +192 -54
  79. data/test/fixtures/all/developers.yml +0 -0
  80. data/test/fixtures/all/people.csv +0 -0
  81. data/test/fixtures/all/tasks.yml +0 -0
  82. data/test/fixtures/author.rb +12 -5
  83. data/test/fixtures/binaries.yml +130 -435
  84. data/test/fixtures/category.rb +6 -0
  85. data/test/fixtures/company.rb +8 -1
  86. data/test/fixtures/computer.rb +1 -0
  87. data/test/fixtures/contact.rb +16 -0
  88. data/test/fixtures/customer.rb +2 -2
  89. data/test/fixtures/db_definitions/db2.drop.sql +1 -0
  90. data/test/fixtures/db_definitions/db2.sql +4 -0
  91. data/test/fixtures/db_definitions/firebird.drop.sql +3 -1
  92. data/test/fixtures/db_definitions/firebird.sql +6 -0
  93. data/test/fixtures/db_definitions/frontbase.drop.sql +1 -0
  94. data/test/fixtures/db_definitions/frontbase.sql +5 -0
  95. data/test/fixtures/db_definitions/openbase.sql +41 -25
  96. data/test/fixtures/db_definitions/oracle.drop.sql +2 -0
  97. data/test/fixtures/db_definitions/oracle.sql +5 -0
  98. data/test/fixtures/db_definitions/postgresql.drop.sql +7 -0
  99. data/test/fixtures/db_definitions/postgresql.sql +87 -58
  100. data/test/fixtures/db_definitions/postgresql2.sql +1 -2
  101. data/test/fixtures/db_definitions/schema.rb +280 -0
  102. data/test/fixtures/db_definitions/schema2.rb +11 -0
  103. data/test/fixtures/db_definitions/sqlite.drop.sql +1 -0
  104. data/test/fixtures/db_definitions/sqlite.sql +4 -0
  105. data/test/fixtures/db_definitions/sybase.drop.sql +1 -0
  106. data/test/fixtures/db_definitions/sybase.sql +4 -0
  107. data/test/fixtures/developer.rb +10 -0
  108. data/test/fixtures/example.log +1 -0
  109. data/test/fixtures/flowers.jpg +0 -0
  110. data/test/fixtures/item.rb +7 -0
  111. data/test/fixtures/items.yml +4 -0
  112. data/test/fixtures/joke.rb +0 -3
  113. data/test/fixtures/matey.rb +4 -0
  114. data/test/fixtures/mateys.yml +4 -0
  115. data/test/fixtures/minimalistic.rb +2 -0
  116. data/test/fixtures/minimalistics.yml +2 -0
  117. data/test/fixtures/mixins.yml +2 -100
  118. data/test/fixtures/parrot.rb +13 -0
  119. data/test/fixtures/parrots.yml +27 -0
  120. data/test/fixtures/parrots_pirates.yml +7 -0
  121. data/test/fixtures/pirate.rb +5 -0
  122. data/test/fixtures/pirates.yml +9 -0
  123. data/test/fixtures/post.rb +1 -0
  124. data/test/fixtures/project.rb +3 -2
  125. data/test/fixtures/reserved_words/distinct.yml +5 -0
  126. data/test/fixtures/reserved_words/distincts_selects.yml +11 -0
  127. data/test/fixtures/reserved_words/group.yml +14 -0
  128. data/test/fixtures/reserved_words/select.yml +8 -0
  129. data/test/fixtures/reserved_words/values.yml +7 -0
  130. data/test/fixtures/ship.rb +3 -0
  131. data/test/fixtures/ships.yml +5 -0
  132. data/test/fixtures/tagging.rb +4 -0
  133. data/test/fixtures/taggings.yml +8 -1
  134. data/test/fixtures/topic.rb +13 -1
  135. data/test/fixtures/treasure.rb +4 -0
  136. data/test/fixtures/treasures.yml +10 -0
  137. data/test/fixtures_test.rb +205 -24
  138. data/test/inheritance_test.rb +7 -1
  139. data/test/json_serialization_test.rb +180 -0
  140. data/test/lifecycle_test.rb +1 -1
  141. data/test/locking_test.rb +85 -2
  142. data/test/migration_test.rb +206 -40
  143. data/test/mixin_test.rb +13 -515
  144. data/test/pk_test.rb +3 -6
  145. data/test/query_cache_test.rb +104 -0
  146. data/test/reflection_test.rb +16 -0
  147. data/test/reserved_word_test_mysql.rb +177 -0
  148. data/test/schema_dumper_test.rb +38 -3
  149. data/test/serialization_test.rb +47 -0
  150. data/test/transactions_test.rb +74 -23
  151. data/test/unconnected_test.rb +1 -1
  152. data/test/validations_test.rb +322 -32
  153. data/test/xml_serialization_test.rb +121 -44
  154. metadata +48 -41
  155. data/examples/associations.rb +0 -87
  156. data/examples/shared_setup.rb +0 -15
  157. data/examples/validation.rb +0 -85
  158. data/lib/active_record/acts/list.rb +0 -256
  159. data/lib/active_record/acts/nested_set.rb +0 -211
  160. data/lib/active_record/acts/tree.rb +0 -96
  161. data/lib/active_record/connection_adapters/db2_adapter.rb +0 -228
  162. data/lib/active_record/connection_adapters/firebird_adapter.rb +0 -728
  163. data/lib/active_record/connection_adapters/frontbase_adapter.rb +0 -861
  164. data/lib/active_record/connection_adapters/openbase_adapter.rb +0 -350
  165. data/lib/active_record/connection_adapters/oracle_adapter.rb +0 -690
  166. data/lib/active_record/connection_adapters/sqlserver_adapter.rb +0 -591
  167. data/lib/active_record/connection_adapters/sybase_adapter.rb +0 -662
  168. data/lib/active_record/deprecated_associations.rb +0 -104
  169. data/lib/active_record/deprecated_finders.rb +0 -44
  170. data/lib/active_record/vendor/simple.rb +0 -693
  171. data/lib/active_record/wrappers/yaml_wrapper.rb +0 -15
  172. data/lib/active_record/wrappings.rb +0 -58
  173. data/test/connections/native_sqlserver/connection.rb +0 -23
  174. data/test/connections/native_sqlserver_odbc/connection.rb +0 -25
  175. data/test/deprecated_associations_test.rb +0 -396
  176. data/test/fixtures/db_definitions/mysql.drop.sql +0 -32
  177. data/test/fixtures/db_definitions/mysql.sql +0 -234
  178. data/test/fixtures/db_definitions/mysql2.drop.sql +0 -2
  179. data/test/fixtures/db_definitions/mysql2.sql +0 -5
  180. data/test/fixtures/db_definitions/sqlserver.drop.sql +0 -34
  181. data/test/fixtures/db_definitions/sqlserver.sql +0 -243
  182. data/test/fixtures/db_definitions/sqlserver2.drop.sql +0 -2
  183. data/test/fixtures/db_definitions/sqlserver2.sql +0 -5
  184. data/test/fixtures/mixin.rb +0 -63
  185. data/test/mixin_nested_set_test.rb +0 -196
@@ -1,8 +1,7 @@
1
1
  require 'abstract_unit'
2
- require 'active_record/acts/tree'
3
- require 'active_record/acts/list'
4
- require 'active_record/acts/nested_set'
5
- require 'fixtures/mixin'
2
+
3
+ class Mixin < ActiveRecord::Base
4
+ end
6
5
 
7
6
  # Let us control what Time.now returns for the TouchTest suite
8
7
  class Time
@@ -21,354 +20,6 @@ class Time
21
20
  end
22
21
  end
23
22
 
24
- class ListTest < Test::Unit::TestCase
25
- fixtures :mixins
26
-
27
- def test_reordering
28
- assert_equal [mixins(:list_1),
29
- mixins(:list_2),
30
- mixins(:list_3),
31
- mixins(:list_4)],
32
- ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos')
33
-
34
- mixins(:list_2).move_lower
35
-
36
- assert_equal [mixins(:list_1),
37
- mixins(:list_3),
38
- mixins(:list_2),
39
- mixins(:list_4)],
40
- ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos')
41
-
42
- mixins(:list_2).move_higher
43
-
44
- assert_equal [mixins(:list_1),
45
- mixins(:list_2),
46
- mixins(:list_3),
47
- mixins(:list_4)],
48
- ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos')
49
-
50
- mixins(:list_1).move_to_bottom
51
-
52
- assert_equal [mixins(:list_2),
53
- mixins(:list_3),
54
- mixins(:list_4),
55
- mixins(:list_1)],
56
- ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos')
57
-
58
- mixins(:list_1).move_to_top
59
-
60
- assert_equal [mixins(:list_1),
61
- mixins(:list_2),
62
- mixins(:list_3),
63
- mixins(:list_4)],
64
- ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos')
65
-
66
-
67
- mixins(:list_2).move_to_bottom
68
-
69
- assert_equal [mixins(:list_1),
70
- mixins(:list_3),
71
- mixins(:list_4),
72
- mixins(:list_2)],
73
- ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos')
74
-
75
- mixins(:list_4).move_to_top
76
-
77
- assert_equal [mixins(:list_4),
78
- mixins(:list_1),
79
- mixins(:list_3),
80
- mixins(:list_2)],
81
- ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos')
82
-
83
- end
84
-
85
- def test_move_to_bottom_with_next_to_last_item
86
- assert_equal [mixins(:list_1),
87
- mixins(:list_2),
88
- mixins(:list_3),
89
- mixins(:list_4)],
90
- ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos')
91
-
92
- mixins(:list_3).move_to_bottom
93
-
94
- assert_equal [mixins(:list_1),
95
- mixins(:list_2),
96
- mixins(:list_4),
97
- mixins(:list_3)],
98
- ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos')
99
- end
100
-
101
- def test_next_prev
102
- assert_equal mixins(:list_2), mixins(:list_1).lower_item
103
- assert_nil mixins(:list_1).higher_item
104
- assert_equal mixins(:list_3), mixins(:list_4).higher_item
105
- assert_nil mixins(:list_4).lower_item
106
- end
107
-
108
-
109
- def test_injection
110
- item = ListMixin.new("parent_id"=>1)
111
- assert_equal "parent_id = 1", item.scope_condition
112
- assert_equal "pos", item.position_column
113
- end
114
-
115
- def test_insert
116
- new = ListMixin.create("parent_id"=>20)
117
- assert_equal 1, new.pos
118
- assert new.first?
119
- assert new.last?
120
-
121
- new = ListMixin.create("parent_id"=>20)
122
- assert_equal 2, new.pos
123
- assert !new.first?
124
- assert new.last?
125
-
126
- new = ListMixin.create("parent_id"=>20)
127
- assert_equal 3, new.pos
128
- assert !new.first?
129
- assert new.last?
130
-
131
- new = ListMixin.create("parent_id"=>0)
132
- assert_equal 1, new.pos
133
- assert new.first?
134
- assert new.last?
135
- end
136
-
137
- def test_insert_at
138
- new = ListMixin.create("parent_id" => 20)
139
- assert_equal 1, new.pos
140
-
141
- new = ListMixin.create("parent_id" => 20)
142
- assert_equal 2, new.pos
143
-
144
- new = ListMixin.create("parent_id" => 20)
145
- assert_equal 3, new.pos
146
-
147
- new4 = ListMixin.create("parent_id" => 20)
148
- assert_equal 4, new4.pos
149
-
150
- new4.insert_at(3)
151
- assert_equal 3, new4.pos
152
-
153
- new.reload
154
- assert_equal 4, new.pos
155
-
156
- new.insert_at(2)
157
- assert_equal 2, new.pos
158
-
159
- new4.reload
160
- assert_equal 4, new4.pos
161
-
162
- new5 = ListMixin.create("parent_id" => 20)
163
- assert_equal 5, new5.pos
164
-
165
- new5.insert_at(1)
166
- assert_equal 1, new5.pos
167
-
168
- new4.reload
169
- assert_equal 5, new4.pos
170
- end
171
-
172
- def test_delete_middle
173
- assert_equal [mixins(:list_1),
174
- mixins(:list_2),
175
- mixins(:list_3),
176
- mixins(:list_4)],
177
- ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos')
178
-
179
- mixins(:list_2).destroy
180
-
181
- assert_equal [mixins(:list_1, :reload),
182
- mixins(:list_3, :reload),
183
- mixins(:list_4, :reload)],
184
- ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos')
185
-
186
- assert_equal 1, mixins(:list_1).pos
187
- assert_equal 2, mixins(:list_3).pos
188
- assert_equal 3, mixins(:list_4).pos
189
-
190
- mixins(:list_1).destroy
191
-
192
- assert_equal [mixins(:list_3, :reload),
193
- mixins(:list_4, :reload)],
194
- ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos')
195
-
196
- assert_equal 1, mixins(:list_3).pos
197
- assert_equal 2, mixins(:list_4).pos
198
-
199
- end
200
-
201
- def test_with_string_based_scope
202
- new = ListWithStringScopeMixin.create("parent_id"=>500)
203
- assert_equal 1, new.pos
204
- assert new.first?
205
- assert new.last?
206
- end
207
-
208
- def test_nil_scope
209
- new1, new2, new3 = ListMixin.create, ListMixin.create, ListMixin.create
210
- new2.move_higher
211
- assert_equal [new2, new1, new3], ListMixin.find(:all, :conditions => 'parent_id IS NULL', :order => 'pos')
212
- end
213
-
214
- def test_remove_from_list_should_then_fail_in_list?
215
- assert_equal true, mixins(:list_1).in_list?
216
- mixins(:list_1).remove_from_list
217
- assert_equal false, mixins(:list_1).in_list?
218
- end
219
-
220
- def test_remove_from_list_should_set_position_to_nil
221
- assert_equal [mixins(:list_1),
222
- mixins(:list_2),
223
- mixins(:list_3),
224
- mixins(:list_4)],
225
- ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos')
226
-
227
- mixins(:list_2).remove_from_list
228
-
229
- assert_equal [mixins(:list_2, :reload),
230
- mixins(:list_1, :reload),
231
- mixins(:list_3, :reload),
232
- mixins(:list_4, :reload)],
233
- ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos')
234
-
235
- assert_equal 1, mixins(:list_1).pos
236
- assert_equal nil, mixins(:list_2).pos
237
- assert_equal 2, mixins(:list_3).pos
238
- assert_equal 3, mixins(:list_4).pos
239
- end
240
-
241
- def test_remove_before_destroy_does_not_shift_lower_items_twice
242
- assert_equal [mixins(:list_1),
243
- mixins(:list_2),
244
- mixins(:list_3),
245
- mixins(:list_4)],
246
- ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos')
247
-
248
- mixins(:list_2).remove_from_list
249
- mixins(:list_2).destroy
250
-
251
- assert_equal [mixins(:list_1, :reload),
252
- mixins(:list_3, :reload),
253
- mixins(:list_4, :reload)],
254
- ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos')
255
-
256
- assert_equal 1, mixins(:list_1).pos
257
- assert_equal 2, mixins(:list_3).pos
258
- assert_equal 3, mixins(:list_4).pos
259
- end
260
-
261
- end
262
-
263
- class TreeTest < Test::Unit::TestCase
264
- fixtures :mixins
265
-
266
- def test_has_child
267
- assert_deprecated 'has_children?' do
268
- assert_equal true, mixins(:tree_1).has_children?
269
- assert_equal true, mixins(:tree_2).has_children?
270
- assert_equal false, mixins(:tree_3).has_children?
271
- assert_equal false, mixins(:tree_4).has_children?
272
- end
273
- end
274
-
275
- def test_children
276
- assert_equal mixins(:tree_1).children, [mixins(:tree_2), mixins(:tree_4)]
277
- assert_equal mixins(:tree_2).children, [mixins(:tree_3)]
278
- assert_equal mixins(:tree_3).children, []
279
- assert_equal mixins(:tree_4).children, []
280
- end
281
-
282
- def test_has_parent
283
- assert_deprecated 'has_parent?' do
284
- assert_equal false, mixins(:tree_1).has_parent?
285
- assert_equal true, mixins(:tree_2).has_parent?
286
- assert_equal true, mixins(:tree_3).has_parent?
287
- assert_equal true, mixins(:tree_4).has_parent?
288
- end
289
- end
290
-
291
- def test_parent
292
- assert_equal mixins(:tree_2).parent, mixins(:tree_1)
293
- assert_equal mixins(:tree_2).parent, mixins(:tree_4).parent
294
- assert_nil mixins(:tree_1).parent
295
- end
296
-
297
- def test_delete
298
- assert_equal 6, TreeMixin.count
299
- mixins(:tree_1).destroy
300
- assert_equal 2, TreeMixin.count
301
- mixins(:tree2_1).destroy
302
- mixins(:tree3_1).destroy
303
- assert_equal 0, TreeMixin.count
304
- end
305
-
306
- def test_insert
307
- @extra = mixins(:tree_1).children.create
308
-
309
- assert @extra
310
-
311
- assert_equal @extra.parent, mixins(:tree_1)
312
-
313
- assert_equal 3, mixins(:tree_1).children.size
314
- assert mixins(:tree_1).children.include?(@extra)
315
- assert mixins(:tree_1).children.include?(mixins(:tree_2))
316
- assert mixins(:tree_1).children.include?(mixins(:tree_4))
317
- end
318
-
319
- def test_ancestors
320
- assert_equal [], mixins(:tree_1).ancestors
321
- assert_equal [mixins(:tree_1)], mixins(:tree_2).ancestors
322
- assert_equal [mixins(:tree_2), mixins(:tree_1)], mixins(:tree_3).ancestors
323
- assert_equal [mixins(:tree_1)], mixins(:tree_4).ancestors
324
- assert_equal [], mixins(:tree2_1).ancestors
325
- assert_equal [], mixins(:tree3_1).ancestors
326
- end
327
-
328
- def test_root
329
- assert_equal mixins(:tree_1), TreeMixin.root
330
- assert_equal mixins(:tree_1), mixins(:tree_1).root
331
- assert_equal mixins(:tree_1), mixins(:tree_2).root
332
- assert_equal mixins(:tree_1), mixins(:tree_3).root
333
- assert_equal mixins(:tree_1), mixins(:tree_4).root
334
- assert_equal mixins(:tree2_1), mixins(:tree2_1).root
335
- assert_equal mixins(:tree3_1), mixins(:tree3_1).root
336
- end
337
-
338
- def test_roots
339
- assert_equal [mixins(:tree_1), mixins(:tree2_1), mixins(:tree3_1)], TreeMixin.roots
340
- end
341
-
342
- def test_siblings
343
- assert_equal [mixins(:tree2_1), mixins(:tree3_1)], mixins(:tree_1).siblings
344
- assert_equal [mixins(:tree_4)], mixins(:tree_2).siblings
345
- assert_equal [], mixins(:tree_3).siblings
346
- assert_equal [mixins(:tree_2)], mixins(:tree_4).siblings
347
- assert_equal [mixins(:tree_1), mixins(:tree3_1)], mixins(:tree2_1).siblings
348
- assert_equal [mixins(:tree_1), mixins(:tree2_1)], mixins(:tree3_1).siblings
349
- end
350
-
351
- def test_self_and_siblings
352
- assert_equal [mixins(:tree_1), mixins(:tree2_1), mixins(:tree3_1)], mixins(:tree_1).self_and_siblings
353
- assert_equal [mixins(:tree_2), mixins(:tree_4)], mixins(:tree_2).self_and_siblings
354
- assert_equal [mixins(:tree_3)], mixins(:tree_3).self_and_siblings
355
- assert_equal [mixins(:tree_2), mixins(:tree_4)], mixins(:tree_4).self_and_siblings
356
- assert_equal [mixins(:tree_1), mixins(:tree2_1), mixins(:tree3_1)], mixins(:tree2_1).self_and_siblings
357
- assert_equal [mixins(:tree_1), mixins(:tree2_1), mixins(:tree3_1)], mixins(:tree3_1).self_and_siblings
358
- end
359
- end
360
-
361
- class TreeTestWithoutOrder < Test::Unit::TestCase
362
- fixtures :mixins
363
-
364
- def test_root
365
- assert [mixins(:tree_without_order_1), mixins(:tree_without_order_2)].include?(TreeMixinWithoutOrder.root)
366
- end
367
-
368
- def test_roots
369
- assert_equal [], [mixins(:tree_without_order_1), mixins(:tree_without_order_2)] - TreeMixinWithoutOrder.roots
370
- end
371
- end
372
23
 
373
24
  class TouchTest < Test::Unit::TestCase
374
25
  fixtures :mixins
@@ -427,171 +78,18 @@ class TouchTest < Test::Unit::TestCase
427
78
  def test_create_turned_off
428
79
  Mixin.record_timestamps = false
429
80
 
430
- assert_nil mixins(:tree_1).updated_at
431
- mixins(:tree_1).save
432
- assert_nil mixins(:tree_1).updated_at
433
-
434
- Mixin.record_timestamps = true
435
- end
436
-
437
- end
438
-
439
-
440
- class ListSubTest < Test::Unit::TestCase
441
- fixtures :mixins
442
-
443
- def test_reordering
444
- assert_equal [mixins(:list_sub_1),
445
- mixins(:list_sub_2),
446
- mixins(:list_sub_3),
447
- mixins(:list_sub_4)],
448
- ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos')
449
-
450
- mixins(:list_sub_2).move_lower
451
-
452
- assert_equal [mixins(:list_sub_1),
453
- mixins(:list_sub_3),
454
- mixins(:list_sub_2),
455
- mixins(:list_sub_4)],
456
- ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos')
457
-
458
- mixins(:list_sub_2).move_higher
459
-
460
- assert_equal [mixins(:list_sub_1),
461
- mixins(:list_sub_2),
462
- mixins(:list_sub_3),
463
- mixins(:list_sub_4)],
464
- ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos')
465
-
466
- mixins(:list_sub_1).move_to_bottom
81
+ mixin = Mixin.new
467
82
 
468
- assert_equal [mixins(:list_sub_2),
469
- mixins(:list_sub_3),
470
- mixins(:list_sub_4),
471
- mixins(:list_sub_1)],
472
- ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos')
473
-
474
- mixins(:list_sub_1).move_to_top
475
-
476
- assert_equal [mixins(:list_sub_1),
477
- mixins(:list_sub_2),
478
- mixins(:list_sub_3),
479
- mixins(:list_sub_4)],
480
- ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos')
481
-
482
-
483
- mixins(:list_sub_2).move_to_bottom
484
-
485
- assert_equal [mixins(:list_sub_1),
486
- mixins(:list_sub_3),
487
- mixins(:list_sub_4),
488
- mixins(:list_sub_2)],
489
- ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos')
490
-
491
- mixins(:list_sub_4).move_to_top
492
-
493
- assert_equal [mixins(:list_sub_4),
494
- mixins(:list_sub_1),
495
- mixins(:list_sub_3),
496
- mixins(:list_sub_2)],
497
- ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos')
498
-
499
- end
500
-
501
- def test_move_to_bottom_with_next_to_last_item
502
- assert_equal [mixins(:list_sub_1),
503
- mixins(:list_sub_2),
504
- mixins(:list_sub_3),
505
- mixins(:list_sub_4)],
506
- ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos')
507
-
508
- mixins(:list_sub_3).move_to_bottom
509
-
510
- assert_equal [mixins(:list_sub_1),
511
- mixins(:list_sub_2),
512
- mixins(:list_sub_4),
513
- mixins(:list_sub_3)],
514
- ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos')
515
- end
516
-
517
- def test_next_prev
518
- assert_equal mixins(:list_sub_2), mixins(:list_sub_1).lower_item
519
- assert_nil mixins(:list_sub_1).higher_item
520
- assert_equal mixins(:list_sub_3), mixins(:list_sub_4).higher_item
521
- assert_nil mixins(:list_sub_4).lower_item
522
- end
523
-
524
-
525
- def test_injection
526
- item = ListMixin.new("parent_id"=>1)
527
- assert_equal "parent_id = 1", item.scope_condition
528
- assert_equal "pos", item.position_column
529
- end
530
-
531
-
532
- def test_insert_at
533
- new = ListMixin.create("parent_id" => 20)
534
- assert_equal 1, new.pos
535
-
536
- new = ListMixinSub1.create("parent_id" => 20)
537
- assert_equal 2, new.pos
538
-
539
- new = ListMixinSub2.create("parent_id" => 20)
540
- assert_equal 3, new.pos
541
-
542
- new4 = ListMixin.create("parent_id" => 20)
543
- assert_equal 4, new4.pos
544
-
545
- new4.insert_at(3)
546
- assert_equal 3, new4.pos
547
-
548
- new.reload
549
- assert_equal 4, new.pos
550
-
551
- new.insert_at(2)
552
- assert_equal 2, new.pos
553
-
554
- new4.reload
555
- assert_equal 4, new4.pos
556
-
557
- new5 = ListMixinSub1.create("parent_id" => 20)
558
- assert_equal 5, new5.pos
559
-
560
- new5.insert_at(1)
561
- assert_equal 1, new5.pos
562
-
563
- new4.reload
564
- assert_equal 5, new4.pos
565
- end
566
-
567
- def test_delete_middle
568
- assert_equal [mixins(:list_sub_1),
569
- mixins(:list_sub_2),
570
- mixins(:list_sub_3),
571
- mixins(:list_sub_4)],
572
- ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos')
573
-
574
- mixins(:list_sub_2).destroy
575
-
576
- assert_equal [mixins(:list_sub_1, :reload),
577
- mixins(:list_sub_3, :reload),
578
- mixins(:list_sub_4, :reload)],
579
- ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos')
580
-
581
- assert_equal 1, mixins(:list_sub_1).pos
582
- assert_equal 2, mixins(:list_sub_3).pos
583
- assert_equal 3, mixins(:list_sub_4).pos
584
-
585
- mixins(:list_sub_1).destroy
586
-
587
- assert_equal [mixins(:list_sub_3, :reload),
588
- mixins(:list_sub_4, :reload)],
589
- ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos')
590
-
591
- assert_equal 1, mixins(:list_sub_3).pos
592
- assert_equal 2, mixins(:list_sub_4).pos
83
+ assert_nil mixin.updated_at
84
+ mixin.save
85
+ assert_nil mixin.updated_at
593
86
 
87
+ # Make sure Mixin.record_timestamps gets reset, even if this test fails,
88
+ # so that other tests do not fail because Mixin.record_timestamps == false
89
+ rescue Exception => e
90
+ raise e
91
+ ensure
92
+ Mixin.record_timestamps = true
594
93
  end
595
94
 
596
95
  end
597
-