summaryrefslogtreecommitdiffstats
path: root/tests/testing/test_time_travel.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/testing/test_time_travel.py')
-rw-r--r--tests/testing/test_time_travel.py85
1 files changed, 85 insertions, 0 deletions
diff --git a/tests/testing/test_time_travel.py b/tests/testing/test_time_travel.py
new file mode 100644
index 0000000..dd496e3
--- /dev/null
+++ b/tests/testing/test_time_travel.py
@@ -0,0 +1,85 @@
+from __future__ import annotations
+
+from time import sleep
+from typing import TYPE_CHECKING
+
+import pytest
+
+import pendulum
+
+from pendulum.utils._compat import PYPY
+
+if TYPE_CHECKING:
+ from typing import Generator
+
+
+@pytest.fixture(autouse=True)
+def setup() -> Generator[None, None, None]:
+ pendulum.travel_back()
+
+ yield
+
+ pendulum.travel_back()
+
+
+@pytest.mark.skipif(PYPY, reason="Time travelling not available on PyPy")
+def test_travel() -> None:
+ now = pendulum.now()
+
+ pendulum.travel(minutes=5)
+
+ assert pendulum.now().diff_for_humans(now) == "5 minutes after"
+
+
+@pytest.mark.skipif(PYPY, reason="Time travelling not available on PyPy")
+def test_travel_with_frozen_time() -> None:
+ pendulum.travel(minutes=5, freeze=True)
+
+ now = pendulum.now()
+
+ sleep(0.01)
+
+ assert now == pendulum.now()
+
+
+@pytest.mark.skipif(PYPY, reason="Time travelling not available on PyPy")
+def test_travel_to() -> None:
+ dt = pendulum.datetime(2022, 1, 19, tz="local")
+
+ pendulum.travel_to(dt)
+
+ assert pendulum.now().date() == dt.date()
+
+
+@pytest.mark.skipif(PYPY, reason="Time travelling not available on PyPy")
+def test_freeze() -> None:
+ pendulum.freeze()
+
+ pendulum.travel(minutes=5)
+
+ assert pendulum.now() == pendulum.now()
+
+ pendulum.travel_back()
+
+ pendulum.travel(minutes=5)
+
+ now = pendulum.now()
+
+ sleep(0.01)
+
+ assert now != pendulum.now()
+
+ pendulum.freeze()
+
+ assert pendulum.now() == pendulum.now()
+
+ pendulum.travel_back()
+
+ with pendulum.freeze():
+ assert pendulum.now() == pendulum.now()
+
+ now = pendulum.now()
+
+ sleep(0.01)
+
+ assert now != pendulum.now()