package contentmodel import ( "context" "encoding/json" "net/http" "net/http/httptest" "os" "testing" "data-terminal-cloud/internal/audit" "data-terminal-cloud/internal/extraction" "data-terminal-cloud/internal/identity" "github.com/jackc/pgx/v5/pgxpool" ) func TestServiceTestsAndActivatesCompatibleModel(t *testing.T) { databaseURL := os.Getenv("TEST_DATABASE_URL") if databaseURL == "" { t.Skip("TEST_DATABASE_URL is not set") } server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { _ = json.NewEncoder(w).Encode(map[string]any{"choices": []any{map[string]any{"message": map[string]any{"content": `{"meaningful":false,"story_worthy":false,"decision_reason":"连通性测试内容不形成故事","summary":"","keywords":[],"open_topic":"","story_title":"","story_content":"","fact_content":"","confidence":0.99}`}}}}) })) defer server.Close() ctx := context.Background() pool, err := pgxpool.New(ctx, databaseURL) if err != nil { t.Fatal(err) } defer pool.Close() registry, err := NewRegistry(pool, "1f1e1d1c1b1a191817161514131211100f0e0d0c0b0a09080706050403020100", extraction.DeterministicGenerator{}) if err != nil { t.Fatal(err) } service, err := NewService(registry, audit.NewRepository()) if err != nil { t.Fatal(err) } principal := identity.Principal{Issuer: "http://localhost:58180/realms/voice-local", Subject: "00000000-0000-0000-0000-000000000101"} created, err := service.Create(ctx, principal, CreateInput{ TenantID: "10000000-0000-0000-0000-000000000010", DisplayName: "集成测试模型", Provider: "openai_compatible", BaseURL: server.URL + "/v1", ModelID: "test-model", APIKey: "integration-key", Temperature: 0.1, MaxTokens: 512, }, "content-model-integration-create") if err != nil { t.Fatal(err) } defer func() { _, _ = pool.Exec(ctx, `DELETE FROM audit_event WHERE resource_id=$1::uuid`, created.ID) _, _ = pool.Exec(ctx, `DELETE FROM content_model_config WHERE public_id=$1::uuid`, created.ID) }() tested, err := service.Test(ctx, principal, created.TenantID, created.ID, "content-model-integration-test") if err != nil { t.Fatal(err) } if tested.TestStatus != "passed" || tested.Version != created.Version+1 { t.Fatalf("tested model=%+v", tested) } activated, err := service.Activate(ctx, principal, created.TenantID, created.ID, "content-model-integration-activate", tested.Version) if err != nil { t.Fatal(err) } if activated.Status != "active" || activated.Version != tested.Version+1 { t.Fatalf("activated model=%+v", activated) } }