Ariver
2026-07-02 0ffbf1935c9d091cce22a5583275ac0902f7a693
privatevoice.src/services/engine_service_test.go
@@ -1,6 +1,11 @@
package services
import "testing"
import (
   "testing"
   "voicesnap/internal/config"
   "voicesnap/internal/model"
)
func TestEngineServiceDownloadStatusTracksCancelAndFinish(t *testing.T) {
   service := NewEngineService(nil)
@@ -53,3 +58,109 @@
      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")
   }
}