aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-node/tests/test_media_meta_request.py
diff options
context:
space:
mode:
Diffstat (limited to 'packages/meshbay-node/tests/test_media_meta_request.py')
-rw-r--r--packages/meshbay-node/tests/test_media_meta_request.py37
1 files changed, 37 insertions, 0 deletions
diff --git a/packages/meshbay-node/tests/test_media_meta_request.py b/packages/meshbay-node/tests/test_media_meta_request.py
index a7355e8..a752825 100644
--- a/packages/meshbay-node/tests/test_media_meta_request.py
+++ b/packages/meshbay-node/tests/test_media_meta_request.py
@@ -112,6 +112,43 @@ async def test_two_episodes_in_the_same_season_folder_each_get_their_own_metadat
"two different shows sharing a season folder must not resolve to the same match")
+async def test_a_reclassified_file_ignores_its_stale_cached_match(media_cache):
+ """
+ A file's classification (movie vs show) comes from its IndexEntry's
+ season/episode — set by index-time enrichment, which can change its
+ mind on a later scan (a filename-parsing fix reclassifying a whole
+ folder from "movie" to "tv", say) without media_cache's file->tmdb
+ mapping knowing anything happened: that cache is keyed by the file's
+ content hash alone, unchanged by any such reclassification. Found
+ live: exactly this scenario left every affected file answering with
+ its stale, wrong-kind-of-match forever, since the cache was trusted
+ before ever comparing media_type against what the entry resolves to
+ now.
+ """
+ index = GroupIndex(group_id="g" * 32, sk_node=Ed25519PrivateKey.generate())
+ entry = IndexEntry(id="id-1", name="ep.mkv", path="shows/Show/Specials",
+ size=1, type="video", added_at=0,
+ display_title="Some Show", season=0, episode=1)
+ index.add_entry(entry)
+ # Pre-populate the cache exactly as it would be left over from before
+ # entry.season/episode existed — a movie search matched to some
+ # unrelated title, cached by this file's content hash.
+ await media_cache.set_file_tmdb("id-1", "stale-movie-id", "movie")
+ await media_cache.set_tmdb_meta("stale-movie-id", "movie", {
+ "title": "An Unrelated Movie", "original_title": "An Unrelated Movie",
+ "release_date": "1999-01-01", "confidence": 1.0,
+ })
+ client = FakeTmdbClient()
+ session = _session(index, media_cache, client)
+
+ await session._do_media_meta_request({"file_id": "id-1"})
+
+ resp = session.sent[0]
+ assert resp["title"] == "Some Show"
+ assert ("tv", "Some Show") in client.searched
+ assert resp["tmdb_id"] != "stale-movie-id"
+
+
async def test_missing_file_id_is_refused(media_cache):
index = GroupIndex(group_id="g" * 32, sk_node=Ed25519PrivateKey.generate())
session = _session(index, media_cache, FakeTmdbClient())