49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
import os
|
|
import time
|
|
import pytest
|
|
from cache import get_cached, set_cached
|
|
|
|
|
|
@pytest.fixture
|
|
def tmp_cache(tmp_path, monkeypatch):
|
|
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):
|
|
assert get_cached('no_such_key') is None
|
|
|
|
|
|
def test_set_and_get_cached_roundtrip(tmp_cache):
|
|
set_cached('my_key', {'a': 1})
|
|
assert get_cached('my_key') == {'a': 1}
|
|
|
|
|
|
def test_get_cached_no_ttl_never_expires(tmp_cache):
|
|
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):
|
|
set_cached('k', 'fresh')
|
|
assert get_cached('k', ttl=3600) == 'fresh'
|
|
|
|
|
|
def test_get_cached_expired_returns_none(tmp_cache):
|
|
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 = tmp_cache / 'broken.json'
|
|
path.write_text('{"not": "finished"')
|
|
|
|
assert get_cached('broken') is None
|