summaryrefslogtreecommitdiffstats
path: root/tests/datetime/test_replace.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/datetime/test_replace.py')
-rw-r--r--tests/datetime/test_replace.py61
1 files changed, 61 insertions, 0 deletions
diff --git a/tests/datetime/test_replace.py b/tests/datetime/test_replace.py
new file mode 100644
index 0000000..694ef7b
--- /dev/null
+++ b/tests/datetime/test_replace.py
@@ -0,0 +1,61 @@
+from __future__ import annotations
+
+import pendulum
+
+from tests.conftest import assert_datetime
+
+
+def test_replace_tzinfo_dst_off():
+ utc = pendulum.datetime(2016, 3, 27, 0, 30) # 30 min before DST turning on
+ in_paris = utc.in_tz("Europe/Paris")
+
+ assert_datetime(in_paris, 2016, 3, 27, 1, 30, 0)
+
+ in_paris = in_paris.replace(second=1)
+
+ assert_datetime(in_paris, 2016, 3, 27, 1, 30, 1)
+ assert not in_paris.is_dst()
+ assert in_paris.offset == 3600
+ assert in_paris.timezone_name == "Europe/Paris"
+
+
+def test_replace_tzinfo_dst_transitioning_on():
+ utc = pendulum.datetime(2016, 3, 27, 1, 30) # In middle of turning on
+ in_paris = utc.in_tz("Europe/Paris")
+
+ assert_datetime(in_paris, 2016, 3, 27, 3, 30, 0)
+
+ in_paris = in_paris.replace(second=1)
+
+ assert_datetime(in_paris, 2016, 3, 27, 3, 30, 1)
+ assert in_paris.is_dst()
+ assert in_paris.offset == 7200
+ assert in_paris.timezone_name == "Europe/Paris"
+
+
+def test_replace_tzinfo_dst_on():
+ utc = pendulum.datetime(2016, 10, 30, 0, 30) # 30 min before DST turning off
+ in_paris = utc.in_tz("Europe/Paris")
+
+ assert_datetime(in_paris, 2016, 10, 30, 2, 30, 0)
+
+ in_paris = in_paris.replace(second=1)
+
+ assert_datetime(in_paris, 2016, 10, 30, 2, 30, 1)
+ assert in_paris.is_dst()
+ assert in_paris.offset == 7200
+ assert in_paris.timezone_name == "Europe/Paris"
+
+
+def test_replace_tzinfo_dst_transitioning_off():
+ utc = pendulum.datetime(2016, 10, 30, 1, 30) # In the middle of turning off
+ in_paris = utc.in_tz("Europe/Paris")
+
+ assert_datetime(in_paris, 2016, 10, 30, 2, 30, 0)
+
+ in_paris = in_paris.replace(second=1)
+
+ assert_datetime(in_paris, 2016, 10, 30, 2, 30, 1)
+ assert not in_paris.is_dst()
+ assert in_paris.offset == 3600
+ assert in_paris.timezone_name == "Europe/Paris"