package modelselection
|
|
import (
|
"testing"
|
|
"voicesnap/internal/config"
|
"voicesnap/internal/model"
|
)
|
|
type fakeDetector struct {
|
locale string
|
}
|
|
func (f fakeDetector) Detect() string {
|
return f.locale
|
}
|
|
func TestResolveAutoUsesEnglishDefaultModel(t *testing.T) {
|
cfg := config.Default()
|
cfg.LanguageMode = config.LanguageModeAuto
|
cfg.ModelSelectionMode = config.ModelSelectionModeAuto
|
|
current := Resolve(cfg, fakeDetector{locale: "en-US"})
|
if current.ModelID != model.MoonshineModelID {
|
t.Fatalf("model id = %q, want %q", current.ModelID, model.MoonshineModelID)
|
}
|
if current.Profile.BackendKind != model.BackendMoonshine {
|
t.Fatalf("backend = %q, want %q", current.Profile.BackendKind, model.BackendMoonshine)
|
}
|
}
|
|
func TestResolveAutoUsesChineseDefaultModel(t *testing.T) {
|
cfg := config.Default()
|
cfg.LanguageMode = config.LanguageModeAuto
|
cfg.ModelSelectionMode = config.ModelSelectionModeAuto
|
|
current := Resolve(cfg, fakeDetector{locale: "zh-CN"})
|
if current.ModelID != model.DefaultModelID {
|
t.Fatalf("model id = %q, want %q", current.ModelID, model.DefaultModelID)
|
}
|
}
|
|
func TestResolveOldConfigMissingSelectionModeUsesAuto(t *testing.T) {
|
cfg := config.Default()
|
cfg.LanguageMode = config.LanguageModeAuto
|
cfg.ModelSelectionMode = ""
|
cfg.SelectedModelID = model.DefaultModelID
|
|
current := Resolve(cfg, fakeDetector{locale: "en-US"})
|
if current.SelectionMode != config.ModelSelectionModeAuto {
|
t.Fatalf("selection mode = %q, want auto", current.SelectionMode)
|
}
|
if current.ModelID != model.MoonshineModelID {
|
t.Fatalf("old selected model locked current model to %q, want %q", current.ModelID, model.MoonshineModelID)
|
}
|
}
|
|
func TestResolveManualUsesSelectedModel(t *testing.T) {
|
cfg := config.Default()
|
cfg.LanguageMode = config.LanguageModeAuto
|
cfg.ModelSelectionMode = config.ModelSelectionModeManual
|
cfg.SelectedModelID = model.ParakeetModelID
|
|
current := Resolve(cfg, fakeDetector{locale: "en-US"})
|
if current.ModelID != model.ParakeetModelID {
|
t.Fatalf("model id = %q, want manual selected %q", current.ModelID, model.ParakeetModelID)
|
}
|
}
|
|
func TestResolveManualUsesQwen3ASRForChinese(t *testing.T) {
|
cfg := config.Default()
|
cfg.LanguageMode = config.LanguageModeAuto
|
cfg.ModelSelectionMode = config.ModelSelectionModeManual
|
cfg.SelectedModelID = model.Qwen3ASRModelID
|
|
current := Resolve(cfg, fakeDetector{locale: "zh-CN"})
|
if current.ModelID != model.Qwen3ASRModelID {
|
t.Fatalf("model id = %q, want manual selected %q", current.ModelID, model.Qwen3ASRModelID)
|
}
|
}
|
|
func TestResolveManualUsesXASRForChinese(t *testing.T) {
|
cfg := config.Default()
|
cfg.LanguageMode = config.LanguageModeAuto
|
cfg.ModelSelectionMode = config.ModelSelectionModeManual
|
cfg.SelectedModelID = model.XASRZhEn960ModelID
|
|
current := Resolve(cfg, fakeDetector{locale: "zh-CN"})
|
if current.ModelID != model.XASRZhEn960ModelID {
|
t.Fatalf("model id = %q, want manual selected %q", current.ModelID, model.XASRZhEn960ModelID)
|
}
|
}
|
|
func TestResolveManualUsesXASRForEnglish(t *testing.T) {
|
cfg := config.Default()
|
cfg.LanguageMode = config.LanguageModeAuto
|
cfg.ModelSelectionMode = config.ModelSelectionModeManual
|
cfg.SelectedModelID = model.XASRZhEn960ModelID
|
|
current := Resolve(cfg, fakeDetector{locale: "en-US"})
|
if current.ModelID != model.XASRZhEn960ModelID {
|
t.Fatalf("model id = %q, want manual selected %q", current.ModelID, model.XASRZhEn960ModelID)
|
}
|
}
|
|
func TestResolveManualModelFallsBackWhenLanguageIncompatible(t *testing.T) {
|
cfg := config.Default()
|
cfg.LanguageMode = config.LanguageModeAuto
|
cfg.ModelSelectionMode = config.ModelSelectionModeManual
|
cfg.SelectedModelID = model.ParakeetModelID
|
|
current := Resolve(cfg, fakeDetector{locale: "zh-CN"})
|
if current.ModelID != model.DefaultModelID {
|
t.Fatalf("model id = %q, want Chinese default %q", current.ModelID, model.DefaultModelID)
|
}
|
if current.FallbackReason == "" {
|
t.Fatal("expected fallback reason")
|
}
|
}
|
|
func TestResolveManualQwen3ASRFallsBackForEnglish(t *testing.T) {
|
cfg := config.Default()
|
cfg.LanguageMode = config.LanguageModeAuto
|
cfg.ModelSelectionMode = config.ModelSelectionModeManual
|
cfg.SelectedModelID = model.Qwen3ASRModelID
|
|
current := Resolve(cfg, fakeDetector{locale: "en-US"})
|
if current.ModelID != model.MoonshineModelID {
|
t.Fatalf("model id = %q, want English default %q", current.ModelID, model.MoonshineModelID)
|
}
|
if current.FallbackReason == "" {
|
t.Fatal("expected fallback reason")
|
}
|
}
|
|
func TestResolveInvalidManualFallsBackToLanguageDefault(t *testing.T) {
|
cfg := config.Default()
|
cfg.LanguageMode = config.LanguageModeAuto
|
cfg.ModelSelectionMode = config.ModelSelectionModeManual
|
cfg.SelectedModelID = "bad-model"
|
|
current := Resolve(cfg, fakeDetector{locale: "en-US"})
|
if current.ModelID != model.MoonshineModelID {
|
t.Fatalf("model id = %q, want %q", current.ModelID, model.MoonshineModelID)
|
}
|
if current.FallbackReason == "" {
|
t.Fatal("expected fallback reason")
|
}
|
}
|