返回 DeepSeek-Reasonix
configured_test.go
根目录 / internal / config / configured_test.go
1 package config
2
3 import (
4 "strings"
5 "testing"
6 )
7
8 // TestProviderConfigured verifies Configured tracks whether the provider can be
9 // selected. Providers with no api_key_env are explicit no-auth providers; if an
10 // env var is configured, it must resolve to a non-empty value.
11 func TestProviderConfigured(t *testing.T) {
12 cases := []struct {
13 name string
14 p ProviderEntry
15 want bool
16 }{
17 {"key set", ProviderEntry{APIKeyEnv: "REASONIX_TEST_KEY", resolvedAPIKey: "secret"}, true},
18 {"key env empty", ProviderEntry{APIKeyEnv: "REASONIX_TEST_EMPTY"}, false},
19 {"key env unset", ProviderEntry{APIKeyEnv: "REASONIX_TEST_MISSING"}, false},
20 {"loopback key env unset", ProviderEntry{BaseURL: "http://127.0.0.1:23333/v1", APIKeyEnv: "REASONIX_TEST_MISSING"}, true},
21 {"official endpoint without key env", ProviderEntry{BaseURL: "https://api.deepseek.com"}, false},
22 {"no api_key_env", ProviderEntry{}, true},
23 }
24 for _, c := range cases {
25 if got := c.p.Configured(); got != c.want {
26 t.Errorf("%s: Configured() = %v, want %v", c.name, got, c.want)
27 }
28 }
29 }
30
31 func TestValidateAllowsNoAuthProvider(t *testing.T) {
32 c := &Config{
33 DefaultModel: "local/model-a",
34 Providers: []ProviderEntry{{
35 Name: "local",
36 Kind: "openai",
37 BaseURL: "http://127.0.0.1:23333/v1",
38 Models: []string{"model-a", "model-b"},
39 Default: "model-a",
40 }},
41 }
42
43 if err := c.Validate("local/model-b"); err != nil {
44 t.Fatalf("Validate no-auth local provider: %v", err)
45 }
46
47 c.Providers[0].APIKeyEnv = "LOCAL_API_KEY"
48 if err := c.Validate("local/model-b"); err != nil {
49 t.Fatalf("Validate loopback local provider with missing key env: %v", err)
50 }
51 }
52
53 func TestValidateExplainsInvalidCredentialVariableName(t *testing.T) {
54 c := &Config{
55 Providers: []ProviderEntry{{
56 Name: "relay",
57 Kind: "openai",
58 BaseURL: "https://api.example.com/v1",
59 Model: "grok-4.5",
60 APIKeyEnv: "grok-4.5",
61 }},
62 }
63 err := c.Validate("relay")
64 if err == nil {
65 t.Fatal("Validate should reject an invalid api_key_env")
66 }
67 if got := err.Error(); !strings.Contains(got, `api_key_env "grok-4.5" is invalid`) || !strings.Contains(got, "not a model name") {
68 t.Fatalf("Validate error = %q, want actionable credential variable guidance", got)
69 }
70 }
71
71 lines GO