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
|
# This is a test of the monkey patches in timezone_fixes.rb
# We use EximLogDone here just as a totally random model that has a datetime type.
require File.dirname(__FILE__) + '/../spec_helper'
describe "when doing things with timezones" do
it "should preserve time objects with local time conversion to default timezone UTC" do
with_env_tz 'America/New_York' do
with_active_record_default_timezone :utc do
time = Time.local(2000)
exim_log_done = EximLogDone.create('last_stat' => time, 'filename' => 'dummy')
saved_time = EximLogDone.find(exim_log_done.id).last_stat
assert_equal time, saved_time
assert_equal [0, 0, 0, 1, 1, 2000, 6, 1, false, "EST"], time.to_a
assert_equal [0, 0, 5, 1, 1, 2000, 6, 1, false, "UTC"], saved_time.to_a
end
end
end
it "should preserve time objects with time with zone conversion to default timezone UTC" do
with_env_tz 'America/New_York' do
with_active_record_default_timezone :utc do
Time.use_zone 'Central Time (US & Canada)' do
time = Time.zone.local(2000)
exim_log_done = EximLogDone.create('last_stat' => time, 'filename' => 'dummy')
saved_time = EximLogDone.find(exim_log_done.id).last_stat
assert_equal time, saved_time
assert_equal [0, 0, 0, 1, 1, 2000, 6, 1, false, "CST"], time.to_a
assert_equal [0, 0, 6, 1, 1, 2000, 6, 1, false, "UTC"], saved_time.to_a
end
end
end
end
# XXX Couldn't get this test to work - but the other tests seem to detect presence of
# the monkey patch, so they will do for now.
#it "should preserve time objects with UTC time conversion to default timezone local" do
# with_env_tz 'America/New_York' do
# time = Time.utc(2000)
# exim_log_done = EximLogDone.create('last_stat' => time, 'filename' => 'dummy')
# saved_time = EximLogDone.find(exim_log_done.id).last_stat
# assert_equal time, saved_time
# assert_equal [0, 0, 0, 1, 1, 2000, 6, 1, false, "UTC"], time.to_a
# assert_equal [0, 0, 19, 31, 12, 1999, 5, 365, false, "EST"], saved_time.to_a
# end
#end
it "should preserve time objects with time with zone conversion to default timezone local" do
with_env_tz 'America/New_York' do
with_active_record_default_timezone :local do
Time.use_zone 'Central Time (US & Canada)' do
time = Time.zone.local(2000)
exim_log_done = EximLogDone.create('last_stat' => time, 'filename' => 'dummy')
saved_time = EximLogDone.find(exim_log_done.id).last_stat
assert_equal time, saved_time
assert_equal [0, 0, 0, 1, 1, 2000, 6, 1, false, "CST"], time.to_a
assert_equal [0, 0, 1, 1, 1, 2000, 6, 1, false, "EST"], saved_time.to_a
end
end
end
end
protected
def with_env_tz(new_tz = 'US/Eastern')
old_tz, ENV['TZ'] = ENV['TZ'], new_tz
yield
ensure
old_tz ? ENV['TZ'] = old_tz : ENV.delete('TZ')
end
def with_active_record_default_timezone(zone)
old_zone, ActiveRecord::Base.default_timezone = ActiveRecord::Base.default_timezone, zone
yield
ensure
ActiveRecord::Base.default_timezone = old_zone
end
end
|