spec/integration/timezone_test.rb in sequel-3.28.0 vs spec/integration/timezone_test.rb in sequel-3.29.0
- old
+ new
@@ -1,61 +1,87 @@
require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper.rb')
describe "Sequel timezone support" do
- def test_timezone
+ def test_timezone(timezone=Sequel.application_timezone)
+ tz = 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 = Sequel.database_to_application_timestamp(t2.to_s) unless t2.is_a?(Time)
+ t2 = @db.to_application_timestamp(t2.to_s) unless t2.is_a?(Time)
(t2 - t).should be_within(2).of(0)
- t2.utc_offset.should == 0 if Sequel.application_timezone == :utc
- t2.utc_offset.should == t.getlocal.utc_offset if Sequel.application_timezone == :local
+ t2.utc_offset.should == 0 if timezone == :utc
+ t2.utc_offset.should == 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 = Sequel.database_to_application_timestamp(dt2.to_s) unless dt2.is_a?(DateTime)
+ dt2 = @db.to_application_timestamp(dt2.to_s) unless dt2.is_a?(DateTime)
(dt2 - dt).should be_within(0.00002).of(0)
- dt2.offset.should == 0 if Sequel.application_timezone == :utc
- dt2.offset.should == dt.offset if Sequel.application_timezone == :local
+ dt2.offset.should == 0 if timezone == :utc
+ dt2.offset.should == dt.offset if timezone == :local
@db[:t].delete
end
end
before do
@db = INTEGRATION_DB
@db.create_table!(:t){DateTime :t}
end
after do
- @db.drop_table(:t)
+ @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", [:swift], [:tinytds], [:do, proc{|db| db.database_type != :sqlite}] do
+ cspecify "should support using UTC for database storage and local time for the application", [:swift], [:tinytds], [:do, :mysql], [:do, :postgres], [: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", [:swift], [:tinytds], [:do, proc{|db| db.database_type != :sqlite}] do
+ cspecify "should support using local time for database storage and UTC for the application", [:swift], [:tinytds], [:do, :mysql], [:do, :postgres], [: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", [:swift], [:do, proc{|db| db.database_type != :sqlite}] do
+ cspecify "should support using UTC for both database storage and for application", [:swift], [:do, :mysql], [:do, :postgres], [: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", [:do, proc{|db| db.database_type != :sqlite}] do
+ cspecify "should support using local time for both database storage and for application", [:do, :mysql], [:do, :postgres], [:oracle] do
Sequel.default_timezone = :local
test_timezone
+ Sequel.database_timezone = :utc
+ @db.timezone = :local
+ test_timezone
+ end
+
+ specify "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(:t.cast(String))
+ if o = Date._parse(s)[:offset]
+ o.should == t.utc_offset
+ end
end
end