mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-05 15:38:19 +08:00
fix(plugin): close cancellable install lifecycle gaps
This commit is contained in:
@@ -1,7 +1,13 @@
|
||||
from unittest.mock import AsyncMock
|
||||
from types import SimpleNamespace
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
from app.runtime.extensions.plugin.dependency import PluginDependencyService
|
||||
import pytest
|
||||
|
||||
from app.runtime.extensions.plugin.dependency import (
|
||||
PluginDependencyInstallResult,
|
||||
PluginDependencyService,
|
||||
)
|
||||
|
||||
|
||||
def test_install_missing_skips_installer_when_environment_is_satisfied() -> None:
|
||||
@@ -35,3 +41,25 @@ def test_install_missing_preserves_list_return_contract() -> None:
|
||||
|
||||
assert service.install_missing() == ["demo>=1"]
|
||||
installer.install.assert_called_once_with(["demo>=1"])
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_async_install_missing_uses_async_installer() -> None:
|
||||
"""异步启动恢复必须调用可取消的依赖安装入口。"""
|
||||
installer = SimpleNamespace(
|
||||
async_find_missing=AsyncMock(return_value=["demo>=1"]),
|
||||
async_install=AsyncMock(return_value=(True, "")),
|
||||
)
|
||||
service = PluginDependencyService(
|
||||
system=lambda: SimpleNamespace(dependency=installer),
|
||||
log=MagicMock(),
|
||||
)
|
||||
|
||||
result = await service.async_install_missing_with_status()
|
||||
|
||||
assert result == PluginDependencyInstallResult(
|
||||
missing=["demo>=1"],
|
||||
success=True,
|
||||
)
|
||||
installer.async_find_missing.assert_awaited_once()
|
||||
installer.async_install.assert_awaited_once_with(["demo>=1"])
|
||||
|
||||
Reference in New Issue
Block a user