test/test_timestamps.rb in swift-0.13.0 vs test/test_timestamps.rb in swift-0.14.0
- old
+ new
@@ -1,17 +1,22 @@
require_relative 'helper'
-require 'date'
describe 'Adapter' do
supported_by Swift::DB::Postgres do
%w(America/Chicago Australia/Melbourne).each do |timezone|
describe 'time parsing in %s' % timezone do
before do
- @db = Swift.db
ENV['TZ'] = ":#{timezone}"
+ @db = Swift.db
+ @db.execute 'create table datetime_test(id serial, ts timestamp with time zone)'
+ @db.execute "set time zone '#{timezone}'"
end
+ after do
+ @db.execute 'drop table datetime_test'
+ end
+
it 'should parse timestamps and do conversion accordingly' do
time = DateTime.parse('2010-01-01 15:00:00+04:30')
assert_timestamp_like time, fetch_timestamp_at(time), 'parses correctly'
end
@@ -23,18 +28,23 @@
it 'should parse correctly when DST is off' do
time = DateTime.parse('2010-04-04 20:31:00+04:30')
assert_timestamp_like time, fetch_timestamp_at(time), 'DST off'
end
- describe 'Adapter timezone' do
- %w(+05:30 -05:30).each do |offset|
- it 'should parse timestamps and do conversion accordingly for offset ' + offset do
- @db = Swift::DB::Postgres.new(@db.options.merge(timezone: offset))
- server = DateTime.parse('2010-01-01 10:00:00')
- local = DateTime.parse('2010-01-01 10:00:00 ' + offset)
- assert_timestamp_like local, fetch_timestamp_at(server, ''), 'parses correctly'
- end
+ it 'should store fractional seconds' do
+ time = Time.now
+ datetime = time.to_datetime
+
+ @db.execute 'insert into datetime_test(ts) values (?), (?)', time, datetime
+ values = @db.execute('select ts from datetime_test').map(&:values).flatten
+
+ assert_equal 2, values.size
+
+ # postgres resolution is microsecond.
+ values.each do |value|
+ assert_equal datetime.strftime('%F %T %z'), value.strftime('%F %T %z')
+ assert_equal datetime.second_fraction.to_f.round(6), value.second_fraction.to_f.round(6)
end
end
def fetch_timestamp_at value, zone='%z'
sql = if zone.empty?
@@ -47,11 +57,11 @@
@db.execute(sql).first.fetch(:now)
end
def assert_timestamp_like expect, given, comment
match = Regexp.new expect.to_time.strftime('%F %T')
- assert_kind_of Time, given
- assert_match match, given.strftime('%F %T'), comment
+ assert_kind_of DateTime, given
+ assert_match match, given.to_time.strftime('%F %T'), comment
end
end
end
end
end