Files
ttstd-infinite-canvas/backend/internal/app/project_character_voice_rename_test.go

42 lines
1.8 KiB
Go

package app
import (
"testing"
"time"
"yingce/backend/internal/model"
)
func TestCharacterVoiceRebindUsesLatestSampleName(t *testing.T) {
service, db, _, _ := creationTestService(t)
now := time.Now()
for _, item := range []any{
&model.Resource{ID: "voice-sample", UserID: "user", Kind: "audio", Status: model.ResourceStatusReady, MimeType: "audio/mpeg", Size: 10},
&model.VoiceProfile{ID: "sample-profile", UserID: "user", Name: "生成音频", Provider: "user_upload", VoiceKey: "sample:voice-sample", SampleResourceID: "voice-sample", CompatibleModelsJSON: "[]", Status: "active", CreatedAt: now, UpdatedAt: now},
} {
if err := db.Create(item).Error; err != nil {
t.Fatal(err)
}
}
binding, err := service.characterVoiceForResource("user", "voice-sample", "杨过·声音", "", now)
if err != nil || binding.VoiceProfileID != "sample-profile" {
t.Fatalf("binding = %#v, %v", binding, err)
}
var renamed model.VoiceProfile
if err := db.First(&renamed, "id = ?", "sample-profile").Error; err != nil || renamed.Name != "杨过·声音" {
t.Fatalf("sample voice kept stale name: %q, %v", renamed.Name, err)
}
// 空名字不能把已有名字清掉。
if _, err := service.characterVoiceForResource("user", "voice-sample", " ", "", now); err != nil {
t.Fatal(err)
}
if err := db.First(&renamed, "id = ?", "sample-profile").Error; err != nil || renamed.Name != "杨过·声音" {
t.Fatalf("empty name overwrote voice name: %q, %v", renamed.Name, err)
}
// 内置音色名称由系统维护,不跟随用户输入改名。
builtin := model.VoiceProfile{ID: "builtin-profile", Provider: "openai", Name: "alloy"}
if err := service.renameSampleVoiceProfile("user", &builtin, "改名"); err != nil || builtin.Name != "alloy" {
t.Fatalf("builtin voice renamed: %q, %v", builtin.Name, err)
}
}