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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user