require 'abstract_unit' require 'active_record/acts/tree' require 'active_record/acts/list' require 'fixtures/mixin' class ListTest < Test::Unit::TestCase fixtures :mixins def test_reordering assert_equal [@mixins['list_1'].find, @mixins['list_2'].find, @mixins['list_3'].find, @mixins['list_4'].find], ListMixin.find_all("parent_id=5", "pos") @mixins['list_2'].find.move_lower assert_equal [@mixins['list_1'].find, @mixins['list_3'].find, @mixins['list_2'].find, @mixins['list_4'].find], ListMixin.find_all("parent_id=5", "pos") @mixins['list_2'].find.move_higher assert_equal [@mixins['list_1'].find, @mixins['list_2'].find, @mixins['list_3'].find, @mixins['list_4'].find], ListMixin.find_all("parent_id=5", "pos") @mixins['list_1'].find.move_to_bottom assert_equal [@mixins['list_2'].find, @mixins['list_3'].find, @mixins['list_4'].find, @mixins['list_1'].find], ListMixin.find_all("parent_id=5", "pos") @mixins['list_1'].find.move_to_top assert_equal [@mixins['list_1'].find, @mixins['list_2'].find, @mixins['list_3'].find, @mixins['list_4'].find], ListMixin.find_all("parent_id=5", "pos") @mixins['list_2'].find.move_to_bottom assert_equal [@mixins['list_1'].find, @mixins['list_3'].find, @mixins['list_4'].find, @mixins['list_2'].find], ListMixin.find_all("parent_id=5", "pos") @mixins['list_4'].find.move_to_top assert_equal [@mixins['list_4'].find, @mixins['list_1'].find, @mixins['list_3'].find, @mixins['list_2'].find], ListMixin.find_all("parent_id=5", "pos") end def test_next_prev assert_equal @list_2, @list_1.lower_item assert_nil @list_1.higher_item assert_equal @list_3, @list_4.higher_item assert_nil @list_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 new = ListMixin.create("parent_id"=>20) assert_equal 1, new.pos assert new.first? assert new.last? new = ListMixin.create("parent_id"=>20) assert_equal 2, new.pos assert !new.first? assert new.last? new = ListMixin.create("parent_id"=>20) assert_equal 3, new.pos assert !new.first? assert new.last? new = ListMixin.create("parent_id"=>0) assert_equal 1, new.pos assert new.first? assert new.last? end def test_delete_middle assert_equal [@mixins['list_1'].find, @mixins['list_2'].find, @mixins['list_3'].find, @mixins['list_4'].find], ListMixin.find_all("parent_id=5", "pos") @mixins['list_2'].find.destroy assert_equal [@mixins['list_1'].find, @mixins['list_3'].find, @mixins['list_4'].find], ListMixin.find_all("parent_id=5", "pos") assert_equal 1, @mixins['list_1'].find.pos assert_equal 2, @mixins['list_3'].find.pos assert_equal 3, @mixins['list_4'].find.pos @mixins['list_1'].find.destroy assert_equal [@mixins['list_3'].find, @mixins['list_4'].find], ListMixin.find_all("parent_id=5", "pos") assert_equal 1, @mixins['list_3'].find.pos assert_equal 2, @mixins['list_4'].find.pos end def test_with_string_based_scope new = ListWithStringScopeMixin.create("parent_id"=>500) assert_equal 1, new.pos assert new.first? assert new.last? end def test_nil_scope new1, new2, new3 = ListMixin.create, ListMixin.create, ListMixin.create new2.move_higher assert_equal [new2, new1, new3], ListMixin.find_all("parent_id IS NULL", "pos") end end class TreeTest < Test::Unit::TestCase fixtures :mixins def test_has_child assert_equal true, @tree_1.has_children? assert_equal true, @tree_2.has_children? assert_equal false, @tree_3.has_children? assert_equal false, @tree_4.has_children? end def test_children assert_equal @tree_1.children, [@tree_2, @tree_4] assert_equal @tree_2.children, [@tree_3] assert_equal @tree_3.children, [] assert_equal @tree_4.children, [] end def test_parent assert_equal @tree_2.parent, @tree_1 assert_equal @tree_2.parent, @tree_4.parent assert_nil @tree_1.parent end def test_delete assert_equal 4, TreeMixin.count @tree_1.destroy assert_equal 0, TreeMixin.count end def test_insert @extra = @tree_1.children.create assert @extra assert_equal @extra.parent, @tree_1 assert_equal 3, @tree_1.children.size assert @tree_1.children.include?(@extra) assert @tree_1.children.include?(@tree_2) assert @tree_1.children.include?(@tree_4) end end class TouchTest < Test::Unit::TestCase fixtures :mixins def test_update stamped = Mixin.new assert_nil stamped.updated_at assert_nil stamped.created_at stamped.save assert_not_nil stamped.updated_at assert_not_nil stamped.created_at end def test_create @obj = Mixin.create assert_not_nil @obj.updated_at assert_not_nil @obj.created_at end def test_many_updates stamped = Mixin.new assert_nil stamped.updated_at assert_nil stamped.created_at stamped.save assert_not_nil stamped.created_at assert_not_nil stamped.updated_at old_updated_at = stamped.updated_at sleep 1 stamped.save assert_not_equal stamped.created_at, stamped.updated_at assert_not_equal old_updated_at, stamped.updated_at end def test_create_turned_off Mixin.record_timestamps = false assert_nil @tree_1.updated_at @tree_1.save assert_nil @tree_1.updated_at Mixin.record_timestamps = true end end