| | |
| | | package services |
| | | |
| | | import "testing" |
| | | import ( |
| | | "testing" |
| | | |
| | | "voicesnap/internal/config" |
| | | "voicesnap/internal/model" |
| | | ) |
| | | |
| | | func TestEngineServiceDownloadStatusTracksCancelAndFinish(t *testing.T) { |
| | | service := NewEngineService(nil) |
| | |
| | | t.Fatalf("modelID after finish = %v, want empty", got) |
| | | } |
| | | } |
| | | |
| | | func TestListModelOptionsForCantoneseOnlyOffersSenseVoiceYue(t *testing.T) { |
| | | cfg := config.Default() |
| | | cfg.LanguageMode = config.LanguageModeManual |
| | | cfg.LanguageID = model.CantoneseLanguageID |
| | | cfg.ModelSelectionMode = config.ModelSelectionModeAuto |
| | | |
| | | service := NewEngineService(cfg) |
| | | options := service.ListModelOptions() |
| | | if len(options) != 1 { |
| | | t.Fatalf("options len = %d, want 1: %#v", len(options), options) |
| | | } |
| | | if got := options[0]["modelID"]; got != model.SenseVoiceYueModelID { |
| | | t.Fatalf("modelID = %v, want %s", got, model.SenseVoiceYueModelID) |
| | | } |
| | | if got := options[0]["isDefault"]; got != true { |
| | | t.Fatalf("isDefault = %v, want true", got) |
| | | } |
| | | } |
| | | |
| | | func TestListModelOptionsForLanguagePreviewsCantoneseWithoutPersisting(t *testing.T) { |
| | | cfg := config.Default() |
| | | cfg.LanguageMode = config.LanguageModeManual |
| | | cfg.LanguageID = model.DefaultLanguageID |
| | | service := NewEngineService(cfg) |
| | | |
| | | options := service.ListModelOptionsForLanguage(model.CantoneseLanguageID) |
| | | if len(options) != 1 { |
| | | t.Fatalf("options len = %d, want 1: %#v", len(options), options) |
| | | } |
| | | if got := options[0]["modelID"]; got != model.SenseVoiceYueModelID { |
| | | t.Fatalf("modelID = %v, want %s", got, model.SenseVoiceYueModelID) |
| | | } |
| | | if got := options[0]["languageID"]; got != model.CantoneseLanguageID { |
| | | t.Fatalf("languageID = %v, want %s", got, model.CantoneseLanguageID) |
| | | } |
| | | if cfg.LanguageID != model.DefaultLanguageID { |
| | | t.Fatalf("cfg.LanguageID = %q, want unchanged %q", cfg.LanguageID, model.DefaultLanguageID) |
| | | } |
| | | } |
| | | |
| | | func TestListModelOptionsForLanguageDoesNotMarkSharedCurrentModelForPendingLanguage(t *testing.T) { |
| | | cfg := config.Default() |
| | | cfg.LanguageMode = config.LanguageModeManual |
| | | cfg.LanguageID = model.DefaultLanguageID |
| | | cfg.ModelSelectionMode = config.ModelSelectionModeManual |
| | | cfg.SelectedModelID = model.XASRZhEn960ModelID |
| | | service := NewEngineService(cfg) |
| | | |
| | | options := service.ListModelOptionsForLanguage(model.EnglishLanguageID) |
| | | var found bool |
| | | for _, option := range options { |
| | | if option["modelID"] != model.XASRZhEn960ModelID { |
| | | continue |
| | | } |
| | | found = true |
| | | if got := option["isCurrent"]; got != false { |
| | | t.Fatalf("isCurrent = %v, want false for pending language shared model", got) |
| | | } |
| | | } |
| | | if !found { |
| | | t.Fatalf("expected %s in English options: %#v", model.XASRZhEn960ModelID, options) |
| | | } |
| | | } |
| | | |
| | | func TestAllowedModelProfileForLanguageAcceptsCantoneseWithoutPersisting(t *testing.T) { |
| | | cfg := config.Default() |
| | | cfg.LanguageMode = config.LanguageModeManual |
| | | cfg.LanguageID = model.DefaultLanguageID |
| | | service := NewEngineService(cfg) |
| | | |
| | | profile, languageProfile, err := service.allowedModelProfileForLanguage(model.CantoneseLanguageID, model.SenseVoiceYueModelID) |
| | | if err != nil { |
| | | t.Fatalf("allowedModelProfileForLanguage returned error: %v", err) |
| | | } |
| | | if profile.ID != model.SenseVoiceYueModelID { |
| | | t.Fatalf("profile id = %q, want %q", profile.ID, model.SenseVoiceYueModelID) |
| | | } |
| | | if languageProfile.ID != model.CantoneseLanguageID { |
| | | t.Fatalf("language profile id = %q, want %q", languageProfile.ID, model.CantoneseLanguageID) |
| | | } |
| | | if _, err := service.allowedModelProfile(model.SenseVoiceYueModelID); err == nil { |
| | | t.Fatal("expected current Chinese language to reject SenseVoice Yue") |
| | | } |
| | | } |
| | | |
| | | func TestAllowedModelProfileForLanguageAcceptsTargetLanguageUpgradeWithoutPersisting(t *testing.T) { |
| | | cfg := config.Default() |
| | | cfg.LanguageMode = config.LanguageModeManual |
| | | cfg.LanguageID = model.DefaultLanguageID |
| | | service := NewEngineService(cfg) |
| | | |
| | | profile, languageProfile, err := service.allowedModelProfileForLanguage(model.EnglishLanguageID, model.ParakeetModelID) |
| | | if err != nil { |
| | | t.Fatalf("allowedModelProfileForLanguage returned error: %v", err) |
| | | } |
| | | if profile.ID != model.ParakeetModelID { |
| | | t.Fatalf("profile id = %q, want %q", profile.ID, model.ParakeetModelID) |
| | | } |
| | | if languageProfile.ID != model.EnglishLanguageID { |
| | | t.Fatalf("language profile id = %q, want %q", languageProfile.ID, model.EnglishLanguageID) |
| | | } |
| | | if _, err := service.allowedModelProfile(model.ParakeetModelID); err == nil { |
| | | t.Fatal("expected current Chinese language to reject Parakeet") |
| | | } |
| | | } |