rails/activerecord/test/mixin_test.rb

185 lines
5.0 KiB
Ruby
Raw Normal View History

require 'abstract_unit'
require 'active_record/acts/tree'
require 'active_record/acts/nested_set'
require 'fixtures/mixin'
# 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
class TreeTest < Test::Unit::TestCase
fixtures :mixins
def test_children
assert_equal mixins(:tree_1).children, mixins(:tree_2, :tree_4)
assert_equal mixins(:tree_2).children, [mixins(:tree_3)]
assert_equal mixins(:tree_3).children, []
assert_equal mixins(:tree_4).children, []
end
def test_parent
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
end
def test_delete
assert_equal 6, TreeMixin.count
mixins(:tree_1).destroy
assert_equal 2, TreeMixin.count
mixins(:tree2_1).destroy
mixins(:tree3_1).destroy
assert_equal 0, TreeMixin.count
end
def test_insert
@extra = mixins(:tree_1).children.create
assert @extra
assert_equal @extra.parent, mixins(:tree_1)
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))
end
def test_ancestors
assert_equal [], mixins(:tree_1).ancestors
assert_equal [mixins(:tree_1)], mixins(:tree_2).ancestors
assert_equal mixins(:tree_2, :tree_1), mixins(:tree_3).ancestors
assert_equal [mixins(:tree_1)], mixins(:tree_4).ancestors
assert_equal [], mixins(:tree2_1).ancestors
assert_equal [], mixins(:tree3_1).ancestors
end
def test_root
assert_equal mixins(:tree_1), TreeMixin.root
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
end
def test_roots
assert_equal mixins(:tree_1, :tree2_1, :tree3_1), TreeMixin.roots
end
def test_siblings
assert_equal mixins(:tree2_1, :tree3_1), mixins(:tree_1).siblings
assert_equal [mixins(:tree_4)], mixins(:tree_2).siblings
assert_equal [], mixins(:tree_3).siblings
assert_equal [mixins(:tree_2)], mixins(:tree_4).siblings
assert_equal mixins(:tree_1, :tree3_1), mixins(:tree2_1).siblings
assert_equal mixins(:tree_1, :tree2_1), mixins(:tree3_1).siblings
end
def test_self_and_siblings
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
assert_equal [mixins(:tree_3)], mixins(:tree_3).self_and_siblings
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
end
end
class TreeTestWithoutOrder < Test::Unit::TestCase
fixtures :mixins
def test_root
assert mixins(:tree_without_order_1, :tree_without_order_2).include?(TreeMixinWithoutOrder.root)
end
def test_roots
assert_equal [], mixins(:tree_without_order_1, :tree_without_order_2) - TreeMixinWithoutOrder.roots
end
end
class TouchTest < Test::Unit::TestCase
fixtures :mixins
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
def test_update
stamped = Mixin.new
assert_nil stamped.updated_at
assert_nil stamped.created_at
stamped.save
assert_equal Time.now, stamped.updated_at
assert_equal Time.now, stamped.created_at
end
def test_create
obj = Mixin.create
assert_equal Time.now, obj.updated_at
assert_equal Time.now, obj.created_at
end
def test_many_updates
stamped = Mixin.new
assert_nil stamped.updated_at
assert_nil stamped.created_at
stamped.save
assert_equal Time.now, stamped.created_at
assert_equal Time.now, stamped.updated_at
old_updated_at = stamped.updated_at
Time.forced_now_time = 5.minutes.from_now
stamped.save
assert_equal Time.now, stamped.updated_at
assert_equal old_updated_at, stamped.created_at
end
def test_create_turned_off
Mixin.record_timestamps = false
assert_nil mixins(:tree_1).updated_at
mixins(:tree_1).save
assert_nil mixins(:tree_1).updated_at
Mixin.record_timestamps = true
end
end