Task 3.3: Update ProgressService to use key as identifier
- Added optional 'key' and 'folder' fields to ProgressUpdate dataclass - key: Primary series identifier (provider key, e.g., 'attack-on-titan') - folder: Optional series folder name for display (e.g., 'Attack on Titan (2013)') - Updated start_progress() and update_progress() methods to accept key/folder parameters - Enhanced to_dict() serialization to include key/folder when present - Updated all docstrings to clarify identifier usage - Added 5 new comprehensive unit tests for key/folder functionality - All 25 ProgressService tests passing - Updated infrastructure.md with series identifier documentation - Maintains backward compatibility - fields are optional - Completed Phase 3, Task 3.3 of identifier standardization initiative
This commit is contained in:
@@ -508,3 +508,94 @@ class TestProgressService:
|
||||
assert progress.metadata["initial"] == "value"
|
||||
assert progress.metadata["additional"] == "data"
|
||||
assert progress.metadata["speed"] == 1.5
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_progress_with_key_and_folder(self, service):
|
||||
"""Test progress tracking with series key and folder."""
|
||||
# Start progress with key and folder
|
||||
update = await service.start_progress(
|
||||
progress_id="download-series-1",
|
||||
progress_type=ProgressType.DOWNLOAD,
|
||||
title="Downloading Attack on Titan",
|
||||
key="attack-on-titan",
|
||||
folder="Attack on Titan (2013)",
|
||||
total=100,
|
||||
)
|
||||
|
||||
assert update.key == "attack-on-titan"
|
||||
assert update.folder == "Attack on Titan (2013)"
|
||||
|
||||
# Verify to_dict includes key and folder
|
||||
dict_repr = update.to_dict()
|
||||
assert dict_repr["key"] == "attack-on-titan"
|
||||
assert dict_repr["folder"] == "Attack on Titan (2013)"
|
||||
|
||||
# Update progress and verify key/folder are preserved
|
||||
updated = await service.update_progress(
|
||||
progress_id="download-series-1",
|
||||
current=50,
|
||||
)
|
||||
|
||||
assert updated.key == "attack-on-titan"
|
||||
assert updated.folder == "Attack on Titan (2013)"
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_progress_update_key_and_folder(self, service):
|
||||
"""Test updating key and folder in existing progress."""
|
||||
# Start without key/folder
|
||||
await service.start_progress(
|
||||
progress_id="test-1",
|
||||
progress_type=ProgressType.SCAN,
|
||||
title="Test Scan",
|
||||
)
|
||||
|
||||
# Update with key and folder
|
||||
updated = await service.update_progress(
|
||||
progress_id="test-1",
|
||||
key="one-piece",
|
||||
folder="One Piece (1999)",
|
||||
current=10,
|
||||
)
|
||||
|
||||
assert updated.key == "one-piece"
|
||||
assert updated.folder == "One Piece (1999)"
|
||||
|
||||
# Verify to_dict includes the fields
|
||||
dict_repr = updated.to_dict()
|
||||
assert dict_repr["key"] == "one-piece"
|
||||
assert dict_repr["folder"] == "One Piece (1999)"
|
||||
|
||||
def test_progress_update_to_dict_without_key_folder(self):
|
||||
"""Test to_dict doesn't include key/folder if not set."""
|
||||
update = ProgressUpdate(
|
||||
id="test-1",
|
||||
type=ProgressType.SYSTEM,
|
||||
status=ProgressStatus.STARTED,
|
||||
title="System Task",
|
||||
)
|
||||
|
||||
result = update.to_dict()
|
||||
|
||||
# key and folder should not be in dict if not set
|
||||
assert "key" not in result
|
||||
assert "folder" not in result
|
||||
|
||||
def test_progress_update_creation_with_key_folder(self):
|
||||
"""Test creating progress update with key and folder."""
|
||||
update = ProgressUpdate(
|
||||
id="test-1",
|
||||
type=ProgressType.DOWNLOAD,
|
||||
status=ProgressStatus.STARTED,
|
||||
title="Test Download",
|
||||
key="naruto",
|
||||
folder="Naruto (2002)",
|
||||
total=100,
|
||||
)
|
||||
|
||||
assert update.key == "naruto"
|
||||
assert update.folder == "Naruto (2002)"
|
||||
|
||||
# Verify to_dict includes them
|
||||
result = update.to_dict()
|
||||
assert result["key"] == "naruto"
|
||||
assert result["folder"] == "Naruto (2002)"
|
||||
|
||||
Reference in New Issue
Block a user