Files
PlantAI-rag-new/sdk/app/test_capabilities_svc.py
T
jerryandClaude Fable 5 cd7e98e7c7 feat(capabilities): S4 SDK+UI 能力端点+Humanizer+设置面板(含 S3 发布修复)
- sdk/services/capabilities.py: MANIFEST+DEFAULTS+sanitize+QA 注册表合并
- sdk/services/humanizer.py: 9 类中文 AI 痕迹规则(块级保护引用/表格/代码/图片)
- sdk/routers/capabilities.py: GET /api/capabilities + POST install 透传
- sdk/schemas.py+sessions.py: SessionMeta.capabilities + PATCH meta 白名单 merge
- sdk/routers/qa.py: humanize 会话开关注入 SSE;chat.js: body 加 session_id
- sse_relay.py: humanize_enabled 参数链(修 _pump_events 可见性编译错误)
- api.py(QA): /capabilities/registry loopback(BFF 合并)
- ui: settings store+SettingsPanel+AppShell 接线+SessionPanel 展开态设置入口+labels
- 测试: humanizer 8 用例+capabilities_svc 6 用例;SDK 146 全绿;UI vitest 172 全绿

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-02 16:50:54 +08:00

53 lines
1.8 KiB
Python

"""test_capabilities.py —— BFF 能力清单 sanitize 单测(S4)。"""
from __future__ import annotations
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
from app.services.capabilities import ( # noqa: E402
DEFAULTS,
MANIFEST,
merged_capabilities,
sanitize_capabilities,
)
class TestSanitize:
def test_whitelist_only(self):
out = sanitize_capabilities({"memory": True, "evil": 1, "web_search": "1"})
assert out == {"memory": True, "web_search": True}
def test_bool_coerce(self):
out = sanitize_capabilities({"memory": "false", "humanize": "true"})
assert out == {"memory": False, "humanize": True}
def test_non_dict(self):
assert sanitize_capabilities(None) == {}
assert sanitize_capabilities([("memory", True)]) == {}
class TestMerged:
def test_defaults(self):
body = merged_capabilities(None)
caps = {c["name"]: c for c in body["capabilities"]}
assert caps["memory"]["enabled"] is True
assert caps["web_search"]["enabled"] is False
assert caps["humanize"]["enabled"] is False
def test_session_overrides(self):
body = merged_capabilities({"web_search": True, "humanize": True})
caps = {c["name"]: c for c in body["capabilities"]}
assert caps["web_search"]["enabled"] is True
assert caps["humanize"]["enabled"] is True
def test_qa_registry_merged(self):
body = merged_capabilities(
None,
qa_registry=[{"name": "web_search", "description": "x"}],
qa_warnings=["bad entry skipped"],
)
assert body["installed"] == [{"name": "web_search", "description": "x"}]
assert body["load_warnings"] == ["bad entry skipped"]