diff --git a/tests/test_utils_run_later.py b/tests/test_utils_run_later.py index 27c623cc..d5be9a8b 100644 --- a/tests/test_utils_run_later.py +++ b/tests/test_utils_run_later.py @@ -1,50 +1,23 @@ import pytest from datetime import datetime, timedelta from slic.utils.run_later import run_at, run_in, run_later, today, tomorrow, yesterday +from freezegun import freeze_time + -# Dummy progress bar replacement class DummyBar: def __enter__(self): return self def __exit__(self, *a): pass def set(self, val): pass -# Fake datetime module wrapper -class FakeDateTimeModule: - def __init__(self, now): - self._now = now - def now(self): - return self._now - - def advance(self, seconds): - self._now += timedelta(seconds=seconds) - - def __getattr__(self, attr): - from datetime import datetime as real_datetime - return getattr(real_datetime, attr) - - -@pytest.fixture -def clock(monkeypatch): - # Initial fake datetime - fake_dt = FakeDateTimeModule(datetime(2025, 1, 1, 6, 0, 0)) - - # Patch the target module's datetime, sleep, tqdm, today/tomorrow/yesterday - monkeypatch.setattr("slic.utils.run_later.datetime", fake_dt) +@pytest.fixture(autouse=True) +def patch_sleep(monkeypatch): monkeypatch.setattr("slic.utils.run_later.sleep", lambda x: None) monkeypatch.setattr("slic.utils.run_later.tqdm_mod", lambda *a, **k: DummyBar()) - monkeypatch.setattr("slic.utils.run_later.today", lambda *args, **kwargs: - datetime(fake_dt.now().year, fake_dt.now().month, fake_dt.now().day, *args, **kwargs)) - monkeypatch.setattr("slic.utils.run_later.tomorrow", lambda *args, **kwargs: - datetime(fake_dt.now().year, fake_dt.now().month, fake_dt.now().day, *args, **kwargs) + timedelta(days=1)) - monkeypatch.setattr("slic.utils.run_later.yesterday", lambda *args, **kwargs: - datetime(fake_dt.now().year, fake_dt.now().month, fake_dt.now().day, *args, **kwargs) - timedelta(days=1)) - return fake_dt - - -def test_run_at(clock): +@freeze_time("2025-01-01 06:00:00") +def test_run_at(): triggered = [] def fexample(label): triggered.append(label) @@ -52,9 +25,9 @@ def test_run_at(clock): run_at(today(6, 30), fexample, "not yet") assert "not yet" not in triggered - # Moment déclenché - clock.advance(31 * 60) - run_at(today(6, 30), fexample, "now OK") + # Avancer le temps + with freeze_time("2025-01-01 06:31:00"): + run_at(today(6, 30), fexample, "now OK") assert "now OK" in triggered # Trop tard @@ -62,40 +35,38 @@ def test_run_at(clock): assert "too late" not in triggered -def test_run_in(clock): +@freeze_time("2025-01-01 12:00:00") +def test_run_in(): triggered = [] def fexample(label): triggered.append(label) - clock._now = datetime(2025, 1, 1, 12, 0, 0) - # Trop tôt run_in(timedelta(seconds=60), fexample, "not yet") assert "not yet" not in triggered - # Moment déclenché - clock.advance(61) - run_in(timedelta(seconds=60), fexample, "now OK") + # Avancer le temps + with freeze_time("2025-01-01 12:01:01"): + run_in(timedelta(seconds=60), fexample, "now OK") assert "now OK" in triggered # Trop tard - clock.advance(-100) - run_in(timedelta(seconds=-1), fexample, "too late") + with freeze_time("2025-01-01 11:59:00"): + run_in(timedelta(seconds=-1), fexample, "too late") assert "too late" not in triggered -def test_run_later(clock): +@freeze_time("2025-01-01 14:00:00") +def test_run_later(): triggered = [] def fexample(label): triggered.append(label) - clock._now = datetime(2025, 1, 1, 14, 0, 0) - # Trop tôt (float seconds) run_later(45, fexample, "not yet") assert "not yet" not in triggered - # Moment déclenché - clock.advance(60) - run_later(45, fexample, "now OK") + # Avancer le temps + with freeze_time("2025-01-01 14:01:00"): + run_later(45, fexample, "now OK") assert "now OK" in triggered # Trop tard @@ -103,10 +74,10 @@ def test_run_later(clock): assert "too late" not in triggered # Format datetime - clock._now = datetime(2025, 1, 1, 15, 0, 0) - run_later(today(15, 5), fexample, "not yet dt") + with freeze_time("2025-01-01 15:00:00"): + run_later(today(15, 5), fexample, "not yet dt") assert "not yet dt" not in triggered - clock.advance(6 * 60) - run_later(today(15, 5), fexample, "now OK dt") + with freeze_time("2025-01-01 15:06:00"): + run_later(today(15, 5), fexample, "now OK dt") assert "now OK dt" in triggered