Files
zsglpt/tests/test_schedule_utils.py

57 lines
1.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from __future__ import annotations
from datetime import datetime
from services.schedule_utils import compute_next_run_at, format_cst
from services.time_utils import BEIJING_TZ
def _dt(text: str) -> datetime:
naive = datetime.strptime(text, "%Y-%m-%d %H:%M:%S")
return BEIJING_TZ.localize(naive)
def test_compute_next_run_at_weekday_filter():
now = _dt("2025-01-06 07:00:00") # 周一
next_dt = compute_next_run_at(
now=now,
schedule_time="08:00",
weekdays="2", # 仅周二
random_delay=0,
last_run_at=None,
)
assert format_cst(next_dt) == "2025-01-07 08:00:00"
def test_compute_next_run_at_random_delay_within_window(monkeypatch):
now = _dt("2025-01-06 06:00:00")
# 固定随机值0 => window_startschedule_time-15min
monkeypatch.setattr("services.schedule_utils.random.randint", lambda a, b: 0)
next_dt = compute_next_run_at(
now=now,
schedule_time="08:00",
weekdays="1,2,3,4,5,6,7",
random_delay=1,
last_run_at=None,
)
assert format_cst(next_dt) == "2025-01-06 07:45:00"
def test_compute_next_run_at_skips_same_day_if_last_run_today(monkeypatch):
now = _dt("2025-01-06 06:00:00")
# 让次日的随机值固定,便于断言
monkeypatch.setattr("services.schedule_utils.random.randint", lambda a, b: 30)
next_dt = compute_next_run_at(
now=now,
schedule_time="08:00",
weekdays="1,2,3,4,5,6,7",
random_delay=1,
last_run_at="2025-01-06 01:00:00",
)
# 次日 window_start=07:45 + 30min => 08:15
assert format_cst(next_dt) == "2025-01-07 08:15:00"