6.5 KiB
6.5 KiB
W-07 demo 模块功能点自测(正例 + 反例)
依据 feature-granularity-and-testing:每个小功能点至少 1 正例 + 1 反例,期望可判定。 执行入口:部署到 /d/scense/scense_app 后,用登录 cookie 请求
http://<host>:<port>/demo/api/*.dspy。 数据库:宿主库(get_module_dbname('demo')),表 demo_session / demo_session_state / demo_hot_script / demo_presence。
W-07a 开始演示(进入预览态)— POST /demo/api/start.dspy
- 正例 W-07a-pos:body
{"world_id":"w001","session_name":"产品演示"}→ 期望status=200且data.session_id非空、data.status="preview"、data.camera_mode="orbit";库 demo_session 新增 1 行 status=preview。 - 反例 W-07a-neg-1(缺参):body
{}→ 期望status=400且 message 含 "world_id"。 - 反例 W-07a-neg-2(重复):同一 world_id 连续两次 start → 第二次期望
status=409且 message 含 "已有进行中的演示会话"。 - 反例 W-07a-neg-3(世界不存在):
{"world_id":"no_such_world"}→ 期望status=404(world 模块可用时)或 200(world 模块未挂载时跳过校验,防御式)。
W-07b 结束演示(状态隔离)— POST /demo/api/stop.dspy
- 正例 W-07b-pos:对进行中会话
{"session_id":"<sid>"}→ 期望status=200且data.overlay_cleared=true;demo_session.status=ended;demo_session_state/demo_hot_script/demo_presence 中该 session_id 记录数为 0;正式 entity/world 表无变化。 - 反例 W-07b-neg-1(缺参):
{}→status=400。 - 反例 W-07b-neg-2(不存在):
{"session_id":"no_such"}→status=404。 - 反例 W-07b-neg-3(重复结束):对已 ended 会话再 stop →
status=400且 message 含 "已结束"。
W-07c 编辑实体实时反映(<1s) — POST /demo/api/entity_edit.dspy
- 正例 W-07c-pos:
{"session_id":"<sid>","entity_id":"e1","fields":{"color":"#22C55E","size":2}}→status=200;随后调 state.dspy,entities[].state.color="#22C55E";前端轮询 500ms → 编辑后 <1s 反映;demo_session_state.demo_json 更新、base_json 不变。 - 反例 W-07c-neg-1(缺参):缺 entity_id →
status=400。 - 反例 W-07c-neg-2(fields 非法):fields 传数组/字符串 →
status=400message 含 "fields 必须是对象"。 - 反例 W-07c-neg-3(会话不存在):
{"session_id":"no_such",...}→status=404。 - 反例 W-07c-neg-4(会话已结束):ended 会话 →
status=400message 含 "已结束"。
W-07d 脚本保存热加载 — POST /demo/api/hotload.dspy
- 正例 W-07d-pos:
{"session_id":"<sid>","script_id":"s1","script_type":"python","script_content":"print('hi')"}→status=200且data.status="hot_loaded";demo_hot_script 新增 1 行;state.dspy scripts 列表可见。 - 反例 W-07d-neg-1(语法错误):content=
"def f(:"→status=400message 含 "语法错误"。 - 反例 W-07d-neg-2(内容为空):content 空 →
status=400。 - 反例 W-07d-neg-3(类型非法):script_type=
"sql"→status=400message 含 "非法脚本类型"。
W-07e 视角切换 — POST /demo/api/camera.dspy
- 正例 W-07e-pos:
{"session_id":"<sid>","camera_mode":"topdown"}→status=200且data.camera_mode="topdown";state.dspy 中 camera_mode=topdown。 - 反例 W-07e-neg-1(白名单外):
camera_mode="free"→status=400message 含 "非法视角模式"。 - 反例 W-07e-neg-2(会话不存在):→
status=404。 - 反例 W-07e-neg-3(已结束):ended 会话 →
status=400。
W-07f 暂停/继续 — POST /demo/api/pause.dspy
- 正例 W-07f-pos-暂停:
{"session_id":"<sid>","paused":true}→status=200且data.status="paused"。 - 正例 W-07f-pos-继续:再传
paused:false→status=200且data.status="preview"。 - 反例 W-07f-neg-1(缺参):缺 paused →
status=400。 - 反例 W-07f-neg-2(已结束):ended 会话 →
status=400。
W-07g 全屏 — POST /demo/api/fullscreen.dspy
- 正例 W-07g-pos:
{"session_id":"<sid>","enabled":true}→status=200且data.fullscreen=true;demo_session.extra_json 含"fullscreen":true。 - 反例 W-07g-neg-1(缺参):缺 enabled →
status=400。 - 反例 W-07g-neg-2(会话不存在):→
status=404。
W-07h 状态隔离(演示改动不污染正式数据)— 组合验证
- 正例 W-07h-pos:演示中编辑 e1 后,查询正式 entity 表(entity_id=e1)确认字段未被修改;stop 后 demo_session_state 无残留;再次 query entity 表仍为原值。
- 反例 W-07h-neg(残留污染):stop 后若 demo_session_state 仍查到该 session_id 记录 → 判 FAIL(隔离失效)。
W-07i 查看实体属性 — POST /demo/api/entity_attrs.dspy
- 正例 W-07i-pos:
{"session_id":"<sid>","entity_id":"e1"}→status=200且 data 含 base/demo/merged 三对象;merged=base 与 demo 合并。 - 反例 W-07i-neg-1(实体不在会话):
{"session_id":"<sid>","entity_id":"no_such"}→status=404message 含 "实体不存在于演示会话"。 - 反例 W-07i-neg-2(缺参):→
status=400。
W-07j 多人预览 — POST /demo/api/presence.dspy
- 正例 W-07j-pos-加入:
{"session_id":"<sid>","action":"join","user_id":"u1"}→status=200且data.viewer_count=1;demo_presence 新增 1 行。 - 正例 W-07j-pos-离开:
action:"leave","user_id":"u1"→status=200且data.viewer_count=0。 - 正例 W-07j-pos-多人在线:u1/u2 都 join →
viewer_count=2。 - 反例 W-07j-neg-1(action 非法):
action="kick"→status=400message 含 "action 只能为 join/leave"。 - 反例 W-07j-neg-2(会话不存在):→
status=404。
状态机合法性补充
- W-07a 开始后 → preview;W-07f 暂停 → paused,继续 → preview;W-07b 结束 → ended(唯一出口);ended 后 start/camera/pause/entity_edit/hotload/presence 全部 400。
验收汇总表(执行后填写)
| 功能点 | 用例数(正/反) | pass | fail | blocked | 证据 |
|---|---|---|---|---|---|
| W-07a | 1/3 | ||||
| W-07b | 1/3 | ||||
| W-07c | 1/4 | ||||
| W-07d | 1/3 | ||||
| W-07e | 1/3 | ||||
| W-07f | 2/2 | ||||
| W-07g | 1/2 | ||||
| W-07h | 1/1 | ||||
| W-07i | 1/2 | ||||
| W-07j | 3/2 | ||||
| 合计 | 13/25=38 |
说明:本工作空间无 /d/scense/scense_app 部署目录与运行库,无法在此实跑;上述用例在部署环境执行, actual_result 记录原始响应体(status/message/data),fail 一律落 sd_bugs(关联 task_id)。