~michaelforrest/use-case-mapper/trunk

« back to all changes in this revision

Viewing changes to vendor/rails/activerecord/test/cases/mixin_test.rb

  • Committer: Richard Lee (Canonical)
  • Date: 2010-10-15 15:17:58 UTC
  • mfrom: (190.1.3 use-case-mapper)
  • Revision ID: richard.lee@canonical.com-20101015151758-wcvmfxrexsongf9d
Merge

Show diffs side-by-side

added added

removed removed

Lines of Context:
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