From 3ab1cb6a6a1ea0bde8ef35d02370248396753c7a Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Thu, 14 Sep 2006 00:50:42 +0000 Subject: [PATCH] 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/CHANGELOG | 2 ++ activerecord/test/mixin_test.rb | 54 +++++++++++++++++++++++++++------ 2 files changed, 46 insertions(+), 10 deletions(-) diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG index 97573e272f..a30105605d 100644 --- a/activerecord/CHANGELOG +++ b/activerecord/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Mock Time.now for more accurate Touch mixin tests. #6213 [Dan Peterson] + * Improve yaml fixtures error reporting. #6205 [Bruce Williams] * Rename AR::Base#quote so people can use that name in their models. #3628 [Koz] 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/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 @@ def test_roots 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 @@ def test_update 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 @@ def test_many_updates 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