Files
decluttarr/tests/jobs/test_remove_unmonitored.py
Benjamin Harder 8d9a64798d Formatting issues
2025-10-01 18:43:38 +02:00

76 lines
2.3 KiB
Python

from unittest.mock import AsyncMock
import pytest
from src.jobs.remove_unmonitored import RemoveUnmonitored
from tests.jobs.utils import shared_fix_affected_items, shared_test_affected_items
@pytest.mark.asyncio
@pytest.mark.parametrize(
("queue_data", "monitored_ids", "expected_download_ids"),
[
# All items monitored -> no affected items
(
[
{"downloadId": "1", "detail_item_id": 101},
{"downloadId": "2", "detail_item_id": 102},
],
{101: True, 102: True},
[],
),
# All items unmonitored -> all affected
(
[
{"downloadId": "1", "detail_item_id": 101},
{"downloadId": "2", "detail_item_id": 102},
],
{101: False, 102: False},
["1", "2"],
),
# One monitored, one not
(
[
{"downloadId": "1", "detail_item_id": 101},
{"downloadId": "2", "detail_item_id": 102},
],
{101: True, 102: False},
["2"],
),
# Shared downloadId, only one monitored -> not affected
(
[
{"downloadId": "1", "detail_item_id": 101},
{"downloadId": "1", "detail_item_id": 102},
],
{101: False, 102: True},
[],
),
# Shared downloadId, none monitored -> affected
(
[
{"downloadId": "1", "detail_item_id": 101},
{"downloadId": "1", "detail_item_id": 102},
],
{101: False, 102: False},
["1", "1"],
),
# One monitored, one not, one not matched yet
(
[
{"downloadId": "1", "detail_item_id": 101},
{"downloadId": "2", "detail_item_id": 102},
{"downloadId": "3", "detail_item_id": None},
],
{101: True, 102: False},
["2"],
),
],
)
async def test_find_affected_items(queue_data, monitored_ids, expected_download_ids):
# Arrange
removal_job = shared_fix_affected_items(RemoveUnmonitored, queue_data)
removal_job.arr.is_monitored = AsyncMock(side_effect=lambda id_: monitored_ids[id_])
# Act and Assert
await shared_test_affected_items(removal_job, expected_download_ids)