Files
jbergner a6bc71fb3a
Some checks failed
release-tag / Resolve release metadata (push) Successful in 30s
release-tag / Build knowledge (push) Failing after 4m51s
release-tag / Build control (push) Failing after 5m0s
release-tag / Build agent (push) Failing after 5m0s
release-tag / Build agent-data-init (push) Failing after 5m5s
release-tag / Build neuroforge-worker (push) Failing after 5m7s
release-tag / Build neuroforge (push) Failing after 5m9s
Init
2026-08-26 18:34:41 +02:00

87 lines
2.3 KiB
Go

package main
import (
"encoding/json"
"net/http"
"net/http/httptest"
"net/url"
"strings"
"testing"
)
func TestEmbeddedEngineeringGraphHasUsefulStructure(t *testing.T) {
g, err := loadEngineeringGraph()
if err != nil {
t.Fatal(err)
}
if len(g.Nodes) < 500 || len(g.Edges) < 1000 {
t.Fatalf("graph unexpectedly small: nodes=%d edges=%d", len(g.Nodes), len(g.Edges))
}
kinds := map[string]bool{}
for _, n := range g.Nodes {
kinds[n.Kind] = true
}
for _, want := range []string{"component", "package", "file", "function", "route", "service"} {
if !kinds[want] {
t.Fatalf("missing kind %q", want)
}
}
}
func TestEngineeringGraphEndpointHonorsNodeBudget(t *testing.T) {
s := &server{}
rr := httptest.NewRecorder()
req := httptest.NewRequest(http.MethodGet, "/api/graph/engineering?max_nodes=80", nil)
s.handleEngineeringGraph(rr, req)
if rr.Code != http.StatusOK {
t.Fatalf("status=%d body=%s", rr.Code, rr.Body.String())
}
var g graphPayload
if err := json.Unmarshal(rr.Body.Bytes(), &g); err != nil {
t.Fatal(err)
}
if len(g.Nodes) > 80 || len(g.Nodes) == 0 {
t.Fatalf("node budget violated: %d", len(g.Nodes))
}
}
func TestEngineeringImpactRequiresQueryAndReturnsBoundedBlastRadius(t *testing.T) {
s := &server{}
missing := httptest.NewRecorder()
s.handleEngineeringImpact(missing, httptest.NewRequest(http.MethodGet, "/api/graph/impact", nil))
if missing.Code != http.StatusBadRequest {
t.Fatalf("missing query status=%d", missing.Code)
}
g0, err := loadEngineeringGraph()
if err != nil {
t.Fatal(err)
}
var query string
for _, n := range g0.Nodes {
if n.Kind == "route" {
query = n.Label
break
}
}
if strings.TrimSpace(query) == "" {
t.Fatal("no route available for impact test")
}
rr := httptest.NewRecorder()
req := httptest.NewRequest(http.MethodGet, "/api/graph/impact?q="+url.QueryEscape(query)+"&depth=1&max_nodes=70", nil)
s.handleEngineeringImpact(rr, req)
if rr.Code != http.StatusOK {
t.Fatalf("status=%d body=%s", rr.Code, rr.Body.String())
}
var g graphPayload
if err := json.Unmarshal(rr.Body.Bytes(), &g); err != nil {
t.Fatal(err)
}
if len(g.Nodes) == 0 || len(g.Nodes) > 70 {
t.Fatalf("bad impact node count=%d", len(g.Nodes))
}
if g.Meta["risk"] == nil {
t.Fatalf("missing risk metadata: %+v", g.Meta)
}
}