aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-node/tests/test_media_cache.py
diff options
context:
space:
mode:
authorChristophe Besson <cbesson@gmail.com>2026-08-24 14:33:38 +0200
committerChristophe Besson <cbesson@gmail.com>2026-08-24 14:33:38 +0200
commit317f09328ed8bf20148b707470c9b0fe82e59575 (patch)
treeba8daf5dcf050d44b7b0e766babbfda8fadac59f /packages/meshbay-node/tests/test_media_cache.py
parentb6e2dcea65124673da047f9b3c92bc5e25980d63 (diff)
parent0b0da86f1f9d6f0b1a27b5e1e1658c42de9f356a (diff)
downloadmeshbay-317f09328ed8bf20148b707470c9b0fe82e59575.tar.gz
Merge branch 'docs/mediacenter-videos-app': Videos group app
Poster grid / flat list browsing, TMDB metadata enrichment, thumbnail generation and caching, season-specific overviews, manual match correction, and the create-group wizard's app-selection step. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LAmyXtc6dAADsH23ydXQpY
Diffstat (limited to 'packages/meshbay-node/tests/test_media_cache.py')
-rw-r--r--packages/meshbay-node/tests/test_media_cache.py71
1 files changed, 71 insertions, 0 deletions
diff --git a/packages/meshbay-node/tests/test_media_cache.py b/packages/meshbay-node/tests/test_media_cache.py
new file mode 100644
index 0000000..b66c448
--- /dev/null
+++ b/packages/meshbay-node/tests/test_media_cache.py
@@ -0,0 +1,71 @@
+"""Tests for media_cache.py โ€” TMDB/thumbnail cache and its pruning obligation."""
+
+import time
+
+import pytest
+
+from meshbay_node.media_cache import MediaCache, TMDB_META_TTL_SECS
+
+
+@pytest.fixture
+async def cache(tmp_path):
+ c = MediaCache(db_path=tmp_path / "media_cache.db")
+ await c.open()
+ yield c
+ await c.close()
+
+
+@pytest.mark.asyncio
+async def test_file_tmdb_round_trip(cache):
+ assert await cache.get_file_tmdb("file1") is None
+
+ await cache.set_file_tmdb("file1", "12345", "movie")
+
+ assert await cache.get_file_tmdb("file1") == ("12345", "movie")
+
+
+@pytest.mark.asyncio
+async def test_tmdb_meta_round_trip(cache):
+ assert await cache.get_tmdb_meta("12345", "movie") is None
+
+ await cache.set_tmdb_meta("12345", "movie", {"title": "A Movie", "vote_average": 7.5})
+
+ meta = await cache.get_tmdb_meta("12345", "movie")
+ assert meta == {"title": "A Movie", "vote_average": 7.5}
+
+
+@pytest.mark.asyncio
+async def test_tmdb_meta_expires_after_ttl(cache):
+ await cache._db.execute(
+ "INSERT INTO tmdb_meta (tmdb_id, media_type, json, fetched_at) VALUES (?, ?, ?, ?)",
+ ("999", "movie", '{"title": "Old"}', time.time() - TMDB_META_TTL_SECS - 1),
+ )
+ await cache._db.commit()
+
+ assert await cache.get_tmdb_meta("999", "movie") is None
+
+
+@pytest.mark.asyncio
+async def test_thumb_round_trip(cache):
+ assert await cache.get_thumb("thumbhash1") is None
+
+ await cache.put_thumb("thumbhash1", "file1", b"\xff\xd8fakejpeg")
+
+ assert await cache.get_thumb("thumbhash1") == b"\xff\xd8fakejpeg"
+
+
+@pytest.mark.asyncio
+async def test_prune_file_removes_thumb_and_mapping_but_not_shared_meta(cache):
+ # Two episodes of the same show share one tmdb_meta row (ยง2's stated case).
+ await cache.set_file_tmdb("ep1", "555", "tv")
+ await cache.set_file_tmdb("ep2", "555", "tv")
+ await cache.set_tmdb_meta("555", "tv", {"name": "A Show"})
+ await cache.put_thumb("thumb-ep1", "ep1", b"jpeg-bytes-1")
+
+ await cache.prune_file("ep1")
+
+ assert await cache.get_file_tmdb("ep1") is None
+ assert await cache.get_thumb("thumb-ep1") is None
+ # ep2's own mapping and the shared show metadata both survive
+ assert await cache.get_file_tmdb("ep2") == ("555", "tv")
+ assert await cache.get_tmdb_meta("555", "tv") == {"name": "A Show"}