Task 4.5: Update Pydantic models to use key as primary identifier

- Updated AnimeSeriesResponse and SearchResult models in anime.py:
  - Changed 'id' field to 'key' as the primary series identifier
  - Added 'folder' as optional metadata field
  - Added field validator to normalize key to lowercase and strip whitespace
  - Added comprehensive docstrings explaining identifier usage

- Updated DownloadItem and DownloadRequest models in download.py:
  - Added field validator for serie_id normalization (lowercase, stripped)
  - Improved documentation for serie_id (primary identifier) vs serie_folder (metadata)

- Updated test_anime_models.py with comprehensive tests:
  - Tests for key normalization and whitespace stripping
  - Tests for folder as optional metadata
  - Reorganized tests into proper class structure

- Updated test_download_models.py with validator tests:
  - Tests for serie_id normalization in DownloadItem
  - Tests for serie_id normalization in DownloadRequest

All 885 tests pass.
This commit is contained in:
2025-11-27 20:01:33 +01:00
parent 3c8ba1d48c
commit 6d2a791a9d
4 changed files with 273 additions and 96 deletions

View File

@@ -187,6 +187,30 @@ class TestDownloadItem:
assert item.status == DownloadStatus.PENDING
assert item.priority == DownloadPriority.HIGH
def test_serie_id_normalized_to_lowercase(self):
"""Test that serie_id (key) is normalized to lowercase."""
episode = EpisodeIdentifier(season=1, episode=1)
item = DownloadItem(
id="test_id",
serie_id="ATTACK-ON-TITAN",
serie_folder="Test Folder",
serie_name="Test",
episode=episode
)
assert item.serie_id == "attack-on-titan"
def test_serie_id_whitespace_stripped(self):
"""Test that serie_id whitespace is stripped."""
episode = EpisodeIdentifier(season=1, episode=1)
item = DownloadItem(
id="test_id",
serie_id=" attack-on-titan ",
serie_folder="Test Folder",
serie_name="Test",
episode=episode
)
assert item.serie_id == "attack-on-titan"
def test_download_item_defaults(self):
"""Test default values for download item."""
episode = EpisodeIdentifier(season=1, episode=1)
@@ -393,6 +417,28 @@ class TestDownloadRequest:
assert len(request.episodes) == 2
assert request.priority == DownloadPriority.HIGH
def test_serie_id_normalized_to_lowercase(self):
"""Test that serie_id (key) is normalized to lowercase."""
episode = EpisodeIdentifier(season=1, episode=1)
request = DownloadRequest(
serie_id="ATTACK-ON-TITAN",
serie_folder="Test Series (2023)",
serie_name="Test Series",
episodes=[episode]
)
assert request.serie_id == "attack-on-titan"
def test_serie_id_whitespace_stripped(self):
"""Test that serie_id whitespace is stripped."""
episode = EpisodeIdentifier(season=1, episode=1)
request = DownloadRequest(
serie_id=" attack-on-titan ",
serie_folder="Test Series (2023)",
serie_name="Test Series",
episodes=[episode]
)
assert request.serie_id == "attack-on-titan"
def test_download_request_default_priority(self):
"""Test default priority for download request."""
episode = EpisodeIdentifier(season=1, episode=1)