Skip to content

Commit 856ad9c

Browse files
committed
In tests recreate DB connection with actual time zone
When time zone is changed, JDBC connection still will contain initial time zone. Therefore we need to recreate connection with the newly set TZ
1 parent b31ac66 commit 856ad9c

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

test/simple.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -329,11 +329,11 @@ def test_time_in_dst_change_hour_utc
329329
with_timezone_config default: :utc do
330330
id = DbType.connection.insert(
331331
"INSERT INTO db_types (sample_datetime)
332-
values ('2024-03-31 03:30:00')"
332+
values ('2024-03-31 02:30:00')"
333333
)
334334
saved_time = DbType.find(id).sample_datetime
335335

336-
assert_equal Time.utc(2024, 3, 31, 3, 30), saved_time
336+
assert_equal Time.utc(2024, 3, 31, 2, 30), saved_time
337337
assert_equal 'UTC', saved_time.zone
338338
end
339339
end
@@ -352,7 +352,7 @@ def test_time_in_dst_change_hour_local
352352
)
353353
saved_time = DbType.find(id).sample_datetime
354354

355-
assert_equal Time.local(2024, 3, 31, 1, 30), saved_time
355+
assert_equal Time.local(2024, 3, 31, 3, 30), saved_time
356356
assert_not_equal 'UTC', saved_time.zone
357357
end
358358
end

test/test_helper.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,11 +330,18 @@ def with_java_tz(new_tz)
330330
java.util.TimeZone.setDefault new_tz
331331
org.joda.time.DateTimeZone.setDefault org.joda.time.DateTimeZone.forTimeZone(new_tz)
332332
java.lang.System.setProperty 'user.timezone', new_tz.getID
333+
connection_properties = ActiveRecord::Base.remove_connection
334+
prev_config = connection_properties.configuration_hash
335+
new_config = prev_config.deep_dup
336+
new_config[:properties] ||= {}
337+
new_config[:properties]['serverTimezone'] = new_tz.getID
338+
ActiveRecord::Base.establish_connection new_config
333339
yield
334340
ensure
335341
java.util.TimeZone.setDefault old_tz
336342
org.joda.time.DateTimeZone.setDefault old_jd
337343
old_user_tz ? java.lang.System.setProperty('user.timezone', old_user_tz) : java.lang.System.clearProperty('user.timezone')
344+
ActiveRecord::Base.establish_connection prev_config
338345
end
339346
end
340347

0 commit comments

Comments
 (0)