feat(dot_alfred): load_by_tmdb_id on release repos

Series repo returns (release, folder) so the upcoming sync
orchestrator can feed the library index's upsert(..., path=...).
Movie repo returns the release alone (folder is on release.folder
by the one-folder-one-file convention) — kept as a semantic alias
of find_by_tmdb_id for symmetry with the series side.
This commit is contained in:
2026-05-26 00:45:14 +02:00
parent 0dc053881a
commit 1efe9a82c1
2 changed files with 65 additions and 0 deletions
@@ -90,6 +90,30 @@ class TestSeriesReleaseRepositoryReads:
assert len(results) == 1
class TestSeriesReleaseRepositoryLoadByTmdbId:
def test_returns_release_and_folder_tuple(
self, tv_library, foundation_release
):
repo = DotAlfredSeriesReleaseRepository(tv_library)
repo.save(foundation_release, show_folder="Foundation")
result = repo.load_by_tmdb_id(TmdbId(84958))
assert result is not None
release, folder = result
assert release == foundation_release
assert folder == "Foundation"
def test_returns_none_when_tmdb_id_absent(
self, tv_library, foundation_release
):
repo = DotAlfredSeriesReleaseRepository(tv_library)
repo.save(foundation_release, show_folder="Foundation")
assert repo.load_by_tmdb_id(TmdbId(999999)) is None
def test_returns_none_on_empty_library(self, tv_library):
repo = DotAlfredSeriesReleaseRepository(tv_library)
assert repo.load_by_tmdb_id(TmdbId(84958)) is None
class TestSeriesReleaseRepositoryDelete:
def test_delete_removes_sidecar(self, tv_library, foundation_release):
repo = DotAlfredSeriesReleaseRepository(tv_library)
@@ -123,6 +147,20 @@ class TestMovieReleaseRepository:
restored = repo.find_by_tmdb_id(TmdbId(27205))
assert restored == inception_release
def test_load_by_tmdb_id_returns_release(
self, movie_library, inception_release
):
repo = DotAlfredMovieReleaseRepository(movie_library)
repo.save(inception_release)
assert repo.load_by_tmdb_id(TmdbId(27205)) == inception_release
def test_load_by_tmdb_id_returns_none_when_absent(
self, movie_library, inception_release
):
repo = DotAlfredMovieReleaseRepository(movie_library)
repo.save(inception_release)
assert repo.load_by_tmdb_id(TmdbId(999999)) is None
def test_anchor_mismatch_logs_warning(
self, movie_library, inception_release, caplog
):