21 lines
626 B
Python
21 lines
626 B
Python
from __future__ import annotations
|
|
|
|
from datetime import UTC, datetime, timedelta
|
|
|
|
import pytest
|
|
from backup_tool.scheduler import next_nominal
|
|
|
|
|
|
def test_misfire_window_is_deterministic_for_delivery() -> None:
|
|
nominal = datetime.now(UTC) - timedelta(seconds=901)
|
|
next_run = next_nominal("* * * * *", "UTC", nominal)
|
|
|
|
assert next_run > nominal
|
|
assert (datetime.now(UTC) - nominal).total_seconds() > 900
|
|
|
|
|
|
@pytest.mark.parametrize("cron", ["* * * * * *", "invalid"])
|
|
def test_delivery_rejects_invalid_cron_before_enqueue(cron: str) -> None:
|
|
with pytest.raises(ValueError):
|
|
next_nominal(cron, "UTC")
|