69 lines
1.9 KiB
Go
69 lines
1.9 KiB
Go
package handler
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"kefu-cloud/server/internal/model"
|
|
)
|
|
|
|
func TestNormalizeWelcomeSegments(t *testing.T) {
|
|
SetImagePublicBase("http://localhost:9100/kefu")
|
|
|
|
_, _, err := normalizeWelcomeSegments(nil)
|
|
if err == nil {
|
|
t.Fatal("空列表应失败")
|
|
}
|
|
|
|
ok, first, err := normalizeWelcomeSegments([]WelcomeSegment{
|
|
{Type: "text", Content: " 你好 "},
|
|
{Type: "image", Content: "http://localhost:9100/kefu/tenants/1/welcome/a.webp"},
|
|
{Type: "text", Content: "请描述问题"},
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("合法多段应通过: %v", err)
|
|
}
|
|
if len(ok) != 3 || ok[0].Content != "你好" || first != "你好" {
|
|
t.Fatalf("规范化结果异常: %+v first=%s", ok, first)
|
|
}
|
|
|
|
_, _, err = normalizeWelcomeSegments([]WelcomeSegment{
|
|
{Type: "image", Content: "https://evil.example/x.png"},
|
|
})
|
|
if err == nil {
|
|
t.Fatal("非白名单图片 URL 应失败")
|
|
}
|
|
|
|
tooMany := make([]WelcomeSegment, maxWelcomeSegments+1)
|
|
for i := range tooMany {
|
|
tooMany[i] = WelcomeSegment{Type: "text", Content: "x"}
|
|
}
|
|
if _, _, err := normalizeWelcomeSegments(tooMany); err == nil {
|
|
t.Fatal("超过段数上限应失败")
|
|
}
|
|
}
|
|
|
|
func TestResolveWelcomeSegmentsCompat(t *testing.T) {
|
|
// 仅有旧字段
|
|
s1 := &model.TenantSetting{WelcomeMessage: "旧欢迎语"}
|
|
segs := resolveWelcomeSegments(s1)
|
|
if len(segs) != 1 || segs[0].Type != "text" || segs[0].Content != "旧欢迎语" {
|
|
t.Fatalf("旧字段兼容失败: %+v", segs)
|
|
}
|
|
|
|
// 优先 JSON
|
|
s2 := &model.TenantSetting{
|
|
WelcomeMessage: "旧",
|
|
WelcomeMessagesJSON: `[{"type":"text","content":"新1"},{"type":"image","content":"http://x/a.webp"}]`,
|
|
}
|
|
segs = resolveWelcomeSegments(s2)
|
|
if len(segs) != 2 || segs[0].Content != "新1" {
|
|
t.Fatalf("JSON 优先失败: %+v", segs)
|
|
}
|
|
|
|
// 空 → 默认
|
|
segs = resolveWelcomeSegments(&model.TenantSetting{})
|
|
if len(segs) != 1 || segs[0].Content != defaultWelcomeMessage {
|
|
t.Fatalf("默认欢迎语失败: %+v", segs)
|
|
}
|
|
}
|