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.DefaultModelID current := Resolve(cfg, fakeDetector{locale: "en-US"}) if current.ModelID != model.DefaultModelID { t.Fatalf("model id = %q, want manual selected %q", current.ModelID, model.DefaultModelID) } } 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") } }