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:
2025-11-23 20:13:24 +01:00
parent 883f89b113
commit e1c8b616a8
6 changed files with 136 additions and 58 deletions

View File

@@ -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,