package httpapi import ( "strings" "testing" ) // status 归一:大小写不敏感、认中文别名、空值按 registered,认不出的必须报错而不是原样入库。 func TestNormalizeImportStatus(t *testing.T) { ok := map[string]string{ "": "registered", " ": "registered", "\u3000": "registered", // 只有全角空格 "registered": "registered", "Registered": "registered", "REGISTERED": "registered", " \u3000registered\u3000 ": "registered", "正常": "registered", "正常参赛": "registered", "参赛": "registered", "scratched": "scratched", "Scratched": "scratched", "退赛": "scratched", "弃赛": "scratched", "请假": "scratched", "dq": "dq", "DQ": "dq", "取消资格": "dq", "犯规": "dq", "dns": "dns", "DNS": "dns", "未出场": "dns", "未到": "dns", "缺席": "dns", } for raw, want := range ok { got, err := normalizeImportStatus(raw) if err != nil || got != want { t.Errorf("normalizeImportStatus(%q) = (%q, %v),期望 (%q, nil)", raw, got, err, want) } } for _, raw := range []string{"已报到", "unknown", "男子", "DNF", "registered/scratched"} { got, err := normalizeImportStatus(raw) if err == nil { t.Errorf("normalizeImportStatus(%q) 应报错,得到 %q", raw, got) continue } // 错误消息要能直接拼在「第 N 行:」后面,且带上原始值。 if !strings.Contains(err.Error(), raw) || !strings.Contains(err.Error(), "无法识别") { t.Errorf("normalizeImportStatus(%q) 的错误应含原值与「无法识别」,得到 %q", raw, err) } } }