Refactor trigger_rescan to use anime_service

- Use anime_service.rescan() instead of direct trigger_rescan import
- Change Optional[Any] to Optional[Dict[str, Any]] in ConfigUpdate for better type hints
- Add ValidationError handling in ConfigUpdate.apply_to
- Update tests to match new implementation

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
2026-06-27 15:46:22 +02:00
parent ad2320dbbb
commit 4687a06374
8 changed files with 2244 additions and 463 deletions

View File

@@ -344,16 +344,16 @@ class TestTriggerRescan:
@pytest.mark.asyncio
async def test_trigger_rescan_success(self, authenticated_client):
"""Successful trigger returns 200 with a message."""
mock_trigger = AsyncMock(return_value={"message": "Rescan triggered"})
mock_rescan = AsyncMock()
mock_series_app = Mock()
with patch("src.server.utils.dependencies.get_series_app", return_value=mock_series_app), \
patch("src.server.api.anime.trigger_rescan", mock_trigger):
patch("src.server.api.scheduler.get_anime_service", return_value=Mock(rescan=mock_rescan)):
response = await authenticated_client.post("/api/scheduler/trigger-rescan")
assert response.status_code == 200
assert "message" in response.json()
mock_trigger.assert_called_once()
mock_rescan.assert_called_once()
@pytest.mark.asyncio
async def test_trigger_rescan_unauthorized(self, client):
@@ -375,11 +375,11 @@ class TestTriggerRescan:
@pytest.mark.asyncio
async def test_trigger_rescan_failure(self, authenticated_client):
"""500 when underlying rescan call raises an exception."""
mock_trigger = AsyncMock(side_effect=Exception("Rescan failed"))
mock_rescan = AsyncMock(side_effect=Exception("Rescan failed"))
mock_series_app = Mock()
with patch("src.server.utils.dependencies.get_series_app", return_value=mock_series_app), \
patch("src.server.api.anime.trigger_rescan", mock_trigger):
patch("src.server.api.scheduler.get_anime_service", return_value=Mock(rescan=mock_rescan)):
response = await authenticated_client.post("/api/scheduler/trigger-rescan")
assert response.status_code == 500
@@ -426,13 +426,13 @@ class TestSchedulerEndpointsIntegration:
self, authenticated_client, mock_config_service, mock_scheduler_service
):
"""POST config then POST trigger-rescan both succeed."""
mock_trigger = AsyncMock(return_value={"message": "Rescan triggered"})
mock_rescan = AsyncMock()
mock_series_app = Mock()
with patch("src.server.api.scheduler.get_config_service", return_value=mock_config_service), \
patch("src.server.api.scheduler.get_scheduler_service", return_value=mock_scheduler_service), \
patch("src.server.utils.dependencies.get_series_app", return_value=mock_series_app), \
patch("src.server.api.anime.trigger_rescan", mock_trigger):
patch("src.server.api.scheduler.get_anime_service", return_value=Mock(rescan=mock_rescan)):
r = await authenticated_client.post(
"/api/scheduler/config",
json={"enabled": True, "interval_minutes": 360},
@@ -441,4 +441,4 @@ class TestSchedulerEndpointsIntegration:
r = await authenticated_client.post("/api/scheduler/trigger-rescan")
assert r.status_code == 200
mock_trigger.assert_called_once()
mock_rescan.assert_called_once()