修「填了显示名却说还没有中文名」,并给枚举拼错拦一道
用户报:把某行的导出值改成 MKPOICategoryCarRent、又手填了显示名「租车」, 保存成功、框里也回填了,页面却仍挂着「还没有中文名」。 两件事叠在一起: 1. 判断错了。Missing 只看内置表,没看有没有自定义覆盖 —— 填过了还照样提示。改成 categoryLabelMissing(v) && 没有覆盖。 补 TestCategoryLabelMissingRespectsOverride,并做变异验证(去掉那半个条件即报错)。 2. 值本身是拼错的。MKPOICategoryCarRent 不是真机的枚举,正确是 MKPOICategoryCarRental(少了个 al)——站内看不出任何异常,但导回手机后 那个地点显示不出类别。这正是加「显示名」时提醒过的风险,所以补一道防线: 编辑页把内置枚举名渲染给脚本,往 poi_category 写值的两个入口 (类别台账的「改名」、地点行内编辑的「自定义类别」)都过 okEnum(), 不在已知枚举里就 confirm,还能猜「你是不是想写 MKPOICategoryCarRental」。 中文值和已知枚举不打扰。 另外:这次用脚本往模板写 JS 时,\n 被多转义一层成了真换行,JS 单引号字符串 含裸换行 ⇒ 整块 <script> 语法错误、页面交互全哑,而模板解析测试照样通过。 新增 inline_script_test.go 扫所有内联脚本块(现在 31 个),字符串跨行就报错 并指出文件行号,已做变异验证。
This commit is contained in:
@@ -277,3 +277,44 @@ func TestCategoryLabelOverridesEverywhereThenResets(t *testing.T) {
|
||||
t.Error("恢复默认后不该再出现自定义名")
|
||||
}
|
||||
}
|
||||
|
||||
// 填过显示名之后就不该再标「还没有中文名」——判断得看覆盖,不能只看内置表。
|
||||
// (2026-09-20 用户把「租车点」改成拼错的 MKPOICategoryCarRent、又手填了显示名,
|
||||
// 页面却还挂着「还没有中文名」,就是这么来的。)
|
||||
func TestCategoryLabelMissingRespectsOverride(t *testing.T) {
|
||||
const val = "MKPOICategoryCarRent" // 真机没有这个枚举,内置表自然也没有
|
||||
f := newMovementFixture(t)
|
||||
f.mustExec(t, `INSERT INTO places (dataset_id, src_pk, name, lat, lon, poi_category)
|
||||
VALUES ($1,692021,'显示名测试点',30,120,$2)`, f.dsID, val)
|
||||
t.Cleanup(func() {
|
||||
f.pg.ExecContext(f.ctx, `DELETE FROM places WHERE dataset_id=$1 AND src_pk=692021`, f.dsID)
|
||||
f.pg.ExecContext(f.ctx, `DELETE FROM category_labels WHERE value=$1`, val)
|
||||
})
|
||||
body := func() string {
|
||||
rec := httptest.NewRecorder()
|
||||
f.srv.editPage(rec, httptest.NewRequest("GET", "/admin/edit", nil).WithContext(f.ctx))
|
||||
if rec.Code != http.StatusOK {
|
||||
t.Fatalf("渲染失败: %d", rec.Code)
|
||||
}
|
||||
return rec.Body.String()
|
||||
}
|
||||
|
||||
if b := body(); !strings.Contains(b, "还没有中文名") || !strings.Contains(b, "填一个中文名") {
|
||||
t.Fatal("既不在内置表、也没填过,应当提示去补一个中文名")
|
||||
}
|
||||
if got := taxonomyPost(t, f, "/admin/edit/category/label", url.Values{
|
||||
"value": {val}, "label": {"租车"},
|
||||
}); got["custom"] != true {
|
||||
t.Fatalf("应报告已自定义,实际 %v", got)
|
||||
}
|
||||
b := body()
|
||||
if strings.Contains(b, "还没有中文名") {
|
||||
t.Error("已经填过显示名了,不该再说「还没有中文名」")
|
||||
}
|
||||
if !strings.Contains(b, "已自定义") {
|
||||
t.Error("填过显示名之后应当标成「已自定义」")
|
||||
}
|
||||
if !strings.Contains(b, `value="租车"`) {
|
||||
t.Error("显示名框应回填已保存的名字")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user