From 3ab1cb6a6a1ea0bde8ef35d02370248396753c7a Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Thu, 14 Sep 2006 00:50:42 +0000 Subject: Mock Time.now for more accurate Touch mixin tests. Closes #6213. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@5106 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activerecord/test/mixin_test.rb | 54 +++++++++++++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 10 deletions(-) (limited to 'activerecord/test') diff --git a/activerecord/test/mixin_test.rb b/activerecord/test/mixin_test.rb index 8ab73cfe7f..9318c3a1e1 100644 --- a/activerecord/test/mixin_test.rb +++ b/activerecord/test/mixin_test.rb @@ -4,6 +4,23 @@ require 'active_record/acts/list' 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 ListTest < Test::Unit::TestCase fixtures :mixins @@ -304,6 +321,23 @@ 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 @@ -311,14 +345,14 @@ class TouchTest < Test::Unit::TestCase assert_nil stamped.updated_at assert_nil stamped.created_at stamped.save - assert_not_nil stamped.updated_at - assert_not_nil stamped.created_at + assert_equal Time.now, stamped.updated_at + assert_equal Time.now, stamped.created_at end def test_create - @obj = Mixin.create - assert_not_nil @obj.updated_at - assert_not_nil @obj.created_at + obj = Mixin.create + assert_equal Time.now, obj.updated_at + assert_equal Time.now, obj.created_at end def test_many_updates @@ -327,16 +361,16 @@ class TouchTest < Test::Unit::TestCase assert_nil stamped.updated_at assert_nil stamped.created_at stamped.save - assert_not_nil stamped.created_at - assert_not_nil stamped.updated_at + assert_equal Time.now, stamped.created_at + assert_equal Time.now, stamped.updated_at old_updated_at = stamped.updated_at - sleep 1 + Time.forced_now_time = 5.minutes.from_now stamped.save - assert_not_equal stamped.created_at, stamped.updated_at - assert_not_equal old_updated_at, stamped.updated_at + assert_equal Time.now, stamped.updated_at + assert_equal old_updated_at, stamped.created_at end def test_create_turned_off -- cgit v1.2.3