Merge branch 'pr/NaruZosa/252' into decluttarr-v2

This commit is contained in:
Benjamin Harder
2025-06-02 14:26:03 +02:00
58 changed files with 848 additions and 744 deletions

View File

@@ -1,10 +1,12 @@
from unittest.mock import MagicMock
import pytest
from tests.jobs.utils import shared_fix_affected_items, shared_test_affected_items
from src.jobs.remove_missing_files import RemoveMissingFiles
@pytest.mark.asyncio
@pytest.mark.parametrize(
"queue_data, expected_download_ids",
("queue_data", "expected_download_ids"),
[
(
[ # valid failed torrent (warning + matching errorMessage)
@@ -12,13 +14,13 @@ from src.jobs.remove_missing_files import RemoveMissingFiles
{"downloadId": "2", "status": "warning", "errorMessage": "The download is missing files"},
{"downloadId": "3", "status": "warning", "errorMessage": "qBittorrent is reporting missing files"},
],
["1", "2", "3"]
["1", "2", "3"],
),
(
[ # wrong status for errorMessage, should be ignored
{"downloadId": "1", "status": "failed", "errorMessage": "The download is missing files"},
],
[]
[],
),
(
[ # valid "completed" with matching statusMessage
@@ -26,18 +28,18 @@ from src.jobs.remove_missing_files import RemoveMissingFiles
"downloadId": "1",
"status": "completed",
"statusMessages": [
{"messages": ["No files found are eligible for import in /some/path"]}
{"messages": ["No files found are eligible for import in /some/path"]},
],
},
{
"downloadId": "2",
"status": "completed",
"statusMessages": [
{"messages": ["Everything looks good!"]}
{"messages": ["Everything looks good!"]},
],
},
],
["1"]
["1"],
),
(
[ # No statusMessages key or irrelevant messages
@@ -45,10 +47,10 @@ from src.jobs.remove_missing_files import RemoveMissingFiles
{
"downloadId": "2",
"status": "completed",
"statusMessages": [{"messages": ["Other message"]}]
"statusMessages": [{"messages": ["Other message"]}],
},
],
[]
[],
),
(
[ # Mixed: one matching warning + one matching statusMessage
@@ -56,24 +58,17 @@ from src.jobs.remove_missing_files import RemoveMissingFiles
{
"downloadId": "2",
"status": "completed",
"statusMessages": [{"messages": ["No files found are eligible for import in foo"]}]
"statusMessages": [{"messages": ["No files found are eligible for import in foo"]}],
},
{"downloadId": "3", "status": "completed"},
],
["1", "2"]
["1", "2"],
),
]
],
)
async def test_find_affected_items(queue_data, expected_download_ids):
# Arrange
removal_job = RemoveMissingFiles(arr=MagicMock(), settings=MagicMock(),job_name="test")
removal_job.queue = queue_data
removal_job = shared_fix_affected_items(RemoveMissingFiles, queue_data)
# Act
affected_items = await removal_job._find_affected_items() # pylint: disable=W0212
# Assert
assert isinstance(affected_items, list)
affected_download_ids = [item["downloadId"] for item in affected_items]
assert sorted(affected_download_ids) == sorted(expected_download_ids), \
f"Expected affected items with downloadIds {expected_download_ids}, got {affected_download_ids}"
# Act and Assert
await shared_test_affected_items(removal_job, expected_download_ids)