File: timezone_test.rb

package info (click to toggle)
ruby-sequel 5.63.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 10,408 kB
  • sloc: ruby: 113,747; makefile: 3
file content (86 lines) | stat: -rw-r--r-- 2,857 bytes parent folder | download | duplicates (4)
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
84
85
86
require_relative "spec_helper"

describe "Sequel timezone support" do
  def _test_timezone(timezone=Sequel.application_timezone)
    Sequel.datetime_class = Time
    # Tests should cover both DST and non-DST times.
    [Time.now, Time.local(2010,1,1,12), Time.local(2010,6,1,12)].each do |t|
      @db[:t].insert(t)
      t2 = @db[:t].single_value
      t2 = @db.to_application_timestamp(t2.to_s) unless t2.is_a?(Time)
      (t2 - t).must_be_close_to 0, 2
      t2.utc_offset.must_equal 0 if timezone == :utc
      t2.utc_offset.must_equal t.getlocal.utc_offset if timezone == :local
      @db[:t].delete
    end

    Sequel.datetime_class = DateTime
    local_dst_offset = Time.local(2010, 6).utc_offset/86400.0
    local_std_offset = Time.local(2010, 1).utc_offset/86400.0
    [DateTime.now, DateTime.civil(2010,1,1,12,0,0,local_std_offset), DateTime.civil(2010,6,1,12,0,0,local_dst_offset)].each do |dt|
      @db[:t].insert(dt)
      dt2 = @db[:t].single_value
      dt2 = @db.to_application_timestamp(dt2.to_s) unless dt2.is_a?(DateTime)
      (dt2 - dt).must_be_close_to 0, 0.00002
      dt2.offset.must_equal 0 if timezone == :utc
      dt2.offset.must_equal dt.offset if timezone == :local
      @db[:t].delete
    end
  end

  before do
    @db = DB
    @db.create_table!(:t){DateTime :t}
  end
  after do
    @db.timezone = nil
    Sequel.default_timezone = nil
    Sequel.datetime_class = Time
    @db.drop_table(:t)
  end

  cspecify "should support using UTC for database storage and local time for the application", [:tinytds], [:oracle] do
    Sequel.database_timezone = :utc
    Sequel.application_timezone = :local
    _test_timezone
    Sequel.database_timezone = nil
    @db.timezone = :utc
    _test_timezone
  end

  cspecify "should support using local time for database storage and UTC for the application", [:tinytds], [:oracle] do
    Sequel.database_timezone = :local
    Sequel.application_timezone = :utc
    _test_timezone
    Sequel.database_timezone = nil
    @db.timezone = :local
    _test_timezone
  end

  cspecify "should support using UTC for both database storage and for application", [:oracle] do
    Sequel.default_timezone = :utc
    _test_timezone
    Sequel.database_timezone = :local
    @db.timezone = :utc
    _test_timezone
  end

  cspecify "should support using local time for both database storage and for application", [:oracle] do
    Sequel.default_timezone = :local
    _test_timezone
    Sequel.database_timezone = :utc
    @db.timezone = :local
    _test_timezone
  end

  it "should allow overriding the database_timezone on a per-database basis" do
    Sequel.database_timezone = :utc
    @db.timezone = :local
    t = Time.now
    @db[:t].insert(t)
    s = @db[:t].get(Sequel.cast(:t, String))
    if o = Date._parse(s)[:offset]
      o.must_equal t.utc_offset
    end
  end
end unless DB.frozen?