Froze rails gems
[depot.git] / vendor / rails / activerecord / test / cases / mixin_test.rb
1 require "cases/helper"
2
3 class Mixin < ActiveRecord::Base
4 end
5
6 # Let us control what Time.now returns for the TouchTest suite
7 class Time
8 @@forced_now_time = nil
9 cattr_accessor :forced_now_time
10
11 class << self
12 def now_with_forcing
13 if @@forced_now_time
14 @@forced_now_time
15 else
16 now_without_forcing
17 end
18 end
19 alias_method_chain :now, :forcing
20 end
21 end
22
23
24 class TouchTest < ActiveRecord::TestCase
25 fixtures :mixins
26
27 def setup
28 Time.forced_now_time = Time.now
29 end
30
31 def teardown
32 Time.forced_now_time = nil
33 end
34
35 def test_time_mocking
36 five_minutes_ago = 5.minutes.ago
37 Time.forced_now_time = five_minutes_ago
38 assert_equal five_minutes_ago, Time.now
39
40 Time.forced_now_time = nil
41 assert_not_equal five_minutes_ago, Time.now
42 end
43
44 def test_update
45 stamped = Mixin.new
46
47 assert_nil stamped.updated_at
48 assert_nil stamped.created_at
49 stamped.save
50 assert_equal Time.now, stamped.updated_at
51 assert_equal Time.now, stamped.created_at
52 end
53
54 def test_create
55 obj = Mixin.create
56 assert_equal Time.now, obj.updated_at
57 assert_equal Time.now, obj.created_at
58 end
59
60 def test_many_updates
61 stamped = Mixin.new
62
63 assert_nil stamped.updated_at
64 assert_nil stamped.created_at
65 stamped.save
66 assert_equal Time.now, stamped.created_at
67 assert_equal Time.now, stamped.updated_at
68
69 old_updated_at = stamped.updated_at
70
71 Time.forced_now_time = 5.minutes.from_now
72 stamped.lft_will_change!
73 stamped.save
74
75 assert_equal Time.now, stamped.updated_at
76 assert_equal old_updated_at, stamped.created_at
77 end
78
79 def test_create_turned_off
80 Mixin.record_timestamps = false
81
82 mixin = Mixin.new
83
84 assert_nil mixin.updated_at
85 mixin.save
86 assert_nil mixin.updated_at
87
88 # Make sure Mixin.record_timestamps gets reset, even if this test fails,
89 # so that other tests do not fail because Mixin.record_timestamps == false
90 rescue Exception => e
91 raise e
92 ensure
93 Mixin.record_timestamps = true
94 end
95
96 end