muse-agent-example/tests/集成/test_参考挑选反馈.py

115 lines
5.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""参考挑选反馈的真实落账、幂等、信号聚合与呈现分派兼容;无模型调用。"""
import pytest
import test_作者偏好与反馈 as 偏好测试
from muse.作者经验.接口 import 参考挑选反馈请求, 挑选候选
from muse.共享.错误 import Muse错误
pytestmark = pytest.mark.数据库
候选环境 = 偏好测试.候选环境
环境 = 偏好测试.环境
def _请求(domain, selected, rejected, *, query="机甲近距格斗"):
return 参考挑选反馈请求(
query=query,
domain=domain,
candidates=(
挑选候选("mv-a", 1, 0.031),
挑选候选("mv-b", 2, 0.028),
挑选候选("mv-c", 3, 0.024),
),
selected=selected,
rejected=rejected,
index_generation=7,
)
@pytest.mark.case_id(
"NC-w32-a10005",
environment="隔离PG;实际S01/B05/B09/S02与合成HTTP,不证明文学效果",
given="真实作者身份与固定参考挑选请求",
when="经服务保存参考挑选反馈并重放同一命令",
then=["反馈只追加落账且幂等;同命令不同内容拒绝"],
contract="docs/系统架构/新版设计/模块设计/B07-作者经验.md#偏好双轨关系",
)
def test_参考挑选落账幂等且同命令改内容拒绝__a10005(环境):
service, author, _, _ = 环境
saved = service.记录参考挑选反馈(author, "ref-sel-1", _请求("combat", ("mv-a",), ("mv-c",)))
assert saved["payload"]["种类"] == "参考挑选"
assert saved["payload"]["selected"] == ["mv-a"]
replay = service.记录参考挑选反馈(author, "ref-sel-1", _请求("combat", ("mv-a",), ("mv-c",)))
assert replay["feedback_id"] == saved["feedback_id"]
with pytest.raises(Muse错误) as 冲突:
service.记录参考挑选反馈(author, "ref-sel-1", _请求("combat", ("mv-b",), ("mv-c",)))
assert "IDEMPOTENCY_CONFLICT" in str(冲突.value) or "已保存不同内容" in str(冲突.value)
@pytest.mark.case_id(
"NC-w32-a10006",
environment="隔离PG;实际S01/B05/B09/S02与合成HTTP,不证明文学效果",
given="跨领域的多条真实参考挑选反馈",
when="按全部领域与指定领域读取挑选信号",
then=["选用与拒绝分列计数;位次保留样本;领域过滤生效"],
contract="docs/系统架构/新版设计/模块设计/B07-作者经验.md#偏好双轨关系",
)
def test_挑选信号分列计数与领域过滤__a10006(环境):
service, author, _, _ = 环境
service.记录参考挑选反馈(author, "sig-1", _请求("combat", ("mv-a", "mv-b"), ("mv-c",)))
service.记录参考挑选反馈(
author,
"sig-2",
参考挑选反馈请求(
query="机甲近距格斗",
domain="combat",
candidates=(挑选候选("mv-b", 1, 0.03), 挑选候选("mv-a", 2, 0.02)),
selected=("mv-b",),
index_generation=7,
),
)
service.记录参考挑选反馈(author, "sig-3", _请求("emotion", (), ("mv-a",), query="情感克制"))
信号 = {条["method_version_id"]: 条 for 条 in service.读取参考挑选信号(author)}
assert 信号["mv-a"]["选用次数"] == 1
assert 信号["mv-a"]["拒绝次数"] == 1
assert 信号["mv-a"]["选中位次"] == [1]
assert 信号["mv-b"]["选用次数"] == 2
assert 信号["mv-b"]["拒绝次数"] == 0
assert 信号["mv-b"]["选中位次"] == [1, 2]
assert 信号["mv-c"]["选用次数"] == 0
assert 信号["mv-c"]["拒绝次数"] == 1
assert 信号["mv-c"]["选中位次"] == []
combat = {条["method_version_id"]: 条 for 条 in service.读取参考挑选信号(author, 领域="combat")}
assert combat["mv-a"]["拒绝次数"] == 0 # 拒绝发生在 emotion 领域,不串算
assert combat["mv-a"]["选用次数"] == 1
assert combat["mv-c"]["拒绝次数"] == 1
信号情感 = service.读取参考挑选信号(author, 领域="emotion")
emotion = {条["method_version_id"]: 条 for 条 in 信号情感}
assert emotion["mv-a"]["选用次数"] == 0
assert emotion["mv-a"]["拒绝次数"] == 1
assert "mv-b" not in emotion
@pytest.mark.case_id(
"NC-w32-a10007",
environment="隔离PG;实际S01/B05/B09/S02与合成HTTP,不证明文学效果",
given="同一作者的改写对照反馈与参考挑选反馈",
when="经统一呈现入口读取两类反馈",
then=["按payload种类分派;存量改写对照合同不变"],
contract="docs/系统架构/新版设计/模块设计/B07-作者经验.md#偏好双轨关系",
)
def test_呈现反馈按种类分派且改写对照兼容__a10007(环境):
service, author, _, 改写请求 = 环境
对照 = service.记录反馈(author, "cmp-compat", 改写请求)
assert "种类" not in 对照["payload"]
呈现对照 = service.读取反馈(author, str(对照["feedback_id"]))
assert 呈现对照["before_text"] and 呈现对照["after_text"]
挑选 = service.记录参考挑选反馈(author, "sel-compat", _请求("combat", ("mv-a",), ()))
呈现挑选 = service.读取反馈(author, str(挑选["feedback_id"]))
assert 呈现挑选["请求"]["种类"] == "参考挑选"
assert 呈现挑选["请求"]["selected"] == ("mv-a",)
assert "before_text" not in 呈现挑选