muse-agent-example/tests/单元/test_榜单登记边界.py
zizi d909d1bd1b 后端实现与用例身份:19 包集成落地并修复收尾缺陷
实现侧:
- 上下文:任务范围拆分为 范围校验/范围授权;索引按可发现口径重建、索引新鲜度改对称差;依赖校验统一快照漂移说明。
- 知识方法:方法与材料读取口径统一;超限方法材料按可选省略,核对路径不再二次计费;删除无合同的读时重算。
- 任务运行:新增 context.usage/tool.denied 事件类型;连接池常驻并在装配生命周期内开关;调用结算与核对分列。
- 效果评测/审校修订/交付连载/作者经验/作品规划:凭据冻结、标定消费、导出补证、事实引文核对等收尾修复。
- 资源加载:能力正文不再夹带索引用的导航注记(该注记此前进入角色与技能的模型提示)。
- 元数据:受保护骨架与代码保护属性对齐;字段校验与内置结构口径同步。
- 基础设施:环境预检进入装配生命周期;数据库连接运行期字段不参与相等比较;索引指纹归一化 jsonb 浮点。
- 删除被替代实现:7 份旧提示词模板与空壳 资料来源 读取器。

用例侧:
- 用例身份与导航元信息迁移;夹具补生命周期、同库暴露与模板封存;
- 本轮定向修复:方法材料省略、事实引文、迁移回执、额度与暂停用例、慢用例超时预算等。
2026-09-18 01:15:00 +08:00

98 lines
3.3 KiB
Python

"""榜单登记和旧登记项消费的地址边界;合成读取器,不发网络。"""
from types import SimpleNamespace
import pytest
from fastapi import HTTPException
from muse.接入.http.路由.资料研究 import 采集快照
from muse.资料研究 import 榜单快照
from muse.资料研究.接口 import 资料服务
from muse.资料研究.模型 import 资料错误
@pytest.mark.case_id("NC-O07-B03-001")
@pytest.mark.parametrize(
"url",
[
"file:///etc/passwd",
"ftp://example.invalid",
"https:///ranking",
"example.invalid",
"https://user:secret@example.invalid/rank",
"https://@example.invalid",
"https://example.invalid@",
"https://exam ple.invalid",
"https://example.invalid\n/rank",
"https://example.invalid\\rank",
"https://example.invalid:abc",
"https://example.invalid:65536",
"https://example.invalid:0",
"https://[bad-address]",
"https://example.invalid/#section",
"https://-bad.invalid",
"https://bad..invalid",
"https://%65xample.invalid",
"https://exam\x00ple.invalid",
],
)
def test_非法榜单地址在调用存储前拒绝(url, monkeypatch):
writes = []
monkeypatch.setattr(
榜单快照,
"资料存储",
lambda conn: SimpleNamespace(登记榜单源=lambda *args: writes.append(args)),
)
with pytest.raises(资料错误, match="榜单地址"):
资料服务().登记榜单(None, "ranking", "合成榜单", url)
assert writes == []
@pytest.mark.case_id("NC-O07-B03-002")
@pytest.mark.parametrize(
"url",
[
"https://example.invalid/ranking?kind=new",
"http://localhost:8080/rank",
"https://[::1]:8443/rank",
"https://例子.测试/榜单",
"https://example.invalid./rank",
],
)
def test_合法URL原样登记不请求目标(url, monkeypatch):
writes = []
monkeypatch.setattr(
榜单快照,
"资料存储",
lambda conn: SimpleNamespace(登记榜单源=lambda *args: writes.append(args)),
)
资料服务().登记榜单(None, "ranking", "合成榜单", url)
assert writes == [("ranking", "合成榜单", url, "html")]
@pytest.mark.case_id("NC-O07-B03-003")
def test_旧非法登记不能绕过读取器调用前验证():
calls = []
cursor = SimpleNamespace(
execute=lambda *args: SimpleNamespace(
fetchone=lambda: {"url": "file:///private", "采集方式": "html"}
)
)
conn = SimpleNamespace(cursor=lambda **kwargs: cursor)
reader = SimpleNamespace(抓取=lambda *args: calls.append(args))
with pytest.raises(资料错误, match="榜单地址"):
资料服务().采集榜单快照(conn, "ranking", reader)
assert calls == []
@pytest.mark.case_id("NC-O07-B03-004")
def test_未注入真实读取器仍返回503且不建联():
def unexpected():
raise AssertionError("未注入读取器时不能请求数据库")
app = SimpleNamespace(配置=SimpleNamespace(), 要求数据库=unexpected)
request = SimpleNamespace(app=SimpleNamespace(state=SimpleNamespace(装配=app)))
with pytest.raises(HTTPException) as error:
采集快照("ranking", request, "author")
assert error.value.status_code == 503