139 lines
3.1 KiB
Ruby
139 lines
3.1 KiB
Ruby
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_injection
|
|
l = ListMixin.new("parent_id"=>1)
|
|
assert_equal "parent_id = 1", l.scope_condition
|
|
assert_equal "pos", l.position_column
|
|
|
|
end
|
|
|
|
def test_reordering
|
|
|
|
assert_equal [ListMixin.find(2), ListMixin.find(3)], ListMixin.find_all("parent_id=1", "pos")
|
|
|
|
ListMixin.find(2).move_lower
|
|
|
|
assert_equal [ListMixin.find(3), ListMixin.find(2)], ListMixin.find_all("parent_id=1", "pos")
|
|
|
|
ListMixin.find(2).move_higher
|
|
|
|
assert_equal [ListMixin.find(2), ListMixin.find(3)], ListMixin.find_all("parent_id=1", "pos")
|
|
|
|
end
|
|
|
|
def test_insert
|
|
new = ListMixin.create("parent_id"=>5)
|
|
assert_equal 1, new.pos
|
|
assert new.first?
|
|
assert new.last?
|
|
|
|
new = ListMixin.create("parent_id"=>5)
|
|
assert_equal 2, new.pos
|
|
assert !new.first?
|
|
assert new.last?
|
|
|
|
new = ListMixin.create("parent_id"=>5)
|
|
assert_equal 3, new.pos
|
|
assert !new.first?
|
|
assert new.last?
|
|
|
|
new = ListMixin.create("parent_id"=>10)
|
|
assert_equal 1, new.pos
|
|
assert new.first?
|
|
assert new.last?
|
|
end
|
|
|
|
def test_delete_middle
|
|
first = ListMixin.create("parent_id"=>5)
|
|
assert_equal 1, first.pos
|
|
|
|
second = ListMixin.create("parent_id"=>5)
|
|
assert_equal 2, second.pos
|
|
|
|
third = ListMixin.create("parent_id"=>5)
|
|
assert_equal 3, third.pos
|
|
|
|
second.destroy
|
|
|
|
assert_equal 1, @mixins["first"].find.pos
|
|
assert_equal 2, @mixins["third"].find.pos
|
|
|
|
end
|
|
|
|
def test_with_string_based_scope
|
|
new = ListWithStringScopeMixin.create("parent_id"=>5)
|
|
assert_equal 1, new.pos
|
|
assert new.first?
|
|
assert new.last?
|
|
end
|
|
end
|
|
|
|
class TreeTest < Test::Unit::TestCase
|
|
fixtures :mixins
|
|
|
|
def test_has_child
|
|
assert_equal true, @first.has_children?
|
|
assert_equal false, @second.has_children?
|
|
assert_equal false, @third.has_children?
|
|
end
|
|
|
|
def test_children
|
|
assert_equal @first.children, [@second, @third]
|
|
assert_equal @second.children, []
|
|
end
|
|
|
|
def test_parent
|
|
assert_equal @second.parent, @first
|
|
assert_equal @second.parent, @third.parent
|
|
assert_nil @first.parent
|
|
end
|
|
|
|
def test_insert
|
|
@extra = @first.children.create
|
|
|
|
assert @extra
|
|
|
|
assert_equal @extra.parent, @first
|
|
assert_equal [@second, @third, @extra], @first.children
|
|
end
|
|
|
|
def test_delete
|
|
assert_equal 3, Mixin.count
|
|
@first.destroy
|
|
assert_equal 0, Mixin.count
|
|
end
|
|
end
|
|
|
|
class TouchTest < Test::Unit::TestCase
|
|
fixtures :mixins
|
|
|
|
def test_update
|
|
assert_nil @first.updated_at
|
|
@first.save
|
|
assert_not_nil @first.updated_at
|
|
end
|
|
|
|
def test_create
|
|
@obj = Mixin.create({"parent" => @third})
|
|
assert_not_nil @obj.updated_at
|
|
assert_not_nil @obj.created_at
|
|
end
|
|
|
|
def test_create_turned_off
|
|
Mixin.record_timestamps = false
|
|
|
|
assert_nil @first.updated_at
|
|
@first.save
|
|
assert_nil @first.updated_at
|
|
|
|
Mixin.record_timestamps = true
|
|
end
|
|
end
|