diff options
| author | Paul Buetow <paul@buetow.org> | 2026-04-02 21:59:36 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-04-02 21:59:36 +0300 |
| commit | 74383d0e31fee5aebec002971ebd2cbddad32ac7 (patch) | |
| tree | 06663e2fa2d515b1ee1e26840417f5d193a71430 /internal/image/nanobanana_test.go | |
| parent | d94fdaf92d7c66c012e819c73632be16f346b66f (diff) | |
task 009/00i: remove internal translation from image clients; consolidate provider normalization
- task 009: remove translateBulgarianToEnglish from OpenAIClient and
NanoBananaClient. Image clients no longer make internal translation API calls;
callers must supply SearchOptions.Translation (processor and GUI already do).
When translation is absent, opts.Query (the Bulgarian word) is used as
fallback subject so image generation still proceeds. Update tests to pass
translation via SearchOptions rather than relying on the removed fallback.
- task 00i: consolidate duplicate ProviderGemini/ProviderOpenAI constants and
normalizeProvider() functions from internal/translation and internal/phonetic
into a shared config.NormalizeProvider(string) string in
internal/config/provider.go. Both packages now delegate to the shared
function so the normalization rule (lowercase, trim, default "gemini") has
one authoritative home.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'internal/image/nanobanana_test.go')
| -rw-r--r-- | internal/image/nanobanana_test.go | 49 |
1 files changed, 19 insertions, 30 deletions
diff --git a/internal/image/nanobanana_test.go b/internal/image/nanobanana_test.go index 6d34b83..88cc43c 100644 --- a/internal/image/nanobanana_test.go +++ b/internal/image/nanobanana_test.go @@ -114,6 +114,9 @@ func TestNanoBananaClient_Search_CustomPromptSkipsTextGeneration(t *testing.T) { } } +// TestNanoBananaClient_Search_GeneratedPromptFlow verifies the full scene-generation +// prompt flow when the caller provides a pre-translated English word via +// SearchOptions.Translation (translation is now the caller's responsibility). func TestNanoBananaClient_Search_GeneratedPromptFlow(t *testing.T) { originalText := nanoBananaGenerateText originalImage := nanoBananaGenerateImage @@ -126,23 +129,13 @@ func TestNanoBananaClient_Search_GeneratedPromptFlow(t *testing.T) { ArtisticStyles = []string{"Photorealism"} - var translationCalls int var sceneCalls int var gotPrompt string var callbackPrompt string + // Only scene generation is expected; internal translation has been removed. nanoBananaGenerateText = func(_ context.Context, _ *NanoBananaClient, _, systemPrompt, userPrompt string, temperature float32, maxOutputTokens int32) (string, error) { - switch { - case strings.Contains(systemPrompt, "Bulgarian language expert"): - translationCalls++ - if temperature != 0.3 || maxOutputTokens != 50 { - t.Fatalf("translation params = %v/%d, want 0.3/50", temperature, maxOutputTokens) - } - if !strings.Contains(userPrompt, "ябълка") { - t.Fatalf("translation prompt = %q, want Bulgarian query", userPrompt) - } - return "apple", nil - case strings.Contains(systemPrompt, "educational flashcards for language learning"): + if strings.Contains(systemPrompt, "educational flashcards for language learning") { sceneCalls++ if temperature != 0.7 || maxOutputTokens != 100 { t.Fatalf("scene params = %v/%d, want 0.7/100", temperature, maxOutputTokens) @@ -151,10 +144,9 @@ func TestNanoBananaClient_Search_GeneratedPromptFlow(t *testing.T) { t.Fatalf("scene prompt = %q, want English translation", userPrompt) } return "A bright apple sits centered on a wooden table.", nil - default: - t.Fatalf("unexpected system prompt: %q", systemPrompt) - return "", nil } + t.Fatalf("unexpected system prompt: %q", systemPrompt) + return "", nil } nanoBananaGenerateImage = func(_ context.Context, _ *NanoBananaClient, prompt string) ([]byte, string, error) { @@ -169,13 +161,13 @@ func TestNanoBananaClient_Search_GeneratedPromptFlow(t *testing.T) { callbackPrompt = prompt }) - results, err := client.Search(context.Background(), DefaultSearchOptions("ябълка")) + results, err := client.Search(context.Background(), &SearchOptions{ + Query: "ябълка", + Translation: "apple", // caller provides the English translation + }) if err != nil { t.Fatalf("Search() unexpected error: %v", err) } - if translationCalls != 1 { - t.Fatalf("translationCalls = %d, want 1", translationCalls) - } if sceneCalls != 1 { t.Fatalf("sceneCalls = %d, want 1", sceneCalls) } @@ -338,22 +330,16 @@ func TestNanoBananaClient_Search_ImageGenerationError(t *testing.T) { ArtisticStyles = []string{"Photorealism"} + // Only scene generation is expected; internal translation has been removed. nanoBananaGenerateText = func(_ context.Context, _ *NanoBananaClient, _, systemPrompt, userPrompt string, _ float32, _ int32) (string, error) { - switch { - case strings.Contains(systemPrompt, "Bulgarian language expert"): - if !strings.Contains(userPrompt, "ябълка") { - t.Fatalf("translation prompt = %q, want Bulgarian query", userPrompt) - } - return "apple", nil - case strings.Contains(systemPrompt, "educational flashcards for language learning"): + if strings.Contains(systemPrompt, "educational flashcards for language learning") { if !strings.Contains(userPrompt, "apple") { t.Fatalf("scene prompt = %q, want translated word", userPrompt) } return "A bright apple sits centered on a wooden table.", nil - default: - t.Fatalf("unexpected system prompt: %q", systemPrompt) - return "", nil } + t.Fatalf("unexpected system prompt: %q", systemPrompt) + return "", nil } nanoBananaGenerateImage = func(_ context.Context, _ *NanoBananaClient, _ string) ([]byte, string, error) { @@ -361,7 +347,10 @@ func TestNanoBananaClient_Search_ImageGenerationError(t *testing.T) { } client := NewNanoBananaClient(&NanoBananaConfig{APIKey: "test-key"}) - _, err := client.Search(context.Background(), DefaultSearchOptions("ябълка")) + _, err := client.Search(context.Background(), &SearchOptions{ + Query: "ябълка", + Translation: "apple", // caller provides the English translation + }) if err == nil { t.Fatal("expected image generation error") } |
