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

44 lines
1.7 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.
"""
插件实例与安装来源的 ID 合同一致性回归测试。
"""
import pytest
from pydantic import ValidationError
from app.domain.plugin import is_physical_plugin_id
from app.schemas.plugin import PluginInstance, validate_plugin_id
@pytest.mark.parametrize("plugin_id", ["DemoPlugin", "nullbr_search", "Nullbr_Search2", "A" * 128])
def test_instance_ids_accept_installed_plugin_identity(plugin_id: str) -> None:
"""
市场允许的物理身份必须能用于本体及共享源码分身,且不改变大小写。
"""
assert is_physical_plugin_id(plugin_id)
assert validate_plugin_id(plugin_id) == plugin_id
host = PluginInstance(instance_id=plugin_id, source_plugin_id=plugin_id)
assert host.is_host
assert host.instance_id == plugin_id
if len(plugin_id) < 128:
clone = PluginInstance(instance_id=f"{plugin_id}x2", source_plugin_id=plugin_id)
assert not clone.is_host
assert clone.source_plugin_id == plugin_id
@pytest.mark.parametrize(
"plugin_id",
["", "_Plugin", "1Plugin", "../Plugin", "a/b", "a\\b", "a.b", "a-b", "a@b",
"a b", "a\n", "插件", "Plugin", "A" * 129],
)
def test_instance_ids_reject_unsafe_or_unsupported_identity(plugin_id: str) -> None:
"""
实例校验保持字母开头、ASCII、路径安全和长度限制,与安装侧一致。
"""
assert not is_physical_plugin_id(plugin_id)
with pytest.raises(ValueError):
validate_plugin_id(plugin_id)
with pytest.raises(ValidationError):
PluginInstance(instance_id=plugin_id, source_plugin_id="DemoPlugin")
with pytest.raises(ValidationError):
PluginInstance(instance_id="DemoPlugin", source_plugin_id=plugin_id)