http://100.64.1.230:8089(容器 kailash-staging-app,DB=PG_DB kailash_staging)app/routers/admin_ops.py:20 APIRouter(prefix="/api/miniapp/admin", tags=["admin-ops"])任务原文 URL /api/miniapp/admin/ops/merchants 实测为路由级 404(泛化 {"detail":"Not Found"},探测 request_id:d=1→c39febac4f8e,d=999→605018b9cdd4,d=2→1e9336c5fc28)。
容器内省 FastAPI 路由表证实:admin_ops 路由器挂载前缀 /api/miniapp/admin,端点 /merchants,实际完整路径为 /api/miniapp/admin/merchants(无 /ops 层级)。以下结果均按修正路径执行。
| 例名 | HTTP 码 | 判定 | request_id |
|---|---|---|---|
| ①正例 GET /api/miniapp/admin/destinations | 200 | PASS | e0c40174b2d4 |
| ②正例 GET /api/miniapp/admin/merchants?destination_id=1 | 200 | PASS | 08770dc6229e |
| ③-a反例 GET /api/miniapp/admin/merchants?destination_id=999 | 404 | PASS | 8fcc4bad2444 |
| ③-b反例 GET /api/miniapp/admin/merchants?destination_id=2 | 404(预期 403) | FAIL | 5c348665b0f0 |
小计:3 PASS / 1 FAIL(全部响应 x-request-id 与 body request_id 一致)。
① 正例 destinations → 200 PASS
{"code":0,"data":[{"destinationId":"1","name":"[测试]冈仁波齐-转山基线载体","status":"active","merchantCount":31,"orderCount":164}],"success":true}"1")② 正例 merchants?destination_id=1 → 200 PASS
③-a 反例 destination_id=999 → 404 PASS
{"success":false,"error":{"code":404,"message":"目的地不存在"},"detail":"目的地不存在"}③-b 反例 destination_id=2 → 实际 404,预期 403 → FAIL
{"success":false,"error":{"code":404,"message":"目的地不存在"},"detail":"目的地不存在"}kailash_staging 的 destinations 表实际仅 1 行(id=1,active),不存在 id=2 的行,故 d=2 命中「不存在→404」分支,403 分支在当前数据下不可达。app/tenant.py resolve_destination(requested 路径):不存在→404「目的地不存在」;status∉(active/enabled/online/正常)→403「目的地未启用」;admin_ops.py:70 参数文档原文「不存在=404/未启用=403/与凭证不符=403」。destinations(列:id serial, name varchar(64), anchor_poi varchar(64) nullable, status varchar(16) default 'active')插入一行非 active 目的地(如 name='[测试]未启用载体', status='disabled'),复跑 ③-b 应得 403「目的地未启用」。fixture:destinations 插 id=2「测试目的地(机位fixture)」status=inactive(is_test 种子纪律内)。
| 例 | 期望 | 实测 | 判定 |
|---|---|---|---|
| destination_id=2(未启用) | 403 | 403 | ✅ PASS |
| destination_id=1(回归) | 200 | 200 | ✅ PASS |
| destination_id=999(不存在) | 404 | 404 | ✅ PASS |
终局 4/4 PASS——切换器三正反例全绿,403 分支证据补齐。