Files
pyflowx/tests/cli/test_envdev_tool.py
T

100 lines
3.6 KiB
Python

"""Tests for ops.envdev / sglang / msdownload 模块 (@px.tool 注册验证)."""
from __future__ import annotations
import pyflowx as px
from pyflowx.ops.infra import envdev, msdownload, sglang # noqa: F401 -- 触发 @px.tool 注册
from pyflowx.tools import _TOOL_REGISTRY, get_tool
# ---------------------------------------------------------------------- #
# envdev 注册验证
# ---------------------------------------------------------------------- #
class TestEnvdevRegistration:
"""``envdev`` 模块 ``@px.tool`` 注册验证."""
def test_envdev_registered(self) -> None:
"""envdev 应在 _TOOL_REGISTRY 中注册."""
assert "envdev" in _TOOL_REGISTRY
def test_visible_subcommands(self) -> None:
"""可见子命令应包含核心镜像源配置命令."""
subs = px.list_subcommands("envdev")
assert "setup-python" in subs
assert "setup-conda" in subs
assert "setup-rust" in subs
assert "setup-linux-mirror" in subs
def test_install_subcommands_visible(self) -> None:
"""安装类子命令应可见."""
subs = px.list_subcommands("envdev")
assert "download-rustup" in subs
assert "install-rust" in subs
assert "install-qt-libs" in subs
assert "install-fonts" in subs
assert "install-docker" in subs
def test_setup_python_is_fn(self) -> None:
"""setup-python 应为 fn 任务 (非 cmd)."""
spec = get_tool("envdev", "setup-python")
assert spec.func is not None
assert spec.cmd is None
def test_setup_conda_is_fn(self) -> None:
"""setup-conda 应为 fn 任务."""
spec = get_tool("envdev", "setup-conda")
assert spec.func is not None
def test_setup_rust_is_fn(self) -> None:
"""setup-rust 应为 fn 任务."""
spec = get_tool("envdev", "setup-rust")
assert spec.func is not None
def test_setup_linux_mirror_is_fn(self) -> None:
"""setup-linux-mirror 应为 fn 任务."""
spec = get_tool("envdev", "setup-linux-mirror")
assert spec.func is not None
# ---------------------------------------------------------------------- #
# sglang 注册验证
# ---------------------------------------------------------------------- #
class TestSglangRegistration:
"""``sglang`` 模块 ``@px.tool`` 注册验证."""
def test_sglang_registered(self) -> None:
"""sglang 应在 _TOOL_REGISTRY 中注册."""
assert "sglang" in _TOOL_REGISTRY
def test_visible_subcommands(self) -> None:
"""可见子命令: install, run."""
subs = px.list_subcommands("sglang")
assert "install" in subs
assert "run" in subs
def test_run_needs_install(self) -> None:
"""run 应依赖 install."""
spec = get_tool("sglang", "run")
assert "install" in spec.needs
# ---------------------------------------------------------------------- #
# msdownload 注册验证
# ---------------------------------------------------------------------- #
class TestMsdownloadRegistration:
"""``msdownload`` 模块 ``@px.tool`` 注册验证."""
def test_msdownload_registered(self) -> None:
"""msdownload 应在 _TOOL_REGISTRY 中注册."""
assert "msdownload" in _TOOL_REGISTRY
def test_msdownload_default_spec(self) -> None:
"""msdownload 默认 spec 应可获取且为 fn 任务."""
spec = get_tool("msdownload")
assert spec.func is not None
assert spec.cmd is None
def test_msdownload_run_callable(self) -> None:
"""msdownload_run 应为可调用函数."""
assert callable(msdownload.msdownload_run)