Task 3.1: Standardize series identifiers in DownloadService
- Updated DownloadService to use 'serie_id' (provider key) for identification - Changed 'serie_folder' from Optional to required in models (DownloadItem, DownloadRequest) - Removed incorrect fallback logic that used serie_id as folder name - Enhanced docstrings to clarify purpose of each identifier field: * serie_id: Provider key (e.g., 'attack-on-titan') for lookups * serie_folder: Filesystem folder name (e.g., 'Attack on Titan (2013)') for file operations - Updated logging to reference 'serie_key' for clarity - Fixed all unit tests to include required serie_folder field - All 25 download service tests passing - All 47 download model tests passing - Updated infrastructure.md with detailed documentation - Marked Task 3.1 as completed in instructions.md Benefits: - Clear separation between provider identifier and filesystem path - Prevents confusion from mixing different identifier types - Consistent with broader series identifier standardization effort - Better error messages when required fields are missing
This commit is contained in:
@@ -174,6 +174,7 @@ class TestDownloadItem:
|
||||
item = DownloadItem(
|
||||
id="download_123",
|
||||
serie_id="serie_456",
|
||||
serie_folder="Test Series (2023)",
|
||||
serie_name="Test Series",
|
||||
episode=episode,
|
||||
status=DownloadStatus.PENDING,
|
||||
@@ -192,6 +193,7 @@ class TestDownloadItem:
|
||||
item = DownloadItem(
|
||||
id="test_id",
|
||||
serie_id="serie_id",
|
||||
serie_folder="Test Folder",
|
||||
serie_name="Test",
|
||||
episode=episode
|
||||
)
|
||||
@@ -211,6 +213,7 @@ class TestDownloadItem:
|
||||
item = DownloadItem(
|
||||
id="test_id",
|
||||
serie_id="serie_id",
|
||||
serie_folder="Test Folder",
|
||||
serie_name="Test",
|
||||
episode=episode,
|
||||
progress=progress
|
||||
@@ -225,6 +228,7 @@ class TestDownloadItem:
|
||||
item = DownloadItem(
|
||||
id="test_id",
|
||||
serie_id="serie_id",
|
||||
serie_folder="Test Folder",
|
||||
serie_name="Test",
|
||||
episode=episode,
|
||||
started_at=now,
|
||||
@@ -240,6 +244,7 @@ class TestDownloadItem:
|
||||
DownloadItem(
|
||||
id="test_id",
|
||||
serie_id="serie_id",
|
||||
serie_folder="Test Folder",
|
||||
serie_name="",
|
||||
episode=episode
|
||||
)
|
||||
@@ -251,6 +256,7 @@ class TestDownloadItem:
|
||||
DownloadItem(
|
||||
id="test_id",
|
||||
serie_id="serie_id",
|
||||
serie_folder="Test Folder",
|
||||
serie_name="Test",
|
||||
episode=episode,
|
||||
retry_count=-1
|
||||
@@ -263,6 +269,7 @@ class TestDownloadItem:
|
||||
item = DownloadItem(
|
||||
id="test_id",
|
||||
serie_id="serie_id",
|
||||
serie_folder="Test Folder",
|
||||
serie_name="Test",
|
||||
episode=episode
|
||||
)
|
||||
@@ -279,6 +286,7 @@ class TestQueueStatus:
|
||||
item = DownloadItem(
|
||||
id="test_id",
|
||||
serie_id="serie_id",
|
||||
serie_folder="Test Folder",
|
||||
serie_name="Test",
|
||||
episode=episode
|
||||
)
|
||||
@@ -375,6 +383,7 @@ class TestDownloadRequest:
|
||||
episode2 = EpisodeIdentifier(season=1, episode=2)
|
||||
request = DownloadRequest(
|
||||
serie_id="serie_123",
|
||||
serie_folder="Test Series (2023)",
|
||||
serie_name="Test Series",
|
||||
episodes=[episode1, episode2],
|
||||
priority=DownloadPriority.HIGH
|
||||
@@ -389,16 +398,21 @@ class TestDownloadRequest:
|
||||
episode = EpisodeIdentifier(season=1, episode=1)
|
||||
request = DownloadRequest(
|
||||
serie_id="serie_123",
|
||||
serie_folder="Test Series (2023)",
|
||||
serie_name="Test Series",
|
||||
episodes=[episode]
|
||||
)
|
||||
assert request.priority == DownloadPriority.NORMAL
|
||||
|
||||
def test_empty_episodes_list_allowed(self):
|
||||
"""Test that empty episodes list is allowed at model level (endpoint validates)."""
|
||||
"""Test that empty episodes list is allowed at model level.
|
||||
|
||||
(endpoint validates)
|
||||
"""
|
||||
# Empty list is now allowed at model level; endpoint validates
|
||||
request = DownloadRequest(
|
||||
serie_id="serie_123",
|
||||
serie_folder="Test Series (2023)",
|
||||
serie_name="Test Series",
|
||||
episodes=[]
|
||||
)
|
||||
@@ -410,6 +424,7 @@ class TestDownloadRequest:
|
||||
with pytest.raises(ValidationError):
|
||||
DownloadRequest(
|
||||
serie_id="serie_123",
|
||||
serie_folder="Test Series (2023)",
|
||||
serie_name="",
|
||||
episodes=[episode]
|
||||
)
|
||||
@@ -453,7 +468,10 @@ class TestQueueOperationRequest:
|
||||
assert "item1" in request.item_ids
|
||||
|
||||
def test_empty_item_ids_allowed(self):
|
||||
"""Test that empty item_ids list is allowed at model level (endpoint validates)."""
|
||||
"""Test that empty item_ids list is allowed at model level.
|
||||
|
||||
(endpoint validates)
|
||||
"""
|
||||
# Empty list is now allowed at model level; endpoint validates
|
||||
request = QueueOperationRequest(item_ids=[])
|
||||
assert request.item_ids == []
|
||||
@@ -512,6 +530,7 @@ class TestModelSerialization:
|
||||
item = DownloadItem(
|
||||
id="test_id",
|
||||
serie_id="serie_id",
|
||||
serie_folder="Test Series (2023)",
|
||||
serie_name="Test Series",
|
||||
episode=episode
|
||||
)
|
||||
@@ -526,6 +545,7 @@ class TestModelSerialization:
|
||||
data = {
|
||||
"id": "test_id",
|
||||
"serie_id": "serie_id",
|
||||
"serie_folder": "Test Series (2023)",
|
||||
"serie_name": "Test Series",
|
||||
"episode": {
|
||||
"season": 1,
|
||||
|
||||
Reference in New Issue
Block a user