Files
group_fqcd_jr/tests/integration
张胜宇 7cacb16252 test(W29-d): 补上「数据落库 + HTTP 链路」的端到端验证(此前只测到进程内直调)
## 补的是什么空白

W28 / W29 的全部验证都是**进程内直调** —— 直接构造 ToolExecutor、直接调 Agent,
或者**手写** configured_tools。**从来没有走过「HTTP 受理 → Worker 执行 → 落库」这条真实链路。**

补测前的实测证据:

    conversation_message 里 tool_calls LIKE '%trend_chart%'  -> 0 条
    conversation_message 里 tool_calls LIKE '%svc_topic%'    -> 0 条(W28 事项码)
    agent_run 里 agent_type='financial_nl2sql'               -> 0 条
    最近一条真实 run                                          -> 2026-09-21 14:46(早于这两批改动)

而**前端取图完全依赖这条路**:前端读的是 `result.tool_calls.data.trend_chart`,
它由 `agent_persistence_service` 写进 `conversation_message.tool_calls` 这个 JSON 列。
**这条路不通,图就是「代码里有、页面上没有」。**

## 两个测试

1. `test_customer_service_trend_chart_persistence.py`
   走势问句走 HTTP + Worker,断言 `trend_chart` 与 `svc_topic` 同时出现在**出参与库里**;
   并逐条断言图数据中的涨跌数字**出现在答复正文里**(`INV-8` 的落库侧前提)。

2. `test_financial_nl2sql_http_wiring.py`
   接线后 `financial_nl2sql` 能否在**真实 HTTP 链路**上出结果。
   此前的「接线验证」是**手写 configured_tools** —— 等于把要验证的东西自己填好了:
   它能证明「工具逻辑对」,但**证明不了「接线生效」**(白名单是从 `config_release` 装配的)。
   断言 `data` / `sql` 出参 + SELECT-only 自证 + `data.total`(证明**真的执行了**,不是只编译)。

两个测试都按 `session_id`(带 uuid)隔离并在 finally 清理,不污染历史数据。

## 结果

- 两条单跑均 passed(4.12s / 2.84s)
- 全量 pytest **2547 passed / 3 skipped / 0 failed**(2545 + 2)
- ruff:两个新文件 0 告警

## 一句留给后人的话

写这两个测试时的第一个失败是 `TypeError: object RequestContext can't be used in
'await' expression` —— `WorkerRuntime.restore_context` 会 `await self.resolve_identity(...)`,
必须传**协程函数**,不能传 lambda。已在两处代码里注明,免得下一个人再踩。
2026-09-22 10:47:48 +08:00
..
2026-09-14 18:13:10 +08:00