aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/mixin_test.rb
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2005-11-10 06:19:50 +0000
committerJeremy Kemper <jeremy@bitsweat.net>2005-11-10 06:19:50 +0000
commitb84a7beb98a1bfe384e92d7c301db0ee30cbf1b6 (patch)
tree289ee3897ba72bd1cd45aaed9bac774e89d2ac4d /activerecord/test/mixin_test.rb
parentadba18106081f55f2e8761b5104d295cacd6a8c6 (diff)
downloadrails-b84a7beb98a1bfe384e92d7c301db0ee30cbf1b6.tar.gz
rails-b84a7beb98a1bfe384e92d7c301db0ee30cbf1b6.tar.bz2
rails-b84a7beb98a1bfe384e92d7c301db0ee30cbf1b6.zip
acts_as_list plays nicely with inheritance by remembering the class which declared it. Closes #2811.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2964 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activerecord/test/mixin_test.rb')
-rw-r--r--activerecord/test/mixin_test.rb163
1 files changed, 163 insertions, 0 deletions
diff --git a/activerecord/test/mixin_test.rb b/activerecord/test/mixin_test.rb
index 82b2a143fd..4a59b649dd 100644
--- a/activerecord/test/mixin_test.rb
+++ b/activerecord/test/mixin_test.rb
@@ -195,6 +195,7 @@ class ListTest < Test::Unit::TestCase
new2.move_higher
assert_equal [new2, new1, new3], ListMixin.find(:all, :conditions => 'parent_id IS NULL', :order => 'pos')
end
+
end
class TreeTest < Test::Unit::TestCase
@@ -353,3 +354,165 @@ class TouchTest < Test::Unit::TestCase
end
end
+
+
+class ListSubTest < Test::Unit::TestCase
+ fixtures :mixins
+
+ def test_reordering
+
+ assert_equal [mixins(:list_sub_1),
+ mixins(:list_sub_2),
+ mixins(:list_sub_3),
+ mixins(:list_sub_4)],
+ ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos')
+
+ mixins(:list_sub_2).move_lower
+
+ assert_equal [mixins(:list_sub_1),
+ mixins(:list_sub_3),
+ mixins(:list_sub_2),
+ mixins(:list_sub_4)],
+ ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos')
+
+ mixins(:list_sub_2).move_higher
+
+ assert_equal [mixins(:list_sub_1),
+ mixins(:list_sub_2),
+ mixins(:list_sub_3),
+ mixins(:list_sub_4)],
+ ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos')
+
+ mixins(:list_sub_1).move_to_bottom
+
+ assert_equal [mixins(:list_sub_2),
+ mixins(:list_sub_3),
+ mixins(:list_sub_4),
+ mixins(:list_sub_1)],
+ ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos')
+
+ mixins(:list_sub_1).move_to_top
+
+ assert_equal [mixins(:list_sub_1),
+ mixins(:list_sub_2),
+ mixins(:list_sub_3),
+ mixins(:list_sub_4)],
+ ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos')
+
+
+ mixins(:list_sub_2).move_to_bottom
+
+ assert_equal [mixins(:list_sub_1),
+ mixins(:list_sub_3),
+ mixins(:list_sub_4),
+ mixins(:list_sub_2)],
+ ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos')
+
+ mixins(:list_sub_4).move_to_top
+
+ assert_equal [mixins(:list_sub_4),
+ mixins(:list_sub_1),
+ mixins(:list_sub_3),
+ mixins(:list_sub_2)],
+ ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos')
+
+ end
+
+ def test_move_to_bottom_with_next_to_last_item
+ assert_equal [mixins(:list_sub_1),
+ mixins(:list_sub_2),
+ mixins(:list_sub_3),
+ mixins(:list_sub_4)],
+ ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos')
+
+ mixins(:list_sub_3).move_to_bottom
+
+ assert_equal [mixins(:list_sub_1),
+ mixins(:list_sub_2),
+ mixins(:list_sub_4),
+ mixins(:list_sub_3)],
+ ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos')
+ end
+
+ def test_next_prev
+ assert_equal mixins(:list_sub_2), mixins(:list_sub_1).lower_item
+ assert_nil mixins(:list_sub_1).higher_item
+ assert_equal mixins(:list_sub_3), mixins(:list_sub_4).higher_item
+ assert_nil mixins(:list_sub_4).lower_item
+ end
+
+
+ def test_injection
+ item = ListMixin.new("parent_id"=>1)
+ assert_equal "parent_id = 1", item.scope_condition
+ assert_equal "pos", item.position_column
+ end
+
+
+ def test_insert_at
+ new = ListMixin.create("parent_id" => 20)
+ assert_equal 1, new.pos
+
+ new = ListMixinSub1.create("parent_id" => 20)
+ assert_equal 2, new.pos
+
+ new = ListMixinSub2.create("parent_id" => 20)
+ assert_equal 3, new.pos
+
+ new4 = ListMixin.create("parent_id" => 20)
+ assert_equal 4, new4.pos
+
+ new4.insert_at(3)
+ assert_equal 3, new4.pos
+
+ new.reload
+ assert_equal 4, new.pos
+
+ new.insert_at(2)
+ assert_equal 2, new.pos
+
+ new4.reload
+ assert_equal 4, new4.pos
+
+ new5 = ListMixinSub1.create("parent_id" => 20)
+ assert_equal 5, new5.pos
+
+ new5.insert_at(1)
+ assert_equal 1, new5.pos
+
+ new4.reload
+ assert_equal 5, new4.pos
+ end
+
+ def test_delete_middle
+
+ assert_equal [mixins(:list_sub_1),
+ mixins(:list_sub_2),
+ mixins(:list_sub_3),
+ mixins(:list_sub_4)],
+ ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos')
+
+ mixins(:list_sub_2).destroy
+
+ assert_equal [mixins(:list_sub_1, :reload),
+ mixins(:list_sub_3, :reload),
+ mixins(:list_sub_4, :reload)],
+ ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos')
+
+ assert_equal 1, mixins(:list_sub_1).pos
+ assert_equal 2, mixins(:list_sub_3).pos
+ assert_equal 3, mixins(:list_sub_4).pos
+
+ mixins(:list_sub_1).destroy
+
+ assert_equal [mixins(:list_sub_3, :reload),
+ mixins(:list_sub_4, :reload)],
+ ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos')
+
+ assert_equal 1, mixins(:list_sub_3).pos
+ assert_equal 2, mixins(:list_sub_4).pos
+
+ end
+
+end
+