summaryrefslogtreecommitdiff
path: root/internal/gui/generator_test.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-04-01 22:31:06 +0300
committerPaul Buetow <paul@buetow.org>2026-04-01 22:31:06 +0300
commitfaa2465955445ac1cb1461eb70a98280d32fbf9a (patch)
tree2481479f774e0c5f117bb311cd189a217d7a6439 /internal/gui/generator_test.go
parente5623423c85b3cbe5c96943e94b07ccafa04368a (diff)
Wire Gemini audio into GUI
Diffstat (limited to 'internal/gui/generator_test.go')
-rw-r--r--internal/gui/generator_test.go78
1 files changed, 78 insertions, 0 deletions
diff --git a/internal/gui/generator_test.go b/internal/gui/generator_test.go
index 7c1e96b..635b990 100644
--- a/internal/gui/generator_test.go
+++ b/internal/gui/generator_test.go
@@ -220,6 +220,84 @@ func TestGenerateAudioUsesSharedOpenAIVoices(t *testing.T) {
}
}
+func TestGenerateAudioUsesSharedGeminiVoicesAndAttribution(t *testing.T) {
+ originalFactory := newAudioProvider
+ t.Cleanup(func() {
+ newAudioProvider = originalFactory
+ })
+
+ originalVoices := append([]string(nil), audio.GeminiVoices...)
+ t.Cleanup(func() {
+ audio.GeminiVoices = originalVoices
+ })
+
+ audio.GeminiVoices = []string{"sentinel-gemini-voice"}
+
+ fakeProvider := &fakeAudioProvider{}
+ var capturedConfig *audio.Config
+ newAudioProvider = func(config *audio.Config) (audio.Provider, error) {
+ copyConfig := *config
+ capturedConfig = &copyConfig
+ return fakeProvider, nil
+ }
+
+ tempDir := t.TempDir()
+ cardDir := filepath.Join(tempDir, "card")
+ if err := os.MkdirAll(cardDir, 0755); err != nil {
+ t.Fatalf("failed to create card dir: %v", err)
+ }
+
+ app := &Application{
+ config: &Config{
+ OutputDir: tempDir,
+ AudioFormat: "wav",
+ },
+ audioConfig: &audio.Config{
+ Provider: "gemini",
+ OutputDir: tempDir,
+ GoogleAPIKey: "google-key",
+ GeminiTTSModel: "gemini-2.5-flash-preview-tts",
+ },
+ }
+
+ outputPath, err := app.generateAudio(context.Background(), "ябълка", cardDir)
+ if err != nil {
+ t.Fatalf("generateAudio() unexpected error: %v", err)
+ }
+
+ if capturedConfig == nil {
+ t.Fatal("expected audio provider config to be captured")
+ }
+ if capturedConfig.Provider != "gemini" {
+ t.Fatalf("captured Provider = %q, want %q", capturedConfig.Provider, "gemini")
+ }
+ if capturedConfig.GeminiVoice != "sentinel-gemini-voice" {
+ t.Fatalf("captured GeminiVoice = %q, want %q", capturedConfig.GeminiVoice, "sentinel-gemini-voice")
+ }
+ if capturedConfig.OutputFormat != "wav" {
+ t.Fatalf("captured OutputFormat = %q, want %q", capturedConfig.OutputFormat, "wav")
+ }
+ if fakeProvider.generateCalls != 1 {
+ t.Fatalf("GenerateAudio() calls = %d, want %d", fakeProvider.generateCalls, 1)
+ }
+ if !strings.HasSuffix(outputPath, "audio.wav") {
+ t.Fatalf("outputPath = %q, want a WAV output file", outputPath)
+ }
+
+ attrPath := audio.AttributionPath(outputPath)
+ attributionData, err := os.ReadFile(attrPath)
+ if err != nil {
+ t.Fatalf("expected attribution file %q: %v", attrPath, err)
+ }
+ attribution := string(attributionData)
+ if !strings.Contains(attribution, "Audio generated by Google Gemini TTS") {
+ t.Fatalf("gemini attribution missing header: %q", attribution)
+ }
+ if !strings.Contains(attribution, "Voice: sentinel-gemini-voice") {
+ t.Fatalf("gemini attribution missing voice: %q", attribution)
+ }
+}
+
func TestGenerateAudioBgBgUsesSharedOpenAIVoices(t *testing.T) {
originalFactory := newAudioProvider
t.Cleanup(func() {