package embedding import ( "context" "encoding/json" "net/http" "net/http/httptest" "testing" ) func TestIsConfigured(t *testing.T) { // 有密钥 → 已配置 if !NewClient(Config{APIKey: "k"}).IsConfigured() { t.Fatal("配置了密钥应视为已配置") } // 本地无鉴权 → 已配置 if !NewClient(Config{NoAuth: true}).IsConfigured() { t.Fatal("NoAuth 应视为已配置") } // 都没有 → 未配置(保持优雅降级到关键词检索) if NewClient(Config{}).IsConfigured() { t.Fatal("既无密钥也非 NoAuth 应视为未配置") } } // 本地无鉴权 embedding 端点:不发送 Authorization 头,且能取回向量。 func TestGetEmbedding_LocalNoAuth(t *testing.T) { var sawAuthHeader bool srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _, sawAuthHeader = r.Header["Authorization"] w.Header().Set("Content-Type", "application/json") _ = json.NewEncoder(w).Encode(map[string]any{ "data": []map[string]any{{"embedding": []float32{0.1, 0.2, 0.3}, "index": 0}}, "usage": map[string]any{"total_tokens": 3}, }) })) defer srv.Close() c := NewClient(Config{BaseURL: srv.URL, Model: "bge-local", Dimensions: 3, NoAuth: true}) vec, err := c.GetEmbedding(context.Background(), "政务文本") if err != nil { t.Fatalf("本地 embedding 取回失败: %v", err) } if len(vec) != 3 { t.Fatalf("向量维度不符: %d", len(vec)) } if sawAuthHeader { t.Fatal("本地无鉴权端点不应发送 Authorization 头") } } // 配置了密钥时应发送 Authorization 头。 func TestGetEmbedding_SendsAuthWhenKeySet(t *testing.T) { var gotAuth string srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { gotAuth = r.Header.Get("Authorization") w.Header().Set("Content-Type", "application/json") _ = json.NewEncoder(w).Encode(map[string]any{ "data": []map[string]any{{"embedding": []float32{1}, "index": 0}}, }) })) defer srv.Close() c := NewClient(Config{APIKey: "sk-test", BaseURL: srv.URL, Model: "m", Dimensions: 1}) if _, err := c.GetEmbedding(context.Background(), "x"); err != nil { t.Fatalf("取回失败: %v", err) } if gotAuth != "Bearer sk-test" { t.Fatalf("应发送 Bearer 密钥头,实际: %q", gotAuth) } } // 既无密钥也非 NoAuth 时应直接报错(不发起请求)。 func TestGetEmbedding_NoKeyNoAuthErrors(t *testing.T) { c := NewClient(Config{BaseURL: "http://localhost:9", Model: "m", Dimensions: 1}) if _, err := c.GetEmbedding(context.Background(), "x"); err == nil { t.Fatal("无密钥且非 NoAuth 应返回错误") } }