Permalink
Browse files

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
  • Loading branch information...
1 parent d544062 commit 3ab1cb6a6a1ea0bde8ef35d02370248396753c7a @jeremy jeremy committed Sep 14, 2006
Showing with 46 additions and 10 deletions.
  1. +2 −0 activerecord/CHANGELOG
  2. +44 −10 activerecord/test/mixin_test.rb
View
@@ -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]
@@ -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,21 +321,38 @@ 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
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

0 comments on commit 3ab1cb6

Please sign in to comment.