steam-backlog-enforcer/steam_backlog_enforcer/tests/_budget_dates.py
Krzysztof kuhy Rudnicki c8bd9b21ff
Some checks are pending
dependency freshness / dependencies on newest stable (push) Waiting to run
md-naming / markdown naming convention (push) Waiting to run
pre-commit / pre-commit (${{ matrix.group }}) (mypy, mypy, ) (push) Waiting to run
pre-commit / pre-commit (${{ matrix.group }}) (pylint, pylint, ) (push) Waiting to run
pre-commit / pre-commit (${{ matrix.group }}) (rest, , mypy,pylint) (push) Waiting to run
Tests / test (push) Waiting to run
Tests / web-coverage (push) Waiting to run
repo-contract / repo contract (push) Waiting to run
budget: resolve gaming time from the shared earned_time registry
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-04 19:01:27 +02:00

42 lines
1.3 KiB
Python

"""Pin the day ``resolve_budget`` believes it is, around the 5h -> 4h base cut.
``earned_time`` takes the reading hour off the floor from
``READING.penalty_from`` on. A budget test that reads the real clock would
change its answer on 2026-10-01, so every such test pins the date on one side
of the cut.
The module asks ``datetime.now().astimezone().date()``, so that chain is what
the pin answers.
"""
from __future__ import annotations
from datetime import timedelta
from typing import TYPE_CHECKING
from unittest.mock import MagicMock, patch
import earned_time
if TYPE_CHECKING:
from contextlib import AbstractContextManager
from datetime import date
_CUT = earned_time.READING.penalty_from
assert _CUT is not None, "earned_time.READING lost its penalty_from date"
AFTER_CUT = _CUT
BEFORE_CUT = _CUT - timedelta(days=1)
def pin_today(day: date) -> AbstractContextManager[object]:
"""Make ``_budget_resolve`` see ``day`` as today.
Args:
day: The local date the module's clock should report.
Returns:
A patch context manager replacing the module's ``datetime`` binding.
"""
clock = MagicMock()
clock.now.return_value.astimezone.return_value.date.return_value = day
return patch("steam_backlog_enforcer._budget_resolve.datetime", clock)