package providers import ( "testing" "github.com/sipeed/picoclaw/pkg/auth" "github.com/sipeed/picoclaw/pkg/config" ) func TestCreateProviderReturnsHTTPProviderForOpenRouter(t *testing.T) { cfg := config.DefaultConfig() cfg.Agents.Defaults.ModelName = "test-openrouter" modelCfg := &config.ModelConfig{ ModelName: "test-openrouter", Model: "openrouter/auto", APIBase: "https://openrouter.ai/api/v1", } modelCfg.SetAPIKey("sk-or-test") cfg.ModelList = []*config.ModelConfig{modelCfg} provider, _, err := CreateProvider(cfg) if err != nil { t.Fatalf("CreateProvider() error = %v", err) } if _, ok := provider.(*HTTPProvider); !ok { t.Fatalf("provider type = %T, want *HTTPProvider", provider) } } func TestCreateProviderReturnsCodexCliProviderForCodexCode(t *testing.T) { cfg := config.DefaultConfig() cfg.Agents.Defaults.ModelName = "test-codex" cfg.ModelList = []*config.ModelConfig{ { ModelName: "test-codex", Model: "codex-cli/codex-model", Workspace: "/tmp/workspace", }, } provider, _, err := CreateProvider(cfg) if err != nil { t.Fatalf("CreateProvider() error = %v", err) } if _, ok := provider.(*CodexCliProvider); !ok { t.Fatalf("provider type = %T, want *CodexCliProvider", provider) } } func TestCreateProviderReturnsClaudeCliProviderForClaudeCli(t *testing.T) { cfg := config.DefaultConfig() cfg.Agents.Defaults.ModelName = "test-claude-cli" cfg.ModelList = []*config.ModelConfig{ { ModelName: "test-claude-cli", Model: "claude-cli/claude-sonnet", Workspace: "/tmp/workspace", }, } provider, _, err := CreateProvider(cfg) if err != nil { t.Fatalf("CreateProvider() error = %v", err) } if _, ok := provider.(*ClaudeCliProvider); !ok { t.Fatalf("provider type = %T, want *ClaudeCliProvider", provider) } } func TestCreateProviderReturnsClaudeProviderForAnthropicOAuth(t *testing.T) { originalGetCredential := getCredential t.Cleanup(func() { getCredential = originalGetCredential }) getCredential = func(provider string) (*auth.AuthCredential, error) { if provider != "anthropic" { t.Fatalf("provider = %q, want anthropic", provider) } return &auth.AuthCredential{ AccessToken: "anthropic-token", }, nil } cfg := config.DefaultConfig() cfg.Agents.Defaults.ModelName = "test-claude-oauth" cfg.ModelList = []*config.ModelConfig{ { ModelName: "test-claude-oauth", Model: "anthropic/claude-sonnet-4.6", AuthMethod: "oauth", }, } provider, _, err := CreateProvider(cfg) if err != nil { t.Fatalf("CreateProvider() error = %v", err) } if _, ok := provider.(*ClaudeProvider); !ok { t.Fatalf("provider type = %T, want *ClaudeProvider", provider) } // TODO: Test custom APIBase when createClaudeAuthProvider supports it } func TestCreateProviderReturnsCodexProviderForOpenAIOAuth(t *testing.T) { // TODO: This test requires openai protocol to support auth_method: "oauth" // which is not yet implemented in the new factory_provider.go t.Skip("OpenAI OAuth via model_list not yet implemented") }