跨端: 改名建议条接到详情页(端到端实测:点「接受」别名真的改了)
上一批做完了接口层,这批接 UI —— 详情页现在真的显示建议条并能操作。 ## 做了什么 提示条放在正文之前(与 WebUI 同位置):Agent 给的理由 + **后果说明** (「改名后需用 name@path.xxx 寻址;旧别名立即失效……」)+ 「接受」/「忽略」。 蓝底(`accentSoft`)而不是警告色:它不是故障,是一个**待决定**; 深色下走 `accentSoftFor`(就是前一批修的那个主题感知浅底)。 `doAcceptRename` 走 `PUT /sessions/{id}/alias`(与"人手改别名"同一端点), `doDismissRename` 走专用 dismiss 端点 —— 服务端记下被驳回的别名, 否则每次打开会话都要重新点一次「忽略」。 ## 途中三处**我自己的**错误(都值得记) 1. **写错了请求体字段名**:我按记忆写成 `session_alias`,而服务端 `updateAliasRequest` 的 tag 是 **`alias`**(`sessions.go:95-97`), WebUI 也是 `{ alias }`(`client.ts:537`)。而它的 `Decode()` 是 `DisallowUnknownFields()` ⇒ 传错名字**直接 400**(不是"被忽略")。 这是今天第三次同源错误(`AppearancePayload` / `ForwardMailRequest` / 这次)—— **请求体字段名必须去服务端 struct tag 里读,不能凭记忆写**。 2. **判据跟着实现一起错**:我把判据也写成"断言 `session_alias: alias`" —— 等于把这处错误**锁进两处**。判据已改成断言 `this.alias = alias`, 并加了一条反向断言"不许出现 `session_alias: alias`"。 ★ 这是"判据引自己的实现当依据"的又一次实证。 3. **UI 写完忘了接数据**:提示条的 UI 做完、编译过,但**没有调用 `getRenameProposal`** ⇒ 页面上永远不显示(服务端明明有建议)。 —— 正是本仓反复出现的"写好了但没人调用":静态判据查得出"代码里有这个方法", 查不出"页面从没调过它"。 ⇒ 补上 `loadRenameProposal()`,并**单独一个 try**(建议条是附加信息, 它失败不该把正文也变成错误态)。 ## 端到端验证(真数据) 造一封带标记的真邮件投进一个真会话 → 服务端识别(`rename_proposed: "rename-verify"`) → 详情页出现建议条(dump 读到理由 + 后果说明 + 两个按钮) → 点「接受」→ 库里别名真的变了: 处理四桥冒烟测试邮件 → rename-verify ## 判据 `run-all.mjs` → `checks=510 pass=510 fail=0 skip=0 red=0 broken=0 unreported=0`。 `hvigorw assembleHap` 成功;前端重建 + 重打包。 **未验**:「忽略」按钮的端到端(服务端记下驳回、不再重复弹)—— 接口层已有判据钉住路径,但没在设备上真点过。
This commit is contained in:
@ -711,8 +711,18 @@ test('★ 改名建议:字段名与两端契约一致,接受/驳回走对端
|
||||
assert.match(api, /\/sessions\/' \+ sessionId \+ '\/alias'/,
|
||||
'★ 接受建议要走 `PUT /sessions/{id}/alias` —— ' +
|
||||
'服务端特意不另开端点(唯一性校验与 409 处理只该有一处)');
|
||||
assert.match(api, /session_alias: alias/,
|
||||
'★ 别名端点的请求体字段是 `session_alias`(服务端 json tag)');
|
||||
/*
|
||||
* ★★ 这里我**第一版判据自己写错了**(写成了 `session_alias`)——
|
||||
* 服务端 `updateAliasRequest` 的 tag 是 **`alias`**(`sessions.go:95-97`),
|
||||
* 而它的 `Decode()` 是 `DisallowUnknownFields()` ⇒ 传错名字**直接 400**。
|
||||
* 判据跟着实现一起错,等于把这处错误**锁进两处**。
|
||||
* (WebUI 侧也是 `{ alias }`,见 `client.ts:537` —— 两端都该以它为准。)
|
||||
*/
|
||||
assert.match(api, /this\.alias = alias;/,
|
||||
'★ 别名端点的请求体字段必须是 `alias`(服务端 `updateAliasRequest` 的 json tag)—— ' +
|
||||
'写成 `session_alias` 会被 DisallowUnknownFields 拒收(400)');
|
||||
assert.ok(!/session_alias: alias/.test(api),
|
||||
'★ 不许用 `session_alias` 当请求体字段名 —— 那不是服务端认识的 tag');
|
||||
|
||||
/* ④ 驳回走**专用端点**(它不是改别名,是"别再问了") */
|
||||
assert.match(api, /rename-proposal\/dismiss/,
|
||||
|
||||
Reference in New Issue
Block a user