Update tests/test_utils_run_later.py
Run CI Tests / test (push) Successful in 1m41s

This commit is contained in:
2025-08-04 18:39:19 +02:00
parent 1aaf1dc933
commit 079a67a8c8
+30 -38
View File
@@ -2,36 +2,28 @@ import pytest
from slic.utils.run_later import run_at, run_in, run_later from slic.utils.run_later import run_at, run_in, run_later
from datetime import datetime, timedelta from datetime import datetime, timedelta
# Dummy progress bar replacement to avoid actual tqdm usage
class DummyBar: class DummyBar:
def __enter__(self): return self def __enter__(self): return self
def __exit__(self, *a): pass def __exit__(self, *a): pass
def set(self, val): pass def set(self, val): pass
# Helper class to simulate and manipulate time for testing class FakeDatetime(datetime):
class FakeDatetime: """Subclass datetime to override now()."""
def __init__(self, start_time): _now = None
self.t = start_time
def now(self):
return self.t
def advance(self, seconds):
self.t += timedelta(seconds=seconds)
def __getattr__(self, attr):
return getattr(datetime, attr)
@classmethod
def set_now(cls, value):
cls._now = value
# Wrapper to monkeypatch the whole datetime module with a fake .now() @classmethod
class FakeDateTimeModule: def now(cls, tz=None):
def __init__(self, fake_dt): return cls._now
self.fake_dt = fake_dt
self.datetime = datetime
def now(self): @classmethod
return self.fake_dt.now() def advance(cls, seconds):
cls._now += timedelta(seconds=seconds)
def __getattr__(self, attr):
return getattr(datetime, attr)
def test_run_at(monkeypatch): def test_run_at(monkeypatch):
@@ -41,18 +33,18 @@ def test_run_at(monkeypatch):
triggered.append(label) triggered.append(label)
base = datetime(2025, 1, 1, 12, 0, 0) base = datetime(2025, 1, 1, 12, 0, 0)
fake_dt = FakeDatetime(base) FakeDatetime.set_now(base)
monkeypatch.setattr("slic.utils.run_later.datetime", FakeDateTimeModule(fake_dt)) monkeypatch.setattr("slic.utils.run_later.datetime", FakeDatetime)
monkeypatch.setattr("slic.utils.run_later.sleep", lambda x: None) 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.tqdm_mod", lambda *a, **k: DummyBar())
run_at(base + timedelta(seconds=30), fexample, "not yet") run_at(base + timedelta(seconds=30), fexample, "not yet")
assert "not yet" not in triggered assert "not yet" not in triggered
fake_dt.advance(31) FakeDatetime.advance(31)
run_at(base + timedelta(seconds=30), fexample, "now OK 0") run_at(base + timedelta(seconds=30), fexample, "now OK")
assert "now OK 0" in triggered assert "now OK" in triggered
run_at(base - timedelta(seconds=1), fexample, "too late") run_at(base - timedelta(seconds=1), fexample, "too late")
assert "too late" not in triggered assert "too late" not in triggered
@@ -65,20 +57,20 @@ def test_run_in(monkeypatch):
triggered.append(label) triggered.append(label)
base = datetime(2025, 1, 1, 13, 0, 0) base = datetime(2025, 1, 1, 13, 0, 0)
fake_dt = FakeDatetime(base) FakeDatetime.set_now(base)
monkeypatch.setattr("slic.utils.run_later.datetime", FakeDateTimeModule(fake_dt)) monkeypatch.setattr("slic.utils.run_later.datetime", FakeDatetime)
monkeypatch.setattr("slic.utils.run_later.sleep", lambda x: None) 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.tqdm_mod", lambda *a, **k: DummyBar())
run_in(timedelta(seconds=20), fexample, "not yet") run_in(timedelta(seconds=20), fexample, "not yet")
assert "not yet" not in triggered assert "not yet" not in triggered
fake_dt.advance(25) FakeDatetime.advance(25)
run_in(timedelta(seconds=20), fexample, "now OK 1") run_in(timedelta(seconds=20), fexample, "now OK")
assert "now OK 1" in triggered assert "now OK" in triggered
fake_dt.advance(-100) FakeDatetime.advance(-100)
run_in(timedelta(seconds=-1), fexample, "past") run_in(timedelta(seconds=-1), fexample, "past")
assert "past" not in triggered assert "past" not in triggered
@@ -90,24 +82,24 @@ def test_run_later(monkeypatch):
triggered.append(label) triggered.append(label)
base = datetime(2025, 1, 1, 14, 0, 0) base = datetime(2025, 1, 1, 14, 0, 0)
fake_dt = FakeDatetime(base) FakeDatetime.set_now(base)
monkeypatch.setattr("slic.utils.run_later.datetime", FakeDateTimeModule(fake_dt)) monkeypatch.setattr("slic.utils.run_later.datetime", FakeDatetime)
monkeypatch.setattr("slic.utils.run_later.sleep", lambda x: None) 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.tqdm_mod", lambda *a, **k: DummyBar())
run_later(15, fexample, "15s later") run_later(15, fexample, "15s later")
assert "15s later" not in triggered assert "15s later" not in triggered
fake_dt.advance(20) FakeDatetime.advance(20)
run_later(15, fexample, "now OK 2") run_later(15, fexample, "now OK")
assert "now OK 2" in triggered assert "now OK" in triggered
run_later(timedelta(seconds=-5), fexample, "past") run_later(timedelta(seconds=-5), fexample, "past")
assert "past" not in triggered assert "past" not in triggered
target = base + timedelta(seconds=10) target = base + timedelta(seconds=10)
run_later(target, fexample, "datetime later") run_later(target, fexample, "datetime later")
fake_dt.advance(11) FakeDatetime.advance(11)
run_later(target, fexample, "datetime now OK") run_later(target, fexample, "datetime now OK")
assert "datetime now OK" in triggered assert "datetime now OK" in triggered