重构(测试): 按模块抽离集成测试中的纯规则与合同用例至离线层
This commit is contained in:
parent
fd74a0b3b0
commit
3943a4cdf9
@ -582,3 +582,155 @@ def test_已确认声音内容作为写手唯一通道__cb0440():
|
||||
(_样张(),),
|
||||
角色归属={"甲": ["嗯"]},
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.case_id(
|
||||
"TC-0587dbd22c64",
|
||||
environment="离线纯规则",
|
||||
when="持久化、重验或查询诊断、声音、规则与案例。",
|
||||
contract="docs/系统架构/新版设计/模块设计/B06-审校修订.md",
|
||||
)
|
||||
def test_规则身份重复被公开合同拒绝__0587db():
|
||||
from muse.审校修订.接口 import 核对规则库, 读取内置规则
|
||||
|
||||
库 = 读取内置规则()
|
||||
规则 = list(库["rules"].values())
|
||||
with pytest.raises(Muse错误, match="重复"):
|
||||
核对规则库([*规则, 规则[0]], list(库["samples"].values()))
|
||||
|
||||
|
||||
@pytest.mark.case_id(
|
||||
"TC-c45d9e768e76",
|
||||
environment="离线纯规则",
|
||||
when="持久化、重验或查询诊断、声音、规则与案例。",
|
||||
contract="docs/系统架构/新版设计/模块设计/B06-审校修订.md",
|
||||
)
|
||||
def test_内置规则与所有四类例证经同一合同校验__c45d9e():
|
||||
from muse.审校修订.接口 import 核对规则库, 读取内置规则
|
||||
|
||||
库 = 读取内置规则()
|
||||
重验 = 核对规则库(list(库["rules"].values()), list(库["samples"].values()))
|
||||
assert 重验 == 库
|
||||
assert {sample["type"] for sample in 库["samples"].values()} == {
|
||||
"sf",
|
||||
"snf",
|
||||
"boundary",
|
||||
"regression",
|
||||
}
|
||||
|
||||
|
||||
@pytest.mark.case_id(
|
||||
"TC-02fcb3e5524a",
|
||||
environment="离线纯规则",
|
||||
when="持久化、重验或查询诊断、声音、规则与案例。",
|
||||
contract="docs/系统架构/新版设计/模块设计/B06-审校修订.md",
|
||||
)
|
||||
def test_内置发布规则全部仅为候选__02fcb3():
|
||||
from muse.审校修订.接口 import 读取内置规则
|
||||
|
||||
库 = 读取内置规则()
|
||||
assert 库["rules"] and all(rule["status"] == "candidate" for rule in 库["rules"].values())
|
||||
|
||||
|
||||
@pytest.mark.case_id(
|
||||
"TC-9efb708e26f6",
|
||||
environment="离线纯合同",
|
||||
when="持久化、重验或查询诊断、声音、规则与案例。",
|
||||
contract="docs/系统架构/新版设计/模块设计/B06-审校修订.md",
|
||||
)
|
||||
def test_审校CLI默认走数据库而离线需显式指定__9efb70():
|
||||
import inspect
|
||||
|
||||
from muse.接入.cli.审校命令 import 运行审校命令
|
||||
|
||||
assert inspect.signature(运行审校命令).parameters["离线"].default is False
|
||||
|
||||
|
||||
@pytest.mark.case_id(
|
||||
"TC-477b4a572369",
|
||||
environment="离线纯合同",
|
||||
when="持久化、重验或查询诊断、声音、规则与案例。",
|
||||
contract="docs/系统架构/新版设计/模块设计/B06-审校修订.md",
|
||||
)
|
||||
def test_CLI离线是诊断和修订回放的显式逃生口__477b4a(tmp_path):
|
||||
import json
|
||||
|
||||
from muse.共享.错误 import 配置错误
|
||||
from muse.接入.cli.审校命令 import 运行审校命令
|
||||
|
||||
路径 = tmp_path / "offline.json"
|
||||
路径.write_text(json.dumps({"text": "值得注意的是。", "work_id": "work-a"}, ensure_ascii=False))
|
||||
with pytest.raises(配置错误, match="离线模式仅用于"):
|
||||
运行审校命令(None, "案例清单", str(路径), 离线=True)
|
||||
assert 运行审校命令(None, "诊断", str(路径), 离线=True)["persisted"] is False
|
||||
|
||||
|
||||
@pytest.mark.case_id(
|
||||
"TC-10cdc16e5ad7",
|
||||
environment="离线纯合同",
|
||||
when="持久化、重验或查询诊断、声音、规则与案例。",
|
||||
contract="docs/系统架构/新版设计/模块设计/B06-审校修订.md",
|
||||
)
|
||||
def test_离线诊断不写数据库且明示未持久化__10cdc1(tmp_path):
|
||||
import json
|
||||
|
||||
from muse.接入.cli.审校命令 import 运行审校命令
|
||||
|
||||
路径 = tmp_path / "receipt.json"
|
||||
路径.write_text(json.dumps({"text": "值得注意的是。", "work_id": "work-a"}, ensure_ascii=False))
|
||||
报告 = 运行审校命令(None, "诊断", str(路径), 离线=True)
|
||||
assert 报告["persisted"] is False and 报告["mode"] == "candidate_preview"
|
||||
assert 报告["work_id"] == "work-a"
|
||||
|
||||
|
||||
@pytest.mark.case_id(
|
||||
"TC-5cd6b80a3e5e",
|
||||
environment="离线,固定样张、规则和四类反例",
|
||||
when="生成声音草案、投影保护项或验证规则候选。",
|
||||
contract="docs/系统架构/新版设计/模块设计/B06-审校修订.md",
|
||||
)
|
||||
def test_CLI离线诊断不触数据库且明示未持久化__5cd6b8(tmp_path):
|
||||
import json
|
||||
|
||||
from muse.接入.cli.审校命令 import 运行审校命令
|
||||
|
||||
路径 = tmp_path / "offline-diag.json"
|
||||
路径.write_text(json.dumps({"text": "值得注意的是。", "work_id": "work-a"}, ensure_ascii=False))
|
||||
报告 = 运行审校命令(None, "诊断", str(路径), 离线=True)
|
||||
assert 报告["persisted"] is False and 报告["mode"] == "candidate_preview"
|
||||
|
||||
|
||||
@pytest.mark.case_id(
|
||||
"NC-w26-26d103",
|
||||
environment="离线纯合同",
|
||||
given="固定请求、来源与作者;按用例环境准备独立测试输入",
|
||||
when="通过实际公开入口执行并核对拒绝、状态及持久结果",
|
||||
then=["旧方法改进请求固定字节不增加规则默认字段"],
|
||||
contract="docs/系统架构/新版设计/模块设计/B07-作者经验.md#有来源的运行观察",
|
||||
)
|
||||
def test_旧方法改进请求固定字节不增加规则默认字段__26d103():
|
||||
from dataclasses import asdict
|
||||
|
||||
from muse.作者经验.接口 import 改进请求
|
||||
from muse.正式变更.接口 import 固定哈希
|
||||
|
||||
request = 改进请求(
|
||||
"11111111-1111-1111-1111-111111111111",
|
||||
0,
|
||||
"旧方法标题",
|
||||
"旧方法理由",
|
||||
"22222222-2222-2222-2222-222222222222",
|
||||
("33333333-3333-3333-3333-333333333333",),
|
||||
)
|
||||
assert set(asdict(request)) == {
|
||||
"improvement_id",
|
||||
"expected_revision",
|
||||
"title",
|
||||
"rationale",
|
||||
"method_version_id",
|
||||
"feedback_ids",
|
||||
}
|
||||
assert (
|
||||
固定哈希(asdict(request))
|
||||
== "8c3b0f01e086c99906c9a5e239ea82c26a9b612badb05c234a2465f7c645d955"
|
||||
)
|
||||
|
||||
@ -1325,3 +1325,47 @@ def test_deblind_uses_preregistered_mapping_not_position__125ee8():
|
||||
assert result["status"] == "stable_report"
|
||||
assert {score["candidate_id"] for score in result["scores"]} == {"blind-1", "blind-2"}
|
||||
assert len(result["scores"]) == 10
|
||||
|
||||
|
||||
def _盲评请求载荷(**覆盖):
|
||||
from decimal import Decimal
|
||||
|
||||
载荷 = dict(
|
||||
dataset_version_id="b0473aae-56d1-4485-9f6e-49042b02b130",
|
||||
dataset_hash="0" * 64,
|
||||
split="holdout",
|
||||
target={
|
||||
"kind": "method",
|
||||
"target_ref": "B04.method:x",
|
||||
"version": "1",
|
||||
"content_hash": "0" * 64,
|
||||
},
|
||||
generator_role="writer",
|
||||
generator={"config_id": "aa000000-0000-4000-8000-000000000001", "version": "1"},
|
||||
judges=({"config_id": "aa000000-0000-4000-8000-000000000002", "version": "1"},),
|
||||
arms=("original", "candidate"),
|
||||
dimensions=("清晰度",),
|
||||
max_cost_usd=Decimal("1.0"),
|
||||
max_calls_per_sample=3,
|
||||
max_judge_corrections=1,
|
||||
)
|
||||
载荷.update(覆盖)
|
||||
return 载荷
|
||||
|
||||
|
||||
@pytest.mark.case_id(
|
||||
"TC-9ccd856d98b6",
|
||||
environment="离线,匿名样本、独立评委替身",
|
||||
when="匿名分配样本、校验逐维引文并处理评委分歧。",
|
||||
contract="docs/系统架构/新版设计/模块设计/B10-效果评测.md",
|
||||
)
|
||||
def test_盲评合同拒绝未知模式或外泄身份字段__9ccd85():
|
||||
"""未知比较模式与未登记 mode 字段在创建实验前即被合同拒绝(fail closed)。"""
|
||||
from pydantic import TypeAdapter, ValidationError
|
||||
|
||||
from muse.效果评测.实验条件 import 实验请求 as 盲评实验请求
|
||||
|
||||
with pytest.raises(ValidationError):
|
||||
TypeAdapter(盲评实验请求).validate_python(_盲评请求载荷(comparison_profile="unknown_mode"))
|
||||
with pytest.raises(ValidationError):
|
||||
TypeAdapter(盲评实验请求).validate_python(_盲评请求载荷(mode="round_robin"))
|
||||
|
||||
513
tests/用例清单.json
513
tests/用例清单.json
File diff suppressed because it is too large
Load Diff
@ -20,7 +20,6 @@ from muse.审校修订.接口 import (
|
||||
声音提案请求,
|
||||
声音样张引用,
|
||||
审校错误,
|
||||
核对规则库,
|
||||
案例复核请求,
|
||||
案例定位,
|
||||
案例来源,
|
||||
@ -644,19 +643,6 @@ def test_规则缺少正例时在入库前失败关闭__e88dcd(章后环境):
|
||||
章后环境["装配"].要求审校().导入规则候选(章后环境["作者"], 规则库=库)
|
||||
|
||||
|
||||
@pytest.mark.case_id(
|
||||
"TC-0587dbd22c64",
|
||||
environment="隔离 PostgreSQL,检测替身",
|
||||
when="持久化、重验或查询诊断、声音、规则与案例。",
|
||||
contract="docs/系统架构/新版设计/模块设计/B06-审校修订.md",
|
||||
)
|
||||
def test_规则身份重复被公开合同拒绝__0587db():
|
||||
库 = 读取内置规则()
|
||||
规则 = list(库["rules"].values())
|
||||
with pytest.raises(Muse错误, match="重复"):
|
||||
核对规则库([*规则, 规则[0]], list(库["samples"].values()))
|
||||
|
||||
|
||||
@pytest.mark.case_id(
|
||||
"TC-ac1163ea3657",
|
||||
environment="隔离 PostgreSQL,检测替身",
|
||||
@ -1148,49 +1134,6 @@ def test_案例只在人工复核后投影成规则样例__41e876(四类案例):
|
||||
assert sample["source"] == "licensed" and sample["carrier"] == "mixed"
|
||||
|
||||
|
||||
@pytest.mark.case_id(
|
||||
"TC-c45d9e768e76",
|
||||
environment="隔离 PostgreSQL,检测替身",
|
||||
when="持久化、重验或查询诊断、声音、规则与案例。",
|
||||
contract="docs/系统架构/新版设计/模块设计/B06-审校修订.md",
|
||||
)
|
||||
def test_内置规则与所有四类例证经同一合同校验__c45d9e():
|
||||
库 = 读取内置规则()
|
||||
重验 = 核对规则库(list(库["rules"].values()), list(库["samples"].values()))
|
||||
assert 重验 == 库
|
||||
assert {sample["type"] for sample in 库["samples"].values()} == {
|
||||
"sf",
|
||||
"snf",
|
||||
"boundary",
|
||||
"regression",
|
||||
}
|
||||
|
||||
|
||||
@pytest.mark.case_id(
|
||||
"TC-02fcb3e5524a",
|
||||
environment="隔离 PostgreSQL,检测替身",
|
||||
when="持久化、重验或查询诊断、声音、规则与案例。",
|
||||
contract="docs/系统架构/新版设计/模块设计/B06-审校修订.md",
|
||||
)
|
||||
def test_内置发布规则全部仅为候选__02fcb3():
|
||||
库 = 读取内置规则()
|
||||
assert 库["rules"] and all(rule["status"] == "candidate" for rule in 库["rules"].values())
|
||||
|
||||
|
||||
@pytest.mark.case_id(
|
||||
"TC-9efb708e26f6",
|
||||
environment="隔离 PostgreSQL,检测替身",
|
||||
when="持久化、重验或查询诊断、声音、规则与案例。",
|
||||
contract="docs/系统架构/新版设计/模块设计/B06-审校修订.md",
|
||||
)
|
||||
def test_审校CLI默认走数据库而离线需显式指定__9efb70():
|
||||
import inspect
|
||||
|
||||
from muse.接入.cli.审校命令 import 运行审校命令
|
||||
|
||||
assert inspect.signature(运行审校命令).parameters["离线"].default is False
|
||||
|
||||
|
||||
@pytest.mark.case_id(
|
||||
"TC-b1ebdb636f6f",
|
||||
environment="隔离 PostgreSQL,检测替身",
|
||||
@ -1214,23 +1157,6 @@ def test_CLI采集后自动进入数据库案例清单__b1ebdb(案例环境, tmp
|
||||
assert [c["case_id"] for c in 清单] == [回执["results"][0]["case_id"]]
|
||||
|
||||
|
||||
@pytest.mark.case_id(
|
||||
"TC-477b4a572369",
|
||||
environment="隔离 PostgreSQL,检测替身",
|
||||
when="持久化、重验或查询诊断、声音、规则与案例。",
|
||||
contract="docs/系统架构/新版设计/模块设计/B06-审校修订.md",
|
||||
)
|
||||
def test_CLI离线是诊断和修订回放的显式逃生口__477b4a(tmp_path):
|
||||
from muse.共享.错误 import 配置错误
|
||||
from muse.接入.cli.审校命令 import 运行审校命令
|
||||
|
||||
路径 = tmp_path / "offline.json"
|
||||
路径.write_text(json.dumps({"text": "值得注意的是。", "work_id": "work-a"}, ensure_ascii=False))
|
||||
with pytest.raises(配置错误, match="离线模式仅用于"):
|
||||
运行审校命令(None, "案例清单", str(路径), 离线=True)
|
||||
assert 运行审校命令(None, "诊断", str(路径), 离线=True)["persisted"] is False
|
||||
|
||||
|
||||
@pytest.mark.case_id(
|
||||
"TC-95a9024e5a4c",
|
||||
environment="隔离 PostgreSQL,检测替身",
|
||||
@ -1286,22 +1212,6 @@ def test_案例重验直接读数据库不生成仓外边车文件__4b6ea1(案
|
||||
assert not list(tmp_path.glob("*.inventory.json"))
|
||||
|
||||
|
||||
@pytest.mark.case_id(
|
||||
"TC-10cdc16e5ad7",
|
||||
environment="隔离 PostgreSQL,检测替身",
|
||||
when="持久化、重验或查询诊断、声音、规则与案例。",
|
||||
contract="docs/系统架构/新版设计/模块设计/B06-审校修订.md",
|
||||
)
|
||||
def test_离线诊断不写数据库且明示未持久化__10cdc1(tmp_path):
|
||||
from muse.接入.cli.审校命令 import 运行审校命令
|
||||
|
||||
路径 = tmp_path / "receipt.json"
|
||||
路径.write_text(json.dumps({"text": "值得注意的是。", "work_id": "work-a"}, ensure_ascii=False))
|
||||
报告 = 运行审校命令(None, "诊断", str(路径), 离线=True)
|
||||
assert 报告["persisted"] is False and 报告["mode"] == "candidate_preview"
|
||||
assert 报告["work_id"] == "work-a"
|
||||
|
||||
|
||||
@pytest.mark.case_id(
|
||||
"TC-fc782c51428f",
|
||||
environment="隔离 PostgreSQL,检测替身",
|
||||
@ -1433,21 +1343,6 @@ def test_CLI诊断默认持久化且同一作者可读回__873f1d(诊断环境,
|
||||
装配.配置 = 旧配置
|
||||
|
||||
|
||||
@pytest.mark.case_id(
|
||||
"TC-5cd6b80a3e5e",
|
||||
environment="离线,固定样张、规则和四类反例",
|
||||
when="生成声音草案、投影保护项或验证规则候选。",
|
||||
contract="docs/系统架构/新版设计/模块设计/B06-审校修订.md",
|
||||
)
|
||||
def test_CLI离线诊断不触数据库且明示未持久化__5cd6b8(tmp_path):
|
||||
from muse.接入.cli.审校命令 import 运行审校命令
|
||||
|
||||
路径 = tmp_path / "offline-diag.json"
|
||||
路径.write_text(json.dumps({"text": "值得注意的是。", "work_id": "work-a"}, ensure_ascii=False))
|
||||
报告 = 运行审校命令(None, "诊断", str(路径), 离线=True)
|
||||
assert 报告["persisted"] is False and 报告["mode"] == "candidate_preview"
|
||||
|
||||
|
||||
@pytest.mark.case_id(
|
||||
"TC-93daa381c03a",
|
||||
environment="离线,固定样张、规则和四类反例",
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
"""B07规则改进只登记意向;B10验证与B06审阅、启停、消费保持各自owner。"""
|
||||
|
||||
from dataclasses import asdict, replace
|
||||
from dataclasses import replace
|
||||
from datetime import UTC, datetime, timedelta
|
||||
from uuid import uuid4
|
||||
|
||||
@ -12,7 +12,6 @@ from muse.作者经验.接口 import (
|
||||
反馈版本,
|
||||
反馈请求,
|
||||
改进定位,
|
||||
改进请求,
|
||||
规则启停请求,
|
||||
规则改进请求,
|
||||
规则验证请求,
|
||||
@ -258,34 +257,3 @@ def test_异版他作者与空反馈不产生规则改进行动__26d102(规则
|
||||
assert revised["revision"] == 2
|
||||
historical = service.读取改进(env["author"], proposal.improvement_id, revision=1)
|
||||
assert historical["content_hash"] == point.content_hash
|
||||
|
||||
|
||||
@pytest.mark.case_id(
|
||||
"NC-w26-26d103",
|
||||
environment="隔离PG/合成HTTP及浏览器",
|
||||
given="固定请求、来源与作者;按用例环境准备独立测试输入",
|
||||
when="通过实际公开入口执行并核对拒绝、状态及持久结果",
|
||||
then=["旧方法改进请求固定字节不增加规则默认字段"],
|
||||
contract="docs/系统架构/新版设计/模块设计/B07-作者经验.md#有来源的运行观察",
|
||||
)
|
||||
def test_旧方法改进请求固定字节不增加规则默认字段__26d103():
|
||||
request = 改进请求(
|
||||
"11111111-1111-1111-1111-111111111111",
|
||||
0,
|
||||
"旧方法标题",
|
||||
"旧方法理由",
|
||||
"22222222-2222-2222-2222-222222222222",
|
||||
("33333333-3333-3333-3333-333333333333",),
|
||||
)
|
||||
assert set(asdict(request)) == {
|
||||
"improvement_id",
|
||||
"expected_revision",
|
||||
"title",
|
||||
"rationale",
|
||||
"method_version_id",
|
||||
"feedback_ids",
|
||||
}
|
||||
assert (
|
||||
固定哈希(asdict(request))
|
||||
== "8c3b0f01e086c99906c9a5e239ea82c26a9b612badb05c234a2465f7c645d955"
|
||||
)
|
||||
|
||||
@ -1155,50 +1155,8 @@ def test_原始模型引文及派生位置分别持久化和核验__259001(执
|
||||
|
||||
|
||||
# ---- 生产评测权限隔离线:7项盲评原观察 ----
|
||||
# 未知模式在创建实验前合同拒绝(fail closed);双评委真实派发链由基线
|
||||
# aee3df 承接(独立任务调用、盲化输入、模型各异、不共享报告),不重复写。
|
||||
from pydantic import TypeAdapter, ValidationError # noqa: E402
|
||||
|
||||
from muse.效果评测.实验条件 import 实验请求 as 盲评实验请求 # noqa: E402
|
||||
|
||||
|
||||
def _盲评请求载荷(**覆盖):
|
||||
载荷 = dict(
|
||||
dataset_version_id="b0473aae-56d1-4485-9f6e-49042b02b130",
|
||||
dataset_hash="0" * 64,
|
||||
split="holdout",
|
||||
target={
|
||||
"kind": "method",
|
||||
"target_ref": "B04.method:x",
|
||||
"version": "1",
|
||||
"content_hash": "0" * 64,
|
||||
},
|
||||
generator_role="writer",
|
||||
generator={"config_id": "aa000000-0000-4000-8000-000000000001", "version": "1"},
|
||||
judges=({"config_id": "aa000000-0000-4000-8000-000000000002", "version": "1"},),
|
||||
arms=("original", "candidate"),
|
||||
dimensions=("清晰度",),
|
||||
max_cost_usd=Decimal("1.0"),
|
||||
max_calls_per_sample=3,
|
||||
max_judge_corrections=1,
|
||||
)
|
||||
载荷.update(覆盖)
|
||||
return 载荷
|
||||
|
||||
|
||||
@pytest.mark.case_id(
|
||||
"TC-9ccd856d98b6",
|
||||
environment="离线,匿名样本、独立评委替身",
|
||||
when="匿名分配样本、校验逐维引文并处理评委分歧。",
|
||||
contract="docs/系统架构/新版设计/模块设计/B10-效果评测.md",
|
||||
)
|
||||
@pytest.mark.数据库
|
||||
def test_盲评合同拒绝未知模式或外泄身份字段__9ccd85():
|
||||
"""未知比较模式与未登记 mode 字段在创建实验前即被合同拒绝(fail closed)。"""
|
||||
with pytest.raises(ValidationError):
|
||||
TypeAdapter(盲评实验请求).validate_python(_盲评请求载荷(comparison_profile="unknown_mode"))
|
||||
with pytest.raises(ValidationError):
|
||||
TypeAdapter(盲评实验请求).validate_python(_盲评请求载荷(mode="round_robin"))
|
||||
# 未知模式在创建实验前合同拒绝(fail closed,见 tests/契约/test_盲评与引文合同.py);
|
||||
# 双评委真实派发链由基线 aee3df 承接(独立任务调用、盲化输入、模型各异、不共享报告),不重复写。
|
||||
|
||||
|
||||
@pytest.mark.case_id(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user