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