2004-12-14 19:46:26 -05:00
|
|
|
require 'abstract_unit'
|
2004-12-16 11:23:59 -05:00
|
|
|
require 'active_record/acts/tree'
|
2005-04-17 05:52:12 -04:00
|
|
|
require 'active_record/acts/nested_set'
|
2004-12-14 19:46:26 -05:00
|
|
|
require 'fixtures/mixin'
|
|
|
|
|
2006-09-13 20:50:42 -04:00
|
|
|
# Let us control what Time.now returns for the TouchTest suite
|
|
|
|
class Time
|
|
|
|
@@forced_now_time = nil
|
|
|
|
cattr_accessor :forced_now_time
|
|
|
|
|
|
|
|
class << self
|
|
|
|
def now_with_forcing
|
|
|
|
if @@forced_now_time
|
|
|
|
@@forced_now_time
|
|
|
|
else
|
|
|
|
now_without_forcing
|
|
|
|
end
|
|
|
|
end
|
|
|
|
alias_method_chain :now, :forcing
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2004-12-15 21:49:18 -05:00
|
|
|
|
2004-12-14 19:46:26 -05:00
|
|
|
class TreeTest < Test::Unit::TestCase
|
|
|
|
fixtures :mixins
|
2005-11-10 01:24:33 -05:00
|
|
|
|
2004-12-14 19:46:26 -05:00
|
|
|
def test_children
|
2007-06-22 13:36:20 -04:00
|
|
|
assert_equal mixins(:tree_1).children, mixins(:tree_2, :tree_4)
|
2005-06-10 10:58:02 -04:00
|
|
|
assert_equal mixins(:tree_2).children, [mixins(:tree_3)]
|
|
|
|
assert_equal mixins(:tree_3).children, []
|
|
|
|
assert_equal mixins(:tree_4).children, []
|
2004-12-14 19:46:26 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_parent
|
2005-06-10 10:58:02 -04:00
|
|
|
assert_equal mixins(:tree_2).parent, mixins(:tree_1)
|
|
|
|
assert_equal mixins(:tree_2).parent, mixins(:tree_4).parent
|
|
|
|
assert_nil mixins(:tree_1).parent
|
2004-12-19 08:01:47 -05:00
|
|
|
end
|
2005-11-10 01:24:33 -05:00
|
|
|
|
2004-12-19 08:01:47 -05:00
|
|
|
def test_delete
|
2005-09-09 04:01:44 -04:00
|
|
|
assert_equal 6, TreeMixin.count
|
2005-06-10 10:58:02 -04:00
|
|
|
mixins(:tree_1).destroy
|
2005-09-09 04:01:44 -04:00
|
|
|
assert_equal 2, TreeMixin.count
|
|
|
|
mixins(:tree2_1).destroy
|
|
|
|
mixins(:tree3_1).destroy
|
2004-12-19 08:01:47 -05:00
|
|
|
assert_equal 0, TreeMixin.count
|
2004-12-14 19:46:26 -05:00
|
|
|
end
|
2005-09-09 04:01:44 -04:00
|
|
|
|
2004-12-14 19:46:26 -05:00
|
|
|
def test_insert
|
2005-06-10 10:58:02 -04:00
|
|
|
@extra = mixins(:tree_1).children.create
|
2005-11-10 01:24:33 -05:00
|
|
|
|
2004-12-14 19:46:26 -05:00
|
|
|
assert @extra
|
2005-11-10 01:24:33 -05:00
|
|
|
|
2005-06-10 10:58:02 -04:00
|
|
|
assert_equal @extra.parent, mixins(:tree_1)
|
2004-12-22 09:14:45 -05:00
|
|
|
|
2005-06-10 10:58:02 -04:00
|
|
|
assert_equal 3, mixins(:tree_1).children.size
|
|
|
|
assert mixins(:tree_1).children.include?(@extra)
|
|
|
|
assert mixins(:tree_1).children.include?(mixins(:tree_2))
|
|
|
|
assert mixins(:tree_1).children.include?(mixins(:tree_4))
|
2004-12-14 19:46:26 -05:00
|
|
|
end
|
2004-12-19 08:01:47 -05:00
|
|
|
|
2005-09-11 02:25:17 -04:00
|
|
|
def test_ancestors
|
|
|
|
assert_equal [], mixins(:tree_1).ancestors
|
|
|
|
assert_equal [mixins(:tree_1)], mixins(:tree_2).ancestors
|
2007-06-22 13:36:20 -04:00
|
|
|
assert_equal mixins(:tree_2, :tree_1), mixins(:tree_3).ancestors
|
2005-09-11 02:25:17 -04:00
|
|
|
assert_equal [mixins(:tree_1)], mixins(:tree_4).ancestors
|
|
|
|
assert_equal [], mixins(:tree2_1).ancestors
|
|
|
|
assert_equal [], mixins(:tree3_1).ancestors
|
|
|
|
end
|
2005-11-10 01:24:33 -05:00
|
|
|
|
2005-09-09 04:01:44 -04:00
|
|
|
def test_root
|
|
|
|
assert_equal mixins(:tree_1), TreeMixin.root
|
2005-09-11 02:25:17 -04:00
|
|
|
assert_equal mixins(:tree_1), mixins(:tree_1).root
|
|
|
|
assert_equal mixins(:tree_1), mixins(:tree_2).root
|
|
|
|
assert_equal mixins(:tree_1), mixins(:tree_3).root
|
|
|
|
assert_equal mixins(:tree_1), mixins(:tree_4).root
|
|
|
|
assert_equal mixins(:tree2_1), mixins(:tree2_1).root
|
|
|
|
assert_equal mixins(:tree3_1), mixins(:tree3_1).root
|
2005-11-10 01:24:33 -05:00
|
|
|
end
|
2005-09-09 04:01:44 -04:00
|
|
|
|
|
|
|
def test_roots
|
2007-06-22 13:36:20 -04:00
|
|
|
assert_equal mixins(:tree_1, :tree2_1, :tree3_1), TreeMixin.roots
|
2005-09-09 04:01:44 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_siblings
|
2007-06-22 13:36:20 -04:00
|
|
|
assert_equal mixins(:tree2_1, :tree3_1), mixins(:tree_1).siblings
|
2005-09-09 04:01:44 -04:00
|
|
|
assert_equal [mixins(:tree_4)], mixins(:tree_2).siblings
|
|
|
|
assert_equal [], mixins(:tree_3).siblings
|
|
|
|
assert_equal [mixins(:tree_2)], mixins(:tree_4).siblings
|
2007-06-22 13:36:20 -04:00
|
|
|
assert_equal mixins(:tree_1, :tree3_1), mixins(:tree2_1).siblings
|
|
|
|
assert_equal mixins(:tree_1, :tree2_1), mixins(:tree3_1).siblings
|
2005-09-09 04:01:44 -04:00
|
|
|
end
|
2005-10-09 14:51:30 -04:00
|
|
|
|
|
|
|
def test_self_and_siblings
|
2007-06-22 13:36:20 -04:00
|
|
|
assert_equal mixins(:tree_1, :tree2_1, :tree3_1), mixins(:tree_1).self_and_siblings
|
|
|
|
assert_equal mixins(:tree_2, :tree_4), mixins(:tree_2).self_and_siblings
|
2005-10-09 14:51:30 -04:00
|
|
|
assert_equal [mixins(:tree_3)], mixins(:tree_3).self_and_siblings
|
2007-06-22 13:36:20 -04:00
|
|
|
assert_equal mixins(:tree_2, :tree_4), mixins(:tree_4).self_and_siblings
|
|
|
|
assert_equal mixins(:tree_1, :tree2_1, :tree3_1), mixins(:tree2_1).self_and_siblings
|
|
|
|
assert_equal mixins(:tree_1, :tree2_1, :tree3_1), mixins(:tree3_1).self_and_siblings
|
2005-10-09 14:51:30 -04:00
|
|
|
end
|
2004-12-14 19:46:26 -05:00
|
|
|
end
|
|
|
|
|
2005-11-09 07:50:35 -05:00
|
|
|
class TreeTestWithoutOrder < Test::Unit::TestCase
|
|
|
|
fixtures :mixins
|
2005-11-10 01:24:33 -05:00
|
|
|
|
2005-11-09 07:50:35 -05:00
|
|
|
def test_root
|
2007-06-22 13:36:20 -04:00
|
|
|
assert mixins(:tree_without_order_1, :tree_without_order_2).include?(TreeMixinWithoutOrder.root)
|
2005-11-10 01:24:33 -05:00
|
|
|
end
|
2005-11-09 07:50:35 -05:00
|
|
|
|
|
|
|
def test_roots
|
2007-06-22 13:36:20 -04:00
|
|
|
assert_equal [], mixins(:tree_without_order_1, :tree_without_order_2) - TreeMixinWithoutOrder.roots
|
2005-11-09 07:50:35 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2004-12-14 19:46:26 -05:00
|
|
|
class TouchTest < Test::Unit::TestCase
|
|
|
|
fixtures :mixins
|
2006-09-13 20:50:42 -04:00
|
|
|
|
|
|
|
def setup
|
|
|
|
Time.forced_now_time = Time.now
|
|
|
|
end
|
|
|
|
|
|
|
|
def teardown
|
|
|
|
Time.forced_now_time = nil
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_time_mocking
|
|
|
|
five_minutes_ago = 5.minutes.ago
|
|
|
|
Time.forced_now_time = five_minutes_ago
|
|
|
|
assert_equal five_minutes_ago, Time.now
|
|
|
|
|
|
|
|
Time.forced_now_time = nil
|
|
|
|
assert_not_equal five_minutes_ago, Time.now
|
|
|
|
end
|
2005-11-10 01:24:33 -05:00
|
|
|
|
2004-12-14 19:46:26 -05:00
|
|
|
def test_update
|
2005-11-10 01:24:33 -05:00
|
|
|
stamped = Mixin.new
|
|
|
|
|
2004-12-19 08:01:47 -05:00
|
|
|
assert_nil stamped.updated_at
|
|
|
|
assert_nil stamped.created_at
|
|
|
|
stamped.save
|
2006-09-13 20:50:42 -04:00
|
|
|
assert_equal Time.now, stamped.updated_at
|
|
|
|
assert_equal Time.now, stamped.created_at
|
2005-11-10 01:24:33 -05:00
|
|
|
end
|
2004-12-14 19:46:26 -05:00
|
|
|
|
|
|
|
def test_create
|
2006-09-13 20:50:42 -04:00
|
|
|
obj = Mixin.create
|
|
|
|
assert_equal Time.now, obj.updated_at
|
|
|
|
assert_equal Time.now, obj.created_at
|
2005-11-10 01:24:33 -05:00
|
|
|
end
|
2004-12-19 08:01:47 -05:00
|
|
|
|
|
|
|
def test_many_updates
|
2005-11-10 01:24:33 -05:00
|
|
|
stamped = Mixin.new
|
2004-12-19 08:01:47 -05:00
|
|
|
|
|
|
|
assert_nil stamped.updated_at
|
|
|
|
assert_nil stamped.created_at
|
|
|
|
stamped.save
|
2006-09-13 20:50:42 -04:00
|
|
|
assert_equal Time.now, stamped.created_at
|
|
|
|
assert_equal Time.now, stamped.updated_at
|
2005-11-10 01:24:33 -05:00
|
|
|
|
2004-12-19 08:01:47 -05:00
|
|
|
old_updated_at = stamped.updated_at
|
|
|
|
|
2006-09-13 20:50:42 -04:00
|
|
|
Time.forced_now_time = 5.minutes.from_now
|
2005-11-10 01:24:33 -05:00
|
|
|
stamped.save
|
2004-12-19 08:01:47 -05:00
|
|
|
|
2006-09-13 20:50:42 -04:00
|
|
|
assert_equal Time.now, stamped.updated_at
|
|
|
|
assert_equal old_updated_at, stamped.created_at
|
2004-12-19 08:01:47 -05:00
|
|
|
end
|
|
|
|
|
2004-12-16 10:21:16 -05:00
|
|
|
def test_create_turned_off
|
|
|
|
Mixin.record_timestamps = false
|
|
|
|
|
2005-06-10 10:58:02 -04:00
|
|
|
assert_nil mixins(:tree_1).updated_at
|
|
|
|
mixins(:tree_1).save
|
|
|
|
assert_nil mixins(:tree_1).updated_at
|
2004-12-16 10:21:16 -05:00
|
|
|
|
|
|
|
Mixin.record_timestamps = true
|
|
|
|
end
|
2005-09-09 04:32:47 -04:00
|
|
|
|
2004-12-14 19:46:26 -05:00
|
|
|
end
|
2005-11-10 01:19:50 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|