paddington-eurostar/tests/test_cache.py
Edward Betts 13c4341f3a Add full type annotations and black formatting across all modules
Annotated all functions with mypy --strict-compatible types (-> None, dict[str,
Any], Generator types, etc.), added # type: ignore for untyped third-party libs
(lxml), and reformatted with black. All 18 source files now pass mypy --strict
with zero errors.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 21:48:53 +01:00

53 lines
1.4 KiB
Python

import os
import time
from pathlib import Path
from typing import Any
import pytest
from cache import get_cached, set_cached
@pytest.fixture
def tmp_cache(tmp_path: Path, monkeypatch: Any) -> Path:
import cache as cache_module
monkeypatch.setattr(cache_module, "CACHE_DIR", str(tmp_path))
return tmp_path
def test_get_cached_returns_none_for_missing_key(tmp_cache: Path) -> None:
assert get_cached("no_such_key") is None
def test_set_and_get_cached_roundtrip(tmp_cache: Path) -> None:
set_cached("my_key", {"a": 1})
assert get_cached("my_key") == {"a": 1}
def test_get_cached_no_ttl_never_expires(tmp_cache: Path) -> None:
set_cached("k", [1, 2, 3])
# Backdate the file by 2 days
path = tmp_cache / "k.json"
old = time.time() - 2 * 86400
os.utime(path, (old, old))
assert get_cached("k") == [1, 2, 3]
def test_get_cached_within_ttl(tmp_cache: Path) -> None:
set_cached("k", "fresh")
assert get_cached("k", ttl=3600) == "fresh"
def test_get_cached_expired_returns_none(tmp_cache: Path) -> None:
set_cached("k", "stale")
path = tmp_cache / "k.json"
old = time.time() - 25 * 3600 # 25 hours ago
os.utime(path, (old, old))
assert get_cached("k", ttl=24 * 3600) is None
def test_get_cached_invalid_json_returns_none(tmp_cache: Path) -> None:
path = tmp_cache / "broken.json"
path.write_text('{"not": "finished"')
assert get_cached("broken") is None