aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases/mixin_test.rb
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2008-01-18 07:30:42 +0000
committerJeremy Kemper <jeremy@bitsweat.net>2008-01-18 07:30:42 +0000
commit42b39ae3f2991692672364d7e09b1e4002e66261 (patch)
treecddaf1eb2dbf7be27430bde882432db3b1cc0407 /activerecord/test/cases/mixin_test.rb
parent105a27f39ee9dbfd7fdb2b25e5ba38b00708b66c (diff)
downloadrails-42b39ae3f2991692672364d7e09b1e4002e66261.tar.gz
rails-42b39ae3f2991692672364d7e09b1e4002e66261.tar.bz2
rails-42b39ae3f2991692672364d7e09b1e4002e66261.zip
Move tests to cases
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8660 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activerecord/test/cases/mixin_test.rb')
-rw-r--r--activerecord/test/cases/mixin_test.rb95
1 files changed, 95 insertions, 0 deletions
diff --git a/activerecord/test/cases/mixin_test.rb b/activerecord/test/cases/mixin_test.rb
new file mode 100644
index 0000000000..0823ffddd6
--- /dev/null
+++ b/activerecord/test/cases/mixin_test.rb
@@ -0,0 +1,95 @@
+require 'abstract_unit'
+
+class Mixin < ActiveRecord::Base
+end
+
+# 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 TouchTest < ActiveSupport::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
+
+ mixin = Mixin.new
+
+ assert_nil mixin.updated_at
+ mixin.save
+ assert_nil mixin.updated_at
+
+ # Make sure Mixin.record_timestamps gets reset, even if this test fails,
+ # so that other tests do not fail because Mixin.record_timestamps == false
+ rescue Exception => e
+ raise e
+ ensure
+ Mixin.record_timestamps = true
+ end
+
+end