aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/test/time_travel_test.rb
blob: 676a14369210e38f003018ceb1c4f8c331f788b8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
require 'abstract_unit'
require 'active_support/core_ext/date'
require 'active_support/core_ext/date_time'
require 'active_support/core_ext/numeric/time'

class TimeTravelTest < ActiveSupport::TestCase
  setup do
    Time.stubs now: Time.now
  end

  teardown do
    travel_back
  end

  def test_time_helper_travel
    expected_time = Time.now + 1.day
    travel 1.day

    assert_equal expected_time.to_s(:db), Time.now.to_s(:db)
    assert_equal expected_time.to_date, Date.today
    assert_equal expected_time.to_datetime.to_s(:db), DateTime.now.to_s(:db)
  end

  def test_time_helper_travel_with_block
    expected_time = Time.now + 1.day

    travel 1.day do
      assert_equal expected_time.to_s(:db), Time.now.to_s(:db)
      assert_equal expected_time.to_date, Date.today
      assert_equal expected_time.to_datetime.to_s(:db), DateTime.now.to_s(:db)
    end

    assert_not_equal expected_time.to_s(:db), Time.now.to_s(:db)
    assert_not_equal expected_time.to_date, Date.today
    assert_not_equal expected_time.to_datetime.to_s(:db), DateTime.now.to_s(:db)
  end

  def test_time_helper_travel_to
    expected_time = Time.new(2004, 11, 24, 01, 04, 44)
    travel_to expected_time

    assert_equal expected_time, Time.now
    assert_equal Date.new(2004, 11, 24), Date.today
    assert_equal expected_time.to_datetime, DateTime.now
  end

  def test_time_helper_travel_to_with_block
    expected_time = Time.new(2004, 11, 24, 01, 04, 44)

    travel_to expected_time do
      assert_equal expected_time, Time.now
      assert_equal Date.new(2004, 11, 24), Date.today
      assert_equal expected_time.to_datetime, DateTime.now
    end

    assert_not_equal expected_time, Time.now
    assert_not_equal Date.new(2004, 11, 24), Date.today
    assert_not_equal expected_time.to_datetime, DateTime.now
  end

  def test_time_helper_travel_back
    expected_time = Time.new(2004, 11, 24, 01, 04, 44)

    travel_to expected_time
    assert_equal expected_time, Time.now
    assert_equal Date.new(2004, 11, 24), Date.today
    assert_equal expected_time.to_datetime, DateTime.now
    travel_back

    assert_not_equal expected_time, Time.now
    assert_not_equal Date.new(2004, 11, 24), Date.today
    assert_not_equal expected_time.to_datetime, DateTime.now
  end

  def test_travel_to_will_reset_the_usec_to_avoid_mysql_rouding
    travel_to Time.utc(2014, 10, 10, 10, 10, 50, 999999) do
      assert_equal 50, Time.now.sec
      assert_equal 0, Time.now.usec
      assert_equal 50, DateTime.now.sec
      assert_equal 0, DateTime.now.usec
    end
  end
end