package server import ( "net/http" "net/http/httptest" "testing" "chat-agent-system/internal/bizdev" "chat-agent-system/internal/config" ) func TestGateA_LineageAndRunsRequireProjectAccess(t *testing.T) { cfg := &config.Config{DataDir: t.TempDir(), AgentBackend: "stub", AllowInMemory: true, Env: "main", ContextDbHost: "127.0.0.1"} srv := NewServer(cfg, bizdev.MustNewService(t, &config.Config{DataDir: t.TempDir(), AgentBackend: "stub"})) srv.cfg = cfg cases := []struct { method string path string }{ {http.MethodGet, "/api/v1/projects/999/lineage?doc_id=doc_x"}, {http.MethodGet, "/api/v1/projects/999/workflows/main/runs"}, } for _, tc := range cases { req := httptest.NewRequest(tc.method, tc.path, nil) rec := httptest.NewRecorder() srv.Routes().ServeHTTP(rec, req) if rec.Code != http.StatusUnauthorized { t.Fatalf("%s %s expected 401 without auth, got %d", tc.method, tc.path, rec.Code) } } } func TestGateA_CreateProjectRequiresPermission(t *testing.T) { cfg := &config.Config{DataDir: t.TempDir(), AgentBackend: "stub", AllowInMemory: true, Env: "main", ContextDbHost: "127.0.0.1"} srv := NewServer(cfg, bizdev.MustNewService(t, &config.Config{DataDir: t.TempDir(), AgentBackend: "stub"})) srv.cfg = cfg req := httptest.NewRequest(http.MethodPost, "/api/v1/projects", nil) req.Header.Set("Authorization", "Bearer invalid") rec := httptest.NewRecorder() srv.Routes().ServeHTTP(rec, req) if rec.Code != http.StatusUnauthorized { t.Fatalf("expected 401, got %d", rec.Code) } }