Files
MoviePilot/tests/test_plugin_install_plan_policy.py
T

96 lines
2.9 KiB
Python

"""远端插件同步与异步安装模式共享策略测试。"""
from unittest.mock import patch
import pytest
from packaging.version import Version
from app.adapters.external.market import PluginHelper
@pytest.mark.parametrize(
("meta", "release_version", "release_items", "tag", "fallback", "error"),
[
({"release": False, "version": "1.2.3"}, None, [], None, False, ""),
({"release": True, "version": "1.2.3"}, None, [], "DemoPlugin_v1.2.3", True, ""),
(
{"release": True, "version": "1.2.3", "system_version": ">=9"},
"1.2.0",
[{"version": "1.2.0"}],
"DemoPlugin_v1.2.0",
False,
"",
),
(
{"release": True, "version": "1.2.3"},
"1.2.0",
[{"version": "1.2.3"}],
None,
False,
"DemoPlugin 未找到可安装的 Release 版本:1.2.0",
),
(
{"release": False, "version": "1.2.3"},
"1.2.0",
[{"version": "1.2.0"}],
None,
False,
"DemoPlugin 未声明 Release 安装,无法安装指定版本",
),
(
{"release": True},
None,
[],
None,
False,
"未在插件清单中找到 DemoPlugin 的版本号,无法进行 Release 安装",
),
],
)
def test_remote_plugin_install_plan_preserves_mode_contract(
meta: dict,
release_version: str | None,
release_items: list[dict],
tag: str | None,
fallback: bool,
error: str,
) -> None:
"""唯一计划器必须保留文件列表、当前 Release、指定 Release 与拒绝结果。"""
with patch.object(
PluginHelper,
"get_current_system_version",
return_value=Version("3.0.0"),
):
plan, message = PluginHelper._build_remote_plugin_install_plan(
pid="DemoPlugin",
meta=meta,
release_version=release_version,
release_items=release_items,
)
assert message == error
assert (plan.release_tag if plan else None) == tag
assert (plan.fallback_to_filelist if plan else False) is fallback
def test_current_release_keeps_system_version_admission() -> None:
"""指定当前索引版本仍须通过系统版本限制,旧 Release 则沿用历史兼容语义。"""
with patch.object(
PluginHelper,
"get_current_system_version",
return_value=Version("3.0.0"),
):
plan, message = PluginHelper._build_remote_plugin_install_plan(
pid="DemoPlugin",
meta={
"release": True,
"version": "1.2.3",
"system_version": ">=9",
},
release_version="1.2.3",
release_items=[{"version": "1.2.3"}],
)
assert plan is None
assert "MoviePilot 版本 >=9" in message