欢迎语支持多段配置与图片
租户可配置有序文本/图片欢迎语;设置页支持增删排序与上传,Widget 空会话按序展示;兼容旧 welcome_message 字段。
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user