summaryrefslogtreecommitdiff
path: root/internal/processor/processor_test.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-04-02 21:51:48 +0300
committerPaul Buetow <paul@buetow.org>2026-04-02 21:51:48 +0300
commit29f634d3413924af3a9dd6f89983c29b5320fe66 (patch)
treef3dd4f556d770e7e3fca0f822f51162865c35c83 /internal/processor/processor_test.go
parent993b2efe63e221cee550756770894c9c58474d25 (diff)
task 00c/00f: thread context through processor audio/image calls; per-word batch timeout
- Thread ctx context.Context through generateAudio, generateAudioBgBg, generateAudioWithVoice, generateAudioWithVoiceAndFilename, generateAudioWithVoiceAndFilenameInDir, and downloadImagesWithTranslation. Also add ctx to ProcessWordWithTranslationAndType so callers can control the deadline for the full word-processing pipeline. - In ProcessBatch, create a context.WithTimeout(5 * time.Minute) per word so a single hung TTS or image API call cannot block the whole batch run. Previously both functions created context.Background() internally, making cancellation impossible. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'internal/processor/processor_test.go')
-rw-r--r--internal/processor/processor_test.go28
1 files changed, 14 insertions, 14 deletions
diff --git a/internal/processor/processor_test.go b/internal/processor/processor_test.go
index dcb8e06..db03266 100644
--- a/internal/processor/processor_test.go
+++ b/internal/processor/processor_test.go
@@ -390,7 +390,7 @@ func TestGenerateAudioUsesSharedOpenAIVoices(t *testing.T) {
p := NewProcessor(flags)
- if err := p.generateAudio("ябълка"); err != nil {
+ if err := p.generateAudio(context.Background(), "ябълка"); err != nil {
t.Fatalf("generateAudio() unexpected error: %v", err)
}
@@ -439,7 +439,7 @@ func TestGenerateAudioBgBgUsesSharedOpenAIVoices(t *testing.T) {
flags.AudioProvider = "openai"
p := NewProcessor(flags)
- if err := p.generateAudioBgBg("ябълка", "круша"); err != nil {
+ if err := p.generateAudioBgBg(context.Background(), "ябълка", "круша"); err != nil {
t.Fatalf("generateAudioBgBg() unexpected error: %v", err)
}
@@ -520,7 +520,7 @@ func TestGenerateAudioProviderFactoryError(t *testing.T) {
flags.AudioProvider = "openai"
p := NewProcessor(flags)
- err := p.generateAudio("ябълка")
+ err := p.generateAudio(context.Background(), "ябълка")
if err == nil {
t.Fatal("generateAudio() expected error from provider factory")
}
@@ -558,7 +558,7 @@ func TestGenerateAudioUsesConfiguredGeminiVoiceAndModel(t *testing.T) {
flags.AudioFormat = "mp3"
p := NewProcessor(flags)
- if err := p.generateAudio("ябълка!?"); err != nil {
+ if err := p.generateAudio(context.Background(), "ябълка!?"); err != nil {
t.Fatalf("generateAudio() unexpected error: %v", err)
}
@@ -657,7 +657,7 @@ func TestGenerateAudioUsesGeminiModelDefaultWhenVoiceNotSet(t *testing.T) {
flags.AudioProvider = "gemini"
p := NewProcessor(flags)
- if err := p.generateAudio("ябълка!?"); err != nil {
+ if err := p.generateAudio(context.Background(), "ябълка!?"); err != nil {
t.Fatalf("generateAudio() unexpected error: %v", err)
}
@@ -748,7 +748,7 @@ func TestGenerateGeminiAudioWithFallbacksRetriesAlternateVoice(t *testing.T) {
p := NewProcessor(flags)
p.randomIntn = func(int) int { return 0 }
output := captureStdout(t, func() {
- if err := p.generateAudio("ябълка"); err != nil {
+ if err := p.generateAudio(context.Background(), "ябълка"); err != nil {
t.Fatalf("generateAudio() unexpected error: %v", err)
}
})
@@ -812,7 +812,7 @@ func TestGenerateAudioReturnsExhaustedGeminiFallbackError(t *testing.T) {
flags.AudioProvider = "gemini"
p := NewProcessor(flags)
- err := p.generateAudio("ябълка")
+ err := p.generateAudio(context.Background(), "ябълка")
if !errors.Is(err, audio.ErrGeminiNoAudioData) {
t.Fatalf("generateAudio() error = %v, want wrapped ErrGeminiNoAudioData", err)
}
@@ -854,7 +854,7 @@ func TestGenerateAudioBgBgUsesGeminiModelDefaultWhenVoiceNotSet(t *testing.T) {
flags.AudioProvider = "gemini"
p := NewProcessor(flags)
- if err := p.generateAudioBgBg("ябълка!?", "круша."); err != nil {
+ if err := p.generateAudioBgBg(context.Background(), "ябълка!?", "круша."); err != nil {
t.Fatalf("generateAudioBgBg() unexpected error: %v", err)
}
@@ -916,7 +916,7 @@ func TestGenerateAudioUsesConfiguredAudioFormatWhenOpenAIConfigIsSetOnly(t *test
p := NewProcessor(flags)
wordDir := p.findOrCreateWordDirectory("ябълка!?")
- if err := p.generateAudioWithVoiceAndFilenameInDir("ябълка!?", "alloy", "audio", wordDir); err != nil {
+ if err := p.generateAudioWithVoiceAndFilenameInDir(context.Background(), "ябълка!?", "alloy", "audio", wordDir); err != nil {
t.Fatalf("generateAudioWithVoiceAndFilenameInDir() unexpected error: %v", err)
}
@@ -992,7 +992,7 @@ func TestGenerateAudioUsesConfiguredOpenAIVoiceFromConfig(t *testing.T) {
flags.AudioFormat = "mp3"
p := NewProcessor(flags)
- if err := p.generateAudio("ябълка"); err != nil {
+ if err := p.generateAudio(context.Background(), "ябълка"); err != nil {
t.Fatalf("generateAudio() unexpected error: %v", err)
}
@@ -1069,7 +1069,7 @@ func TestGenerateAudioOmitsOpenAIInstructionsForUnsupportedModel(t *testing.T) {
flags.OpenAIModel = "tts-1"
p := NewProcessor(flags)
- if err := p.generateAudio("ябълка!?"); err != nil {
+ if err := p.generateAudio(context.Background(), "ябълка!?"); err != nil {
t.Fatalf("generateAudio() unexpected error: %v", err)
}
@@ -1232,7 +1232,7 @@ func TestDownloadImagesWithTranslationUsesNanoBananaConfigAndSavesPrompt(t *test
flags.ImageAPISpecified = true
p := NewProcessor(flags)
- if err := p.downloadImagesWithTranslation("ябълка", "apple"); err != nil {
+ if err := p.downloadImagesWithTranslation(context.Background(), "ябълка", "apple"); err != nil {
t.Fatalf("downloadImagesWithTranslation() unexpected error: %v", err)
}
@@ -1287,7 +1287,7 @@ func TestDownloadImagesWithTranslationPersistsPromptWhenDownloadFails(t *testing
flags.ImageAPISpecified = true
p := NewProcessor(flags)
- err := p.downloadImagesWithTranslation("ябълка", "apple")
+ err := p.downloadImagesWithTranslation(context.Background(), "ябълка", "apple")
if err == nil {
t.Fatal("downloadImagesWithTranslation() expected error from failed download")
}
@@ -1337,7 +1337,7 @@ func TestDownloadImagesWithTranslationUsesConfiguredNanoBananaWhenImageAPINotSpe
flags.ImageAPISpecified = false
p := NewProcessor(flags)
- if err := p.downloadImagesWithTranslation("ябълка", "apple"); err != nil {
+ if err := p.downloadImagesWithTranslation(context.Background(), "ябълка", "apple"); err != nil {
t.Fatalf("downloadImagesWithTranslation() unexpected error: %v", err)
}