Files
ttstd-infinite-canvas/backend/internal/app/channel_model_directory_test.go
Rou 054dab28cc fix(workbench): 模型目录与助手形象 - 修正 Live2D 首帧闪现和模型默认分组 (#773)
* fix(workbench): 模型目录与助手形象 - 修正 Live2D 首帧闪现和模型默认分组

进入画布时形象配置与 Live2D 首帧未就绪不再显示默认球,改为加载提示,失败才回退。

新导入模型一级目录默认未分类、二级渠道展示名默认跟随上游 ID;历史非空分组(含与模型 ID 同名)保留。

拉取模型弹窗默认只勾选已存在模型并移除逐项已存在字样;一级分组下拉点击即展开全部选项。

* style(web): 画布与模型导入 - 按 Prettier 规范格式化改动文件

修复 PR 中 Web checks 的格式化检查失败:Live2D 启动器 JSX、模型导入选择工具函数与 Live2D 加载测试按项目 Prettier 配置重新排版,不改变行为。

* test(web): Live2D 生命周期 - 修复 bun 1.3.9 下 text 导入与模块导入冲突

agent-live2d-lifecycle 曾用 with { type: text } 导入 live2d-avatar.tsx,bun 1.3.9 会按路径复用该缓存,导致新增的模块导入拿不到 Live2DAvatar 具名导出并报 SyntaxError。改为 readFileSync 读取源码文本,本地以 bun 1.3.9 复现并验证通过。
2026-10-14 09:36:01 +08:00

53 lines
2.2 KiB
Go

package app
import (
"strings"
"testing"
"yingce/backend/internal/model"
)
func TestChannelModelDirectoryDefaultsAndCustomNames(t *testing.T) {
svc, db := newChannelModelTestService(t)
channel := model.ModelChannel{ID: "directory-defaults", Scope: model.ChannelScopeSystem, Enabled: true, Name: "Test", BaseURL: "https://example.invalid/v1", APIKey: "synthetic", ModelsJSON: `[]`}
if err := db.Create(&channel).Error; err != nil {
t.Fatal(err)
}
admin := &model.User{ID: "admin", Role: model.UserRoleAdmin}
enabled := true
request := ChannelModelRequest{
ModelKey: "product", ProviderModelKey: "upstream", Capability: "text", Protocol: string(model.ChannelInterfaceChatCompletion),
CapabilityConfig: DefaultModelCapabilityConfigForModel(string(model.ChannelInterfaceChatCompletion), "upstream"),
PriceTiers: []ChannelModelPriceTierRequest{{BillingMode: "fixed_request", PriceConfigured: true, Enabled: &enabled}},
Enabled: &enabled,
}
saved, err := svc.SaveAdminChannelModel(admin, channel.ID, "", request)
if err != nil {
t.Fatal(err)
}
if saved.DisplayName != "未分类" {
t.Fatalf("default group = %q", saved.DisplayName)
}
public, err := svc.sanitizeChannelModel(saved)
if err != nil || public.ChannelLabel != "upstream" {
t.Fatalf("default second-level label = %q, %v", public.ChannelLabel, err)
}
request.DisplayName, request.ChannelLabel = "product", "自定义渠道"
saved, err = svc.SaveAdminChannelModel(admin, channel.ID, saved.ID, request)
if err != nil || saved.DisplayName != "product" || saved.ChannelLabel != "自定义渠道" {
t.Fatalf("custom names = %#v, %v", saved, err)
}
// 默认名称无需写入较短的 channel_label 列,允许跟随超过 80 字的上游 ID。
request.DisplayName = "未分类"
request.ProviderModelKey = strings.Repeat("a", 100)
request.ChannelLabel = request.ProviderModelKey
saved, err = svc.SaveAdminChannelModel(admin, channel.ID, saved.ID, request)
if err != nil {
t.Fatal(err)
}
public, err = svc.sanitizeChannelModel(saved)
if err != nil || public.ChannelLabel != request.ProviderModelKey || saved.ChannelLabel != "" {
t.Fatalf("long default label = %q, %v", public.ChannelLabel, err)
}
}