From 4727a188102d8166e4acabc4fd62863245e6cdce Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Wed, 1 Apr 2026 20:14:03 +0300 Subject: z8: preserve Nano Banana CLI precedence --- internal/processor/processor.go | 4 +-- internal/processor/processor_test.go | 49 ++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) (limited to 'internal/processor') diff --git a/internal/processor/processor.go b/internal/processor/processor.go index aac9733..d7025a6 100644 --- a/internal/processor/processor.go +++ b/internal/processor/processor.go @@ -606,10 +606,10 @@ func (p *Processor) newNanoBananaImageSearcher() (image.ImageSearcher, error) { TextModel: p.flags.NanoBananaTextModel, } - if p.flags.NanoBananaModel == image.DefaultNanoBananaModel && viper.IsSet("image.nanobanana_model") { + if !p.flags.NanoBananaModelSpecified && viper.IsSet("image.nanobanana_model") { nanoBananaConfig.Model = viper.GetString("image.nanobanana_model") } - if p.flags.NanoBananaTextModel == image.DefaultNanoBananaTextModel && viper.IsSet("image.nanobanana_text_model") { + if !p.flags.NanoBananaTextModelSpecified && viper.IsSet("image.nanobanana_text_model") { nanoBananaConfig.TextModel = viper.GetString("image.nanobanana_text_model") } diff --git a/internal/processor/processor_test.go b/internal/processor/processor_test.go index ef9e655..8ab13e7 100644 --- a/internal/processor/processor_test.go +++ b/internal/processor/processor_test.go @@ -397,6 +397,55 @@ func TestNewImageSearcherConfiguredNanoBananaRequiresGoogleAPIKey(t *testing.T) } } +func TestNewNanoBananaImageSearcherExplicitDefaultWinsOverConfig(t *testing.T) { + t.Setenv("OPENAI_API_KEY", "test-openai-key") + t.Setenv("GOOGLE_API_KEY", "test-google-key") + + originalConfig := viper.New() + *originalConfig = *viper.GetViper() + defer func() { + *viper.GetViper() = *originalConfig + }() + viper.Reset() + viper.Set("image.nanobanana_model", "config-image-model") + viper.Set("image.nanobanana_text_model", "config-text-model") + + originalConstructor := newNanoBananaImageClient + capturedConfig := new(image.NanoBananaConfig) + newNanoBananaImageClient = func(config *image.NanoBananaConfig) image.ImageSearcher { + *capturedConfig = *config + return &stubImageSearcher{} + } + t.Cleanup(func() { + newNanoBananaImageClient = originalConstructor + }) + + flags := cli.NewFlags() + flags.OutputDir = t.TempDir() + flags.ImageAPI = "nanobanana" + flags.ImageAPISpecified = true + flags.NanoBananaModel = image.DefaultNanoBananaModel + flags.NanoBananaModelSpecified = true + flags.NanoBananaTextModel = image.DefaultNanoBananaTextModel + flags.NanoBananaTextModelSpecified = true + + p := NewProcessor(flags) + searcher, err := p.newNanoBananaImageSearcher() + if err != nil { + t.Fatalf("newNanoBananaImageSearcher() unexpected error: %v", err) + } + if searcher == nil { + t.Fatal("expected searcher") + } + + if capturedConfig.Model != image.DefaultNanoBananaModel { + t.Fatalf("NanoBanana Model = %q, want explicit CLI default %q", capturedConfig.Model, image.DefaultNanoBananaModel) + } + if capturedConfig.TextModel != image.DefaultNanoBananaTextModel { + t.Fatalf("NanoBanana TextModel = %q, want explicit CLI default %q", capturedConfig.TextModel, image.DefaultNanoBananaTextModel) + } +} + func TestProcessSingleWord_InvalidWord(t *testing.T) { flags := cli.NewFlags() flags.OutputDir = t.TempDir() -- cgit v1.2.3