"""Tests for pool → TMDb migration (src.core.migrate + FileManager).""" import pytest from src.core.migrate import classify, normalize from src.core.tmdb import TmdbResult def test_normalize_folds_diacritics_and_punct(): assert normalize("Šíleně smutná princezna!") == "silene smutna princezna" assert normalize("Amélie z Montmartru") == "amelie z montmartru" def test_classify_auto_on_exact_unique(): cands = [TmdbResult(603, "Matrix", "1999", "movie")] status, chosen = classify("Matrix", "1999", cands) assert status == "auto" and chosen.tmdb_id == 603 def test_classify_auto_disambiguates_by_year(): cands = [ TmdbResult(1, "Solaris", "1972", "movie"), TmdbResult(2, "Solaris", "2002", "movie"), ] # local year 1972 → unique exact-year match → auto picks the 1972 one assert classify("Solaris", "1972", cands) == ("auto", cands[0]) def test_classify_ambiguous_when_year_matches_none(): cands = [ TmdbResult(1, "Solaris", "1972", "movie"), TmdbResult(2, "Solaris", "2002", "movie"), ] status, chosen = classify("Solaris", "1990", cands) # year close to neither → no unique exact-year → ambiguous (top hit preselected) assert status == "ambiguous" and chosen.tmdb_id == 1 def test_classify_ambiguous_without_year(): cands = [TmdbResult(603, "Matrix", "1999", "movie")] status, _ = classify("Matrix", None, cands) assert status == "ambiguous" # no local year → user confirms def test_classify_no_match(): assert classify("Nic", "2000", []) == ("no_match", None) class TestFileManagerMigrate: @pytest.fixture def file_manager(self, tmp_path, monkeypatch): import src.core.config as config_module monkeypatch.setattr(config_module, "GLOBAL_CONFIG_FILE", tmp_path / ".gtag") from src.core.file_manager import FileManager from src.core.tag_manager import TagManager fm = FileManager(TagManager()) fm.set_pool_dir(tmp_path / "pool") return fm def test_match_and_assign(self, file_manager, tmp_path, monkeypatch): (tmp_path / "a.mkv").write_bytes(b"x") movie = file_manager.import_movie(tmp_path / "a.mkv", "Matrix", year=1999) assert "[tmdbid" not in movie.file_path.name # not migrated yet from src.core import tmdb monkeypatch.setattr( tmdb, "search_movie", lambda q, year=None, limit=5: [TmdbResult(603, "Matrix", "1999", "movie")], ) proposals = file_manager.match_pool_to_tmdb() assert len(proposals) == 1 p = proposals[0] assert p.status == "auto" and p.chosen.tmdb_id == 603 file_manager.assign_tmdb_id(p.file, p.chosen.tmdb_id, p.chosen.year) assert movie.file_path.name == "Matrix (1999) [tmdbid-603].mkv" def test_match_skips_already_migrated(self, file_manager, tmp_path, monkeypatch): (tmp_path / "a.mkv").write_bytes(b"x") file_manager.import_movie(tmp_path / "a.mkv", "Matrix", year=1999, tmdb_id=603) from src.core import tmdb called = [] monkeypatch.setattr( tmdb, "search_movie", lambda q, year=None, limit=5: called.append(q) or [] ) proposals = file_manager.match_pool_to_tmdb() assert proposals == [] and called == [] # already has id → not searched def test_assign_fills_missing_year_from_tmdb(self, file_manager, tmp_path): (tmp_path / "a.mkv").write_bytes(b"x") movie = file_manager.import_movie(tmp_path / "a.mkv", "Matrix") # no year assert movie.file_path.name == "Matrix.mkv" file_manager.assign_tmdb_id(movie, 603, "1999") # TMDb supplies the year assert movie.file_path.name == "Matrix (1999) [tmdbid-603].mkv"