98 lines
2.6 KiB
Go
98 lines
2.6 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestLoad_DefaultConfigWithEnvOverrides(t *testing.T) {
|
|
t.Setenv(envAPIKey, "test-key")
|
|
t.Setenv(envAPIURL, "https://example.com")
|
|
|
|
cfg, err := Load("")
|
|
if err != nil {
|
|
t.Fatalf("Load returned error: %v", err)
|
|
}
|
|
|
|
if cfg.API.URL != "https://example.com" {
|
|
t.Fatalf("expected API URL override, got %q", cfg.API.URL)
|
|
}
|
|
|
|
if cfg.API.Key != "test-key" {
|
|
t.Fatalf("expected API key override, got %q", cfg.API.Key)
|
|
}
|
|
|
|
if cfg.Model.Name != "gpt-4o-mini" {
|
|
t.Fatalf("expected default model name, got %q", cfg.Model.Name)
|
|
}
|
|
}
|
|
|
|
func TestLoad_FromFile(t *testing.T) {
|
|
t.Setenv(envAPIKey, "")
|
|
t.Setenv(envAPIURL, "")
|
|
|
|
dir := t.TempDir()
|
|
configPath := filepath.Join(dir, "config.yaml")
|
|
content := []byte("api:\n url: https://api.test/v1\n key: test-token\nmodel:\n name: gpt-test\n temperature: 0.5\n stream: false\n")
|
|
|
|
if err := os.WriteFile(configPath, content, 0o600); err != nil {
|
|
t.Fatalf("failed to write config file: %v", err)
|
|
}
|
|
|
|
cfg, err := Load(configPath)
|
|
if err != nil {
|
|
t.Fatalf("Load returned error: %v", err)
|
|
}
|
|
|
|
if cfg.API.URL != "https://api.test/v1" {
|
|
t.Errorf("expected API URL %q, got %q", "https://api.test/v1", cfg.API.URL)
|
|
}
|
|
if cfg.API.Key != "test-token" {
|
|
t.Errorf("expected API key %q, got %q", "test-token", cfg.API.Key)
|
|
}
|
|
if cfg.Model.Name != "gpt-test" {
|
|
t.Errorf("expected model name %q, got %q", "gpt-test", cfg.Model.Name)
|
|
}
|
|
if cfg.Model.Temperature != 0.5 {
|
|
t.Errorf("expected temperature 0.5, got %f", cfg.Model.Temperature)
|
|
}
|
|
if cfg.Model.Stream != false {
|
|
t.Errorf("expected stream false, got %t", cfg.Model.Stream)
|
|
}
|
|
}
|
|
|
|
func TestLoad_InvalidTemperature(t *testing.T) {
|
|
dir := t.TempDir()
|
|
configPath := filepath.Join(dir, "config.yaml")
|
|
content := []byte("api:\n url: https://api.test/v1\n key: test-token\nmodel:\n name: gpt-test\n temperature: 5\n")
|
|
|
|
if err := os.WriteFile(configPath, content, 0o600); err != nil {
|
|
t.Fatalf("failed to write config file: %v", err)
|
|
}
|
|
|
|
_, err := Load(configPath)
|
|
if err == nil {
|
|
t.Fatal("expected error for invalid temperature, got none")
|
|
}
|
|
}
|
|
|
|
func TestLoad_MissingAPIKey(t *testing.T) {
|
|
// Ensure no environment fallback is present.
|
|
t.Setenv(envAPIKey, "")
|
|
t.Setenv(envAPIURL, "")
|
|
|
|
dir := t.TempDir()
|
|
configPath := filepath.Join(dir, "config.yaml")
|
|
content := []byte("api:\n url: https://api.test/v1\nmodel:\n name: gpt-test\n temperature: 0.5\n")
|
|
|
|
if err := os.WriteFile(configPath, content, 0o600); err != nil {
|
|
t.Fatalf("failed to write config file: %v", err)
|
|
}
|
|
|
|
_, err := Load(configPath)
|
|
if err == nil {
|
|
t.Fatal("expected error for missing API key, got none")
|
|
}
|
|
}
|