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
This commit is contained in:
parent
d54406271b
commit
3ab1cb6a6a
@ -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,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
|
||||
|
Loading…
Reference in New Issue
Block a user