thread-master/apps/backend/internal/module/ai/client_test.go

77 lines
2.7 KiB
Go
Raw Permalink Normal View History

2026-07-13 01:15:30 +00:00
package ai_test
import (
"context"
"testing"
"apps/backend/internal/module/ai"
"github.com/stretchr/testify/require"
)
func TestST_03_ListModelsNonEmpty(t *testing.T) {
list := ai.ModelsForProvider("xai")
require.NotEmpty(t, list)
list2 := ai.ModelsForProvider("opencode-go")
require.NotEmpty(t, list2)
// OpenCode Go 不是 OpenAI gpt-* 模型名
require.NotContains(t, list2, "gpt-4o-mini")
require.Contains(t, list2, "kimi-k2.6")
}
func TestSanitizeModelDoesNotForceUserChoice(t *testing.T) {
// 會員選 deepseek 不應被改掉
require.Equal(t, "deepseek-v4-flash", ai.SanitizeModel("opencode-go", "deepseek-v4-flash"))
require.Equal(t, "glm-5.1", ai.SanitizeModel("opencode-go", "glm-5.1"))
// 空模型才給 fallback僅 UI 後備,執行路徑不應靠這個覆寫設定)
require.NotEmpty(t, ai.SanitizeModel("opencode-go", ""))
}
func TestST_09_NoKeyFails(t *testing.T) {
c := &ai.FakeClient{}
_, err := c.Complete(context.Background(), "", "grok-3", "hi")
require.Error(t, err)
_, err = c.ListModels(context.Background(), "")
require.Error(t, err)
}
func TestST_05_PlatformCallOk(t *testing.T) {
c := &ai.FakeClient{}
out, err := c.Complete(context.Background(), "platform-key", "grok-3", "hello")
require.NoError(t, err)
require.Contains(t, out, "hello")
}
func TestNormalizeProvider(t *testing.T) {
require.Equal(t, ai.ProviderXAI, ai.NormalizeProvider("xai"))
require.Equal(t, ai.ProviderOpenCodeGo, ai.NormalizeProvider("opencode-go"))
require.Equal(t, ai.ProviderOpenCodeGo, ai.NormalizeProvider("opencode"))
}
func TestSystemPromptLanguage(t *testing.T) {
zh := ai.SystemPromptForLanguage("zh-TW")
require.Contains(t, zh, "繁體中文")
// 不應綁產品客服人設,否則仿寫會變助手腔
require.NotContains(t, zh, "Harbor Desk")
require.NotContains(t, zh, "助手")
en := ai.SystemPromptForLanguage("en")
require.Contains(t, en, "English")
require.NotContains(t, en, "Harbor Desk")
require.Equal(t, "zh-TW", ai.PickLanguage("", "zh-TW,zh;q=0.9"))
require.Equal(t, "en", ai.PickLanguage("en", "zh-TW"))
ctx := ai.WithResponseLanguage(context.Background(), "en-US")
require.Equal(t, "en", ai.ResponseLanguageFrom(ctx))
}
func TestInferScriptLanguage(t *testing.T) {
require.Equal(t, "en", ai.InferScriptLanguage(
"I talk like a tired millennial who overshares about coffee and rent. Low energy, dry humor.",
"Sample: honestly the subway is a personality test at this point",
))
require.Equal(t, "zh-TW", ai.InferScriptLanguage(
"語氣偏碎念、口語,會用「欸」「真的假的」這類台灣用語。",
"範例:今天又被會議吸走三小時,下班只想躺平。",
))
require.Equal(t, "", ai.InferScriptLanguage("hi"))
}