summaryrefslogtreecommitdiff
path: root/internal/translation
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-04-01 13:07:41 +0300
committerPaul Buetow <paul@buetow.org>2026-04-01 13:07:41 +0300
commit5b88a045b29970a3cc057326b85eae58ab41fe02 (patch)
tree2d70a826591d58b1b3349f95328b77409cd0267c /internal/translation
parentb006582e4c7323821eb836080a9bc9ec24243a47 (diff)
zr: restore OpenAI default translation provider
Diffstat (limited to 'internal/translation')
-rw-r--r--internal/translation/translator.go12
-rw-r--r--internal/translation/translator_test.go65
2 files changed, 64 insertions, 13 deletions
diff --git a/internal/translation/translator.go b/internal/translation/translator.go
index adcf6ae..1a3d3b2 100644
--- a/internal/translation/translator.go
+++ b/internal/translation/translator.go
@@ -36,10 +36,10 @@ type Config struct {
GeminiModel string
}
-// DefaultConfig returns a translator configuration with Gemini as the default backend.
+// DefaultConfig returns a translator configuration with OpenAI as the default backend.
func DefaultConfig() *Config {
return &Config{
- Provider: ProviderGemini,
+ Provider: ProviderOpenAI,
OpenAIModel: openai.GPT4oMini,
GeminiModel: defaultGeminiModel,
}
@@ -244,7 +244,7 @@ func normalizeConfig(config *Config) *Config {
normalized.Provider = normalizeProvider(normalized.Provider)
if normalized.Provider == "" {
- normalized.Provider = ProviderGemini
+ normalized.Provider = ProviderOpenAI
}
if normalized.OpenAIModel == "" {
normalized.OpenAIModel = openai.GPT4oMini
@@ -258,10 +258,10 @@ func normalizeConfig(config *Config) *Config {
func normalizeProvider(provider Provider) Provider {
switch strings.ToLower(strings.TrimSpace(string(provider))) {
- case "", string(ProviderGemini):
- return ProviderGemini
- case string(ProviderOpenAI):
+ case "", string(ProviderOpenAI):
return ProviderOpenAI
+ case string(ProviderGemini):
+ return ProviderGemini
default:
return Provider(strings.ToLower(strings.TrimSpace(string(provider))))
}
diff --git a/internal/translation/translator_test.go b/internal/translation/translator_test.go
index 1011bfa..d506a1e 100644
--- a/internal/translation/translator_test.go
+++ b/internal/translation/translator_test.go
@@ -7,23 +7,48 @@ import (
"testing"
)
-func TestNewTranslator_DefaultsToGemini(t *testing.T) {
+func TestNewTranslator_DefaultsToOpenAI(t *testing.T) {
translator := NewTranslator(nil)
if translator == nil {
t.Fatal("NewTranslator returned nil")
}
- if translator.provider != ProviderGemini {
- t.Fatalf("Expected default provider %q, got %q", ProviderGemini, translator.provider)
- }
- if translator.geminiModel != defaultGeminiModel {
- t.Fatalf("Expected Gemini model %q, got %q", defaultGeminiModel, translator.geminiModel)
+ if translator.provider != ProviderOpenAI {
+ t.Fatalf("Expected default provider %q, got %q", ProviderOpenAI, translator.provider)
}
if translator.openAIModel != "gpt-4o-mini" {
t.Fatalf("Expected OpenAI model gpt-4o-mini, got %q", translator.openAIModel)
}
}
+func TestNewTranslator_ExplicitGeminiProvider(t *testing.T) {
+ translator := NewTranslator(&Config{
+ Provider: ProviderGemini,
+ GoogleAPIKey: "test-google-key",
+ })
+
+ if translator == nil {
+ t.Fatal("NewTranslator returned nil")
+ }
+ if translator.provider != ProviderGemini {
+ t.Fatalf("Expected provider %q, got %q", ProviderGemini, translator.provider)
+ }
+ if translator.geminiClient == nil {
+ t.Fatal("Gemini client not initialized")
+ }
+}
+
+func TestNewTranslator_EmptyProviderDefaultsToOpenAI(t *testing.T) {
+ translator := NewTranslator(&Config{})
+
+ if translator == nil {
+ t.Fatal("NewTranslator returned nil")
+ }
+ if translator.provider != ProviderOpenAI {
+ t.Fatalf("Expected empty provider to default to %q, got %q", ProviderOpenAI, translator.provider)
+ }
+}
+
func TestNewTranslator_OpenAIProvider(t *testing.T) {
translator := NewTranslator(&Config{
Provider: ProviderOpenAI,
@@ -41,7 +66,19 @@ func TestNewTranslator_OpenAIProvider(t *testing.T) {
}
}
-func TestTranslateWord_NoGoogleAPIKey(t *testing.T) {
+func TestTranslateWord_DefaultProviderRequiresOpenAIKey(t *testing.T) {
+ translator := NewTranslator(&Config{})
+
+ _, err := translator.TranslateWord("ябълка")
+ if err == nil {
+ t.Fatal("Expected error for missing OpenAI API key")
+ }
+ if err.Error() != "OpenAI API key not found" {
+ t.Fatalf("Expected 'OpenAI API key not found' error, got: %v", err)
+ }
+}
+
+func TestTranslateWord_ExplicitGeminiRequiresGoogleAPIKey(t *testing.T) {
translator := NewTranslator(&Config{Provider: ProviderGemini})
_, err := translator.TranslateWord("ябълка")
@@ -87,6 +124,20 @@ func TestTranslateEnglishToBulgarian_NoOpenAIKey(t *testing.T) {
}
}
+func TestTranslateWithUnknownProvider(t *testing.T) {
+ translator := NewTranslator(&Config{
+ Provider: Provider("legacy"),
+ })
+
+ _, err := translator.TranslateWord("ябълка")
+ if err == nil {
+ t.Fatal("Expected error for unknown provider")
+ }
+ if err.Error() != "unknown translation provider: legacy" {
+ t.Fatalf("Expected unknown provider error, got: %v", err)
+ }
+}
+
func TestTranslateEnglishToBulgarian_IntegrationOpenAI(t *testing.T) {
apiKey := os.Getenv("OPENAI_API_KEY")
if apiKey == "" {