Files
MoviePilot/tests/test_site_reset_scheduler.py
T

61 lines
1.9 KiB
Python

from unittest.mock import AsyncMock, Mock
import pytest
from app.api.endpoints import site as site_endpoint
from app.application.site.mutation import SiteMutationResult
from app.runtime.tasks import TaskRegistry
class _TaskRegistry(TaskRegistry):
"""记录站点重置提交的同步后台任务。"""
def __init__(self) -> None:
"""初始化任务记录。"""
super().__init__()
self.calls: list[tuple] = []
def create_sync(self, function, *args, owner: str, **kwargs) -> None:
"""保存函数、参数和 owner,避免端点测试启动真实任务。"""
self.calls.append((function, args, kwargs, owner))
@pytest.mark.asyncio
async def test_reset_submits_cookiecloud_after_site_transaction(monkeypatch):
"""站点重置提交 CookieCloud 后台任务,不在请求事件循环内直接执行。"""
command = Mock()
command.reset = AsyncMock(return_value=SiteMutationResult(success=True))
task_registry = _TaskRegistry()
scheduler = Mock()
system_config = Mock()
system_config.async_set = AsyncMock()
monkeypatch.setattr(site_endpoint, "get_scheduler", Mock(return_value=scheduler))
monkeypatch.setattr(
site_endpoint,
"get_configured_system_config",
Mock(return_value=system_config),
)
response = await site_endpoint.reset(
task_registry=task_registry,
command=command,
_=Mock(),
)
assert response.success is True
command.reset.assert_awaited_once_with()
scheduler.start.assert_not_called()
system_config.async_set.assert_any_await(
site_endpoint.SystemConfigKey.IndexerSites, []
)
system_config.async_set.assert_any_await(site_endpoint.SystemConfigKey.RssSites, [])
assert task_registry.calls == [
(
scheduler.start,
(),
{"job_id": "cookiecloud", "manual": True},
"api.site.reset",
)
]