Skip to content

Commit

Permalink
Default to own .fold when calling .replace()
Browse files Browse the repository at this point in the history
  • Loading branch information
tomage committed Mar 8, 2020
1 parent c99f242 commit b984da8
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 5 deletions.
2 changes: 2 additions & 0 deletions pendulum/datetime.py
Original file line number Diff line number Diff line change
Expand Up @@ -1503,6 +1503,8 @@ def replace(
microsecond = self.microsecond
if tzinfo is True:
tzinfo = self.tzinfo
if fold is None:
fold = self.fold

transition_rule = pendulum.POST_TRANSITION
if fold is not None:
Expand Down
33 changes: 28 additions & 5 deletions tests/datetime/test_fluent_setters.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,18 +139,41 @@ def test_fluid_at_with_transition():
assert 0 == new.second


def test_replace_tzinfo():
d = pendulum.datetime(2016, 7, 2, 0, 41, 20)
def test_replace_tzinfo_dls_off():
d = pendulum.datetime(2016, 3, 27, 0, 30) # 30 min before DLS turning on
new = d.replace(tzinfo=pendulum.timezone("Europe/Paris"))

assert_datetime(new, 2016, 3, 27, 0, 30)
assert not new.is_dst()
assert new.offset == 3600
assert new.timezone_name == "Europe/Paris"


def test_replace_tzinfo_dls_transitioning_on():
d = pendulum.datetime(2016, 3, 27, 1, 30) # In middle of turning on
new = d.replace(tzinfo=pendulum.timezone("Europe/Paris"))

assert_datetime(new, 2016, 3, 27, 1, 30)
assert not new.is_dst()
assert new.offset == 3600
assert new.timezone_name == "Europe/Paris"


def test_replace_tzinfo_dls_on():
d = pendulum.datetime(2016, 10, 30, 0, 30) # 30 min before DLS turning off
new = d.replace(tzinfo=pendulum.timezone("Europe/Paris"))

assert_datetime(new, 2016, 10, 30, 0, 30)
assert new.is_dst()
assert new.offset == 7200
assert new.timezone_name == "Europe/Paris"


def test_replace_tzinfo_dst():
d = pendulum.datetime(2013, 3, 31, 2, 30)
def test_replace_tzinfo_dls_transitioning_off():
d = pendulum.datetime(2016, 10, 30, 1, 30) # In the middle of turning off
new = d.replace(tzinfo=pendulum.timezone("Europe/Paris"))

assert_datetime(new, 2013, 3, 31, 3, 30)
assert_datetime(new, 2016, 10, 30, 1, 30)
assert new.is_dst()
assert new.offset == 7200
assert new.timezone_name == "Europe/Paris"
59 changes: 59 additions & 0 deletions tests/datetime/test_replace.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import pendulum

from ..conftest import assert_datetime


def test_replace_tzinfo_dls_off():
utc = pendulum.datetime(2016, 3, 27, 0, 30) # 30 min before DLS 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_dls_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_dls_on():
utc = pendulum.datetime(2016, 10, 30, 0, 30) # 30 min before DLS 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_dls_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"

0 comments on commit b984da8

Please sign in to comment.