package config import "testing" func validConfig() Config { return Config{ Server: ServerConfig{Port: 8080}, MCP: MCPConfig{Path: "/mcp"}, Auth: AuthConfig{ Keys: []APIKey{{ID: "test", Value: "secret"}}, }, Database: DatabaseConfig{URL: "postgres://example"}, AI: AIConfig{ Provider: "litellm", Embeddings: AIEmbeddingConfig{ Dimensions: 1536, }, LiteLLM: LiteLLMConfig{ BaseURL: "http://localhost:4000/v1", APIKey: "key", }, Ollama: OllamaConfig{ BaseURL: "http://localhost:11434/v1", APIKey: "ollama", }, OpenRouter: OpenRouterAIConfig{ BaseURL: "https://openrouter.ai/api/v1", APIKey: "key", }, }, Search: SearchConfig{DefaultLimit: 10, MaxLimit: 50}, Logging: LoggingConfig{Level: "info"}, } } func TestValidateAcceptsSupportedProviders(t *testing.T) { cfg := validConfig() if err := cfg.Validate(); err != nil { t.Fatalf("Validate litellm error = %v", err) } cfg.AI.Provider = "ollama" if err := cfg.Validate(); err != nil { t.Fatalf("Validate ollama error = %v", err) } cfg.AI.Provider = "openrouter" if err := cfg.Validate(); err != nil { t.Fatalf("Validate openrouter error = %v", err) } } func TestValidateRejectsInvalidProvider(t *testing.T) { cfg := validConfig() cfg.AI.Provider = "unknown" if err := cfg.Validate(); err == nil { t.Fatal("Validate() error = nil, want error for unsupported provider") } } func TestValidateRejectsEmptyAuthKeyValue(t *testing.T) { cfg := validConfig() cfg.Auth.Keys[0].Value = "" if err := cfg.Validate(); err == nil { t.Fatal("Validate() error = nil, want error for empty auth key value") } } func TestValidateAcceptsOAuthClients(t *testing.T) { cfg := validConfig() cfg.Auth = AuthConfig{ OAuth: OAuthConfig{ Clients: []OAuthClient{{ ID: "oauth-client", ClientID: "client-id", ClientSecret: "client-secret", }}, }, } if err := cfg.Validate(); err != nil { t.Fatalf("Validate() error = %v", err) } } func TestValidateAcceptsBothAuthMethods(t *testing.T) { cfg := validConfig() cfg.Auth = AuthConfig{ Keys: []APIKey{{ID: "key1", Value: "secret"}}, OAuth: OAuthConfig{ Clients: []OAuthClient{{ ID: "oauth-client", ClientID: "client-id", ClientSecret: "client-secret", }}, }, } if err := cfg.Validate(); err != nil { t.Fatalf("Validate() error = %v", err) } } func TestValidateRejectsEmptyAuth(t *testing.T) { cfg := validConfig() cfg.Auth = AuthConfig{} if err := cfg.Validate(); err == nil { t.Fatal("Validate() error = nil, want error when neither auth.keys nor auth.oauth.clients is configured") } } func TestValidateRejectsInvalidMetadataRetryConfig(t *testing.T) { cfg := validConfig() cfg.MetadataRetry.Enabled = true cfg.MetadataRetry.MaxPerRun = 0 if err := cfg.Validate(); err == nil { t.Fatal("Validate() error = nil, want error for invalid metadata retry config") } }