From c02f3578c1e4896de9e6ca56b23a491f2ed677d8 Mon Sep 17 00:00:00 2001 From: Ryuta Kamizono Date: Wed, 25 Jul 2018 09:42:36 +0900 Subject: Normalize time value not to be affected by summer time Follow up of #33358 for SQLite3. --- .../connection_adapters/sqlite3/quoting.rb | 1 + .../test/cases/adapters/sqlite3/quoting_test.rb | 26 ++++++++++++++++++++++ activerecord/test/cases/quoting_test.rb | 24 +++++++++++--------- 3 files changed, 41 insertions(+), 10 deletions(-) (limited to 'activerecord') diff --git a/activerecord/lib/active_record/connection_adapters/sqlite3/quoting.rb b/activerecord/lib/active_record/connection_adapters/sqlite3/quoting.rb index 70de96326c..abedf01f10 100644 --- a/activerecord/lib/active_record/connection_adapters/sqlite3/quoting.rb +++ b/activerecord/lib/active_record/connection_adapters/sqlite3/quoting.rb @@ -17,6 +17,7 @@ module ActiveRecord end def quoted_time(value) + value = value.change(year: 2000, month: 1, day: 1) quoted_date(value).sub(/\A\d\d\d\d-\d\d-\d\d /, "2000-01-01 ") end diff --git a/activerecord/test/cases/adapters/sqlite3/quoting_test.rb b/activerecord/test/cases/adapters/sqlite3/quoting_test.rb index 1c85ff5674..40b58e86bf 100644 --- a/activerecord/test/cases/adapters/sqlite3/quoting_test.rb +++ b/activerecord/test/cases/adapters/sqlite3/quoting_test.rb @@ -62,4 +62,30 @@ class SQLite3QuotingTest < ActiveRecord::SQLite3TestCase assert_equal "'2000-01-01 12:30:00.999999'", @conn.quote(type.serialize(value)) end + + def test_quoted_time_dst_utc + with_env_tz "America/New_York" do + with_timezone_config default: :utc do + t = Time.new(2000, 7, 1, 0, 0, 0, "+04:30") + + expected = t.change(year: 2000, month: 1, day: 1) + expected = expected.getutc.to_s(:db).sub(/\A\d\d\d\d-\d\d-\d\d /, "2000-01-01 ") + + assert_equal expected, @conn.quoted_time(t) + end + end + end + + def test_quoted_time_dst_local + with_env_tz "America/New_York" do + with_timezone_config default: :local do + t = Time.new(2000, 7, 1, 0, 0, 0, "+04:30") + + expected = t.change(year: 2000, month: 1, day: 1) + expected = expected.getlocal.to_s(:db).sub(/\A\d\d\d\d-\d\d-\d\d /, "2000-01-01 ") + + assert_equal expected, @conn.quoted_time(t) + end + end + end end diff --git a/activerecord/test/cases/quoting_test.rb b/activerecord/test/cases/quoting_test.rb index f875dc96f7..723fccc8d9 100644 --- a/activerecord/test/cases/quoting_test.rb +++ b/activerecord/test/cases/quoting_test.rb @@ -90,24 +90,28 @@ module ActiveRecord end def test_quoted_time_dst_utc - with_timezone_config default: :utc do - t = Time.new(2000, 7, 1, 0, 0, 0, "+04:30") + with_env_tz "America/New_York" do + with_timezone_config default: :utc do + t = Time.new(2000, 7, 1, 0, 0, 0, "+04:30") - expected = t.change(year: 2000, month: 1, day: 1) - expected = expected.getutc.to_s(:db).slice(11..-1) + expected = t.change(year: 2000, month: 1, day: 1) + expected = expected.getutc.to_s(:db).slice(11..-1) - assert_equal expected, @quoter.quoted_time(t) + assert_equal expected, @quoter.quoted_time(t) + end end end def test_quoted_time_dst_local - with_timezone_config default: :local do - t = Time.new(2000, 7, 1, 0, 0, 0, "+04:30") + with_env_tz "America/New_York" do + with_timezone_config default: :local do + t = Time.new(2000, 7, 1, 0, 0, 0, "+04:30") - expected = t.change(year: 2000, month: 1, day: 1) - expected = expected.getlocal.to_s(:db).slice(11..-1) + expected = t.change(year: 2000, month: 1, day: 1) + expected = expected.getlocal.to_s(:db).slice(11..-1) - assert_equal expected, @quoter.quoted_time(t) + assert_equal expected, @quoter.quoted_time(t) + end end end -- cgit v1.2.3