CSFD integration
This commit is contained in:
@@ -263,3 +263,155 @@ class TestFile:
|
||||
tag_paths2 = {tag.full_path for tag in file_obj2.tags}
|
||||
assert tag_paths == tag_paths2
|
||||
assert file_obj2.date == "2025-01-01"
|
||||
|
||||
|
||||
class TestFileCSFDIntegration:
|
||||
"""Testy pro CSFD integraci v File"""
|
||||
|
||||
@pytest.fixture
|
||||
def temp_dir(self, tmp_path):
|
||||
return tmp_path
|
||||
|
||||
@pytest.fixture
|
||||
def tag_manager(self):
|
||||
return TagManager()
|
||||
|
||||
@pytest.fixture
|
||||
def test_file(self, temp_dir):
|
||||
test_file = temp_dir / "film.mkv"
|
||||
test_file.write_text("video content")
|
||||
return test_file
|
||||
|
||||
def test_file_csfd_url_initial(self, test_file, tag_manager):
|
||||
"""Test že csfd_url je None při vytvoření"""
|
||||
file_obj = File(test_file, tag_manager)
|
||||
assert file_obj.csfd_url is None
|
||||
|
||||
def test_file_set_csfd_url(self, test_file, tag_manager):
|
||||
"""Test nastavení CSFD URL"""
|
||||
file_obj = File(test_file, tag_manager)
|
||||
file_obj.set_csfd_url("https://www.csfd.cz/film/9423-pane-vy-jste-vdova/")
|
||||
assert file_obj.csfd_url == "https://www.csfd.cz/film/9423-pane-vy-jste-vdova/"
|
||||
|
||||
def test_file_set_csfd_url_persistence(self, test_file, tag_manager):
|
||||
"""Test že CSFD URL přežije reload"""
|
||||
file_obj = File(test_file, tag_manager)
|
||||
file_obj.set_csfd_url("https://www.csfd.cz/film/123/")
|
||||
|
||||
file_obj2 = File(test_file, tag_manager)
|
||||
assert file_obj2.csfd_url == "https://www.csfd.cz/film/123/"
|
||||
|
||||
def test_file_set_csfd_url_none(self, test_file, tag_manager):
|
||||
"""Test smazání CSFD URL"""
|
||||
file_obj = File(test_file, tag_manager)
|
||||
file_obj.set_csfd_url("https://www.csfd.cz/film/123/")
|
||||
file_obj.set_csfd_url(None)
|
||||
assert file_obj.csfd_url is None
|
||||
|
||||
def test_file_set_csfd_url_empty(self, test_file, tag_manager):
|
||||
"""Test nastavení prázdného řetězce jako CSFD URL"""
|
||||
file_obj = File(test_file, tag_manager)
|
||||
file_obj.set_csfd_url("https://www.csfd.cz/film/123/")
|
||||
file_obj.set_csfd_url("")
|
||||
assert file_obj.csfd_url is None
|
||||
|
||||
def test_file_csfd_url_in_metadata(self, test_file, tag_manager):
|
||||
"""Test že CSFD URL je uložena v metadatech"""
|
||||
file_obj = File(test_file, tag_manager)
|
||||
file_obj.set_csfd_url("https://www.csfd.cz/film/999/")
|
||||
|
||||
import json
|
||||
with open(file_obj.metadata_filename, "r", encoding="utf-8") as f:
|
||||
data = json.load(f)
|
||||
|
||||
assert data["csfd_url"] == "https://www.csfd.cz/film/999/"
|
||||
|
||||
def test_apply_csfd_tags_no_url(self, test_file, tag_manager):
|
||||
"""Test apply_csfd_tags bez nastaveného URL"""
|
||||
file_obj = File(test_file, tag_manager)
|
||||
result = file_obj.apply_csfd_tags()
|
||||
|
||||
assert result["success"] is False
|
||||
assert "URL není nastavena" in result["error"]
|
||||
assert result["tags_added"] == []
|
||||
|
||||
@pytest.fixture
|
||||
def mock_csfd_movie(self):
|
||||
"""Mock CSFDMovie pro testování"""
|
||||
from unittest.mock import MagicMock
|
||||
movie = MagicMock()
|
||||
movie.title = "Test Film"
|
||||
movie.year = 2020
|
||||
movie.genres = ["Komedie", "Drama"]
|
||||
movie.country = "Česko"
|
||||
movie.rating = 85
|
||||
return movie
|
||||
|
||||
def test_apply_csfd_tags_success(self, test_file, tag_manager, mock_csfd_movie):
|
||||
"""Test úspěšného načtení tagů z CSFD"""
|
||||
from unittest.mock import patch
|
||||
|
||||
file_obj = File(test_file, tag_manager)
|
||||
file_obj.set_csfd_url("https://www.csfd.cz/film/123/")
|
||||
|
||||
with patch("src.core.csfd.fetch_movie", return_value=mock_csfd_movie):
|
||||
result = file_obj.apply_csfd_tags()
|
||||
|
||||
assert result["success"] is True
|
||||
assert "Žánr/Komedie" in result["tags_added"]
|
||||
assert "Žánr/Drama" in result["tags_added"]
|
||||
assert "Rok/2020" in result["tags_added"]
|
||||
assert "Země/Česko" in result["tags_added"]
|
||||
|
||||
# Kontrola že tagy jsou opravdu přidány
|
||||
tag_paths = {tag.full_path for tag in file_obj.tags}
|
||||
assert "Žánr/Komedie" in tag_paths
|
||||
assert "Žánr/Drama" in tag_paths
|
||||
assert "Rok/2020" in tag_paths
|
||||
assert "Země/Česko" in tag_paths
|
||||
|
||||
def test_apply_csfd_tags_genres_only(self, test_file, tag_manager, mock_csfd_movie):
|
||||
"""Test načtení pouze žánrů"""
|
||||
from unittest.mock import patch
|
||||
|
||||
file_obj = File(test_file, tag_manager)
|
||||
file_obj.set_csfd_url("https://www.csfd.cz/film/123/")
|
||||
|
||||
with patch("src.core.csfd.fetch_movie", return_value=mock_csfd_movie):
|
||||
result = file_obj.apply_csfd_tags(add_genres=True, add_year=False, add_country=False)
|
||||
|
||||
assert result["success"] is True
|
||||
assert "Žánr/Komedie" in result["tags_added"]
|
||||
assert "Rok/2020" not in result["tags_added"]
|
||||
assert "Země/Česko" not in result["tags_added"]
|
||||
|
||||
def test_apply_csfd_tags_no_duplicate(self, test_file, tag_manager, mock_csfd_movie):
|
||||
"""Test že duplicitní tagy nejsou přidány"""
|
||||
from unittest.mock import patch
|
||||
|
||||
file_obj = File(test_file, tag_manager)
|
||||
file_obj.set_csfd_url("https://www.csfd.cz/film/123/")
|
||||
|
||||
# Přidáme tag ručně
|
||||
file_obj.add_tag("Žánr/Komedie")
|
||||
|
||||
with patch("src.core.csfd.fetch_movie", return_value=mock_csfd_movie):
|
||||
result = file_obj.apply_csfd_tags()
|
||||
|
||||
# Komedie by neměla být v tags_added, protože už existuje
|
||||
assert "Žánr/Komedie" not in result["tags_added"]
|
||||
assert "Žánr/Drama" in result["tags_added"]
|
||||
|
||||
def test_apply_csfd_tags_network_error(self, test_file, tag_manager):
|
||||
"""Test chyby při načítání z CSFD"""
|
||||
from unittest.mock import patch
|
||||
|
||||
file_obj = File(test_file, tag_manager)
|
||||
file_obj.set_csfd_url("https://www.csfd.cz/film/123/")
|
||||
|
||||
with patch("src.core.csfd.fetch_movie", side_effect=Exception("Network error")):
|
||||
result = file_obj.apply_csfd_tags()
|
||||
|
||||
assert result["success"] is False
|
||||
assert "error" in result
|
||||
assert result["tags_added"] == []
|
||||
|
||||
Reference in New Issue
Block a user