Files
MoviePilot/tests/test_server_statistic_lifecycle.py

43 lines
1.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""服务端统计兼容入口的后台任务生命周期回归。"""
from unittest.mock import Mock, patch
from app.adapters.external.server import MoviePilotServerHelper
from app.runtime.config import global_vars
def test_legacy_subscription_reports_use_owned_threadsafe_tasks() -> None:
"""旧同步统计入口应保留 ABI,并让宿主等待已开始的线程工作。"""
loop = Mock(**{"is_running.return_value": True, "is_closed.return_value": False})
registry = Mock()
def submit(coroutine, **_kwargs):
"""关闭测试协程,避免替身提交留下未等待警告。"""
coroutine.close()
return Mock()
registry.submit_threadsafe.side_effect = submit
with patch.object(global_vars, "CURRENT_EVENT_LOOP", loop), patch(
"app.adapters.external.server.get_task_registry", return_value=registry
):
assert MoviePilotServerHelper.sub_reg_async({"media_id": "1"}) is True
assert MoviePilotServerHelper.sub_done_async({"media_id": "1"}) is True
assert registry.submit_threadsafe.call_count == 2
assert registry.submit_threadsafe.call_args_list[0].kwargs == {
"loop": loop,
"owner": "compat.server.subscribe_added_report",
"cancel_on_shutdown": False,
}
assert registry.submit_threadsafe.call_args_list[1].kwargs == {
"loop": loop,
"owner": "compat.server.subscribe_done_report",
"cancel_on_shutdown": False,
}
def test_legacy_subscription_report_rejects_without_runtime_loop() -> None:
"""宿主生命周期不可用时应拒绝提交,并保持布尔返回合同。"""
with patch.object(global_vars, "CURRENT_EVENT_LOOP", None):
assert MoviePilotServerHelper.sub_done_async({"media_id": "1"}) is False