"""Tests for the NFO reader (src.core.nfo).""" from src.core.nfo import NfoData, find_nfo, read_nfo MOVIE_NFO = """ Matrix 1999 Akční Sci-Fi USA 8.7 603 """ def _movie(tmp_path): v = tmp_path / "Matrix (1999) [tmdbid-603].mkv" v.write_bytes(b"x") return v def test_read_nfo_sibling(tmp_path): video = _movie(tmp_path) video.with_suffix(".nfo").write_text(MOVIE_NFO, encoding="utf-8") nfo = read_nfo(video) assert nfo == NfoData( title="Matrix", year="1999", genres=["Akční", "Sci-Fi"], countries=["USA"], rating=87, tmdb_id=603) def test_rating_scaled_to_percent(tmp_path): video = _movie(tmp_path) video.with_suffix(".nfo").write_text( "7.3", encoding="utf-8") assert read_nfo(video).rating == 73 def test_rating_from_ratings_block(tmp_path): video = _movie(tmp_path) video.with_suffix(".nfo").write_text( "9.1" "", encoding="utf-8") assert read_nfo(video).rating == 91 def test_tmdbid_from_tmdbid_tag(tmp_path): video = _movie(tmp_path) video.with_suffix(".nfo").write_text( "603", encoding="utf-8") assert read_nfo(video).tmdb_id == 603 def test_find_prefers_sibling_over_movie_nfo(tmp_path): folder = tmp_path / "Matrix (1999)" folder.mkdir() video = folder / "Matrix (1999).mkv" video.write_bytes(b"x") (folder / "movie.nfo").write_text(MOVIE_NFO, encoding="utf-8") # no sibling → movie.nfo is used assert find_nfo(video).name == "movie.nfo" # sibling present → it wins video.with_suffix(".nfo").write_text(MOVIE_NFO, encoding="utf-8") assert find_nfo(video).name == "Matrix (1999).nfo" def test_missing_nfo_returns_none(tmp_path): assert read_nfo(_movie(tmp_path)) is None def test_broken_nfo_returns_none(tmp_path): video = _movie(tmp_path) video.with_suffix(".nfo").write_text("unclosed", encoding="utf-8") assert read_nfo(video) is None def test_field_values(): nfo = NfoData(year="1999", genres=["A", "B"], countries=["USA"], rating=87) assert nfo.field_values("genres") == ["A", "B"] assert nfo.field_values("countries") == ["USA"] assert nfo.field_values("year") == ["1999"] assert nfo.field_values("rating") == ["87"] assert nfo.field_values("directors") == [] def test_refresh_tags_from_nfo(tmp_path, monkeypatch): import src.core.config as config_module monkeypatch.setattr(config_module, "GLOBAL_CONFIG_FILE", tmp_path / ".gtag") from src.core.tag_manager import TagManager from src.core.file_manager import FileManager fm = FileManager(TagManager()) fm.set_pool_dir(tmp_path / "pool") (tmp_path / "raw.mkv").write_bytes(b"x") movie = fm.import_movie(tmp_path / "raw.mkv", "Matrix", year=1999, tmdb_id=603) movie.file_path.with_suffix(".nfo").write_text(MOVIE_NFO, encoding="utf-8") result = fm.refresh_tags_from_nfo() assert result == {"updated": 1, "without_nfo": 0} paths = {t.full_path for t in movie.tags} assert {"Žánr/Akční", "Žánr/Sci-Fi", "Rok/1999", "Země původu/USA"} <= paths assert movie.meta == {"year": "1999", "rating": 87}