Files
MoviePilot/tests/test_plugin_install_plan_policy.py
DDSRem 2de976f6b3 Merge pull request #7050 from DDSRem-Dev/codex-comment-migration
docs: 统一全项目中文注释和结构化契约说明
2026-10-17 19:26:29 +08:00

91 lines
2.6 KiB
Python
Raw Permalink 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.
"""
远端插件同步与异步安装模式共享策略测试。
"""
import pytest
from app.domain.plugin import build_plugin_release_install_plan
@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 与拒绝结果。
"""
plan, message = build_plugin_release_install_plan(
plugin_id="DemoPlugin",
metadata=meta,
release_version=release_version,
release_items=release_items,
current_version="3.0.0",
)
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 则沿用历史兼容语义。
"""
plan, message = build_plugin_release_install_plan(
plugin_id="DemoPlugin",
metadata={
"release": True,
"version": "1.2.3",
"system_version": ">=9",
},
release_version="1.2.3",
release_items=[{"version": "1.2.3"}],
current_version="3.0.0",
)
assert plan is None
assert "MoviePilot 版本 >=9" in message