joy-cli/tests/test_core.py
feibisi 3874b562c3 feat: joy CLI Python 2.0 — 50 命令全量重写 + pip 全集群部署
- 50 命令:patrol/health/board/recall/poke/who/inbox/mind/message/team 等
- 异步并行 SSH (asyncio subprocess)
- 命令注册表 + @command decorator + 插件扩展架构
- 环境检测 (Mac/VM/agent 身份)
- JSON 输出契约 (stdout=成功, stderr=错误 code)
- 权限模型 (agent 身份检测 + 环境限制)
- pytest 23/23 通过
- deploy-joy.sh 全集群 16 VM 部署脚本 (含 PEP 668 兼容)
- 旧 bash 版归档到 archive/commands.bash/

Closes: joy CLI 2.0 迁移
2026-07-07 11:38:03 +08:00

95 lines
2.5 KiB
Python

"""test_core.py — core 模块测试"""
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent / "src"))
def test_env_singleton():
from joy.core.env import Env
e1 = Env()
e2 = Env()
assert e1 is e2
def test_env_paths():
from joy.core.env import Env
env = Env()
assert "office" in env.paths
assert "linuxjoy" in env.paths
assert env.home.exists()
def test_env_permission():
from joy.core.env import Env
env = Env()
# None 权限 = 所有人可用
assert env.has_permission(None) is True
# 当前 identity 在列表中
assert env.has_permission([env.identity]) is True
# 不在列表中
assert env.has_permission(["nonexistent-role"]) is False
def test_env_env_allowed():
from joy.core.env import Env
env = Env()
# None = 全环境
assert env.env_allowed(None) is True
# 当前环境
if env.is_mac:
assert env.env_allowed(["mac"]) is True
assert env.env_allowed(["vm"]) is False
else:
assert env.env_allowed(["vm"]) is True
assert env.env_allowed(["mac"]) is False
def test_joy_error_to_json():
from joy.core.errors import JoyError
err = JoyError("test error", code="E_TEST", detail="some detail")
import json
d = json.loads(err.to_json())
assert d["error"] == "test error"
assert d["code"] == "E_TEST"
assert d["detail"] == "some detail"
def test_joy_usage_error():
from joy.core.errors import JoyUsageError
err = JoyUsageError("bad usage")
import json
d = json.loads(err.to_json())
assert d["code"] == "E_USAGE"
def test_ssh_result_ok():
from joy.core.ssh import SSHResult
r = SSHResult(vm="test", rc=0, stdout="ok", stderr="")
assert r.ok is True
r2 = SSHResult(vm="test", rc=1, stdout="", stderr="fail")
assert r2.ok is False
r3 = SSHResult(vm="test", rc=0, stdout="", stderr="", timed_out=True)
assert r3.ok is False
def test_config_load():
from joy.core.config import Config
c = Config()
# 不存在的 key 返回 default
assert c.get("nonexistent", "default") == "default"
def test_command_registration():
"""命令注册 decorator 正常工作"""
from joy.cli import command, COMMANDS, _import_all_commands
_import_all_commands()
# help 应该注册了
assert "help" in COMMANDS
assert "patrol" in COMMANDS
assert "board" in COMMANDS
assert "recall" in COMMANDS
assert "message" in COMMANDS
assert "team" in COMMANDS
assert "mind" in COMMANDS