package server import ( "context" "net/http" "net/http/httptest" "os" "path/filepath" "strings" "testing" "time" "chat-agent-system/internal/config" "chat-agent-system/internal/workspace" ) func TestServeAdminWorkspacesListsRegistry(t *testing.T) { dir := t.TempDir() id := "ws-admin" if err := os.MkdirAll(filepath.Join(dir, "workspaces", id), 0o755); err != nil { t.Fatal(err) } s := &Server{cfg: &config.Config{DataDir: dir}} req := httptest.NewRequest(http.MethodGet, "/api/v1/admin/workspaces", nil) rec := httptest.NewRecorder() s.serveAdminWorkspaces(rec, req) if rec.Code != http.StatusOK || !strings.Contains(rec.Body.String(), id) { t.Fatalf("status %d body %s", rec.Code, rec.Body.String()) } } func TestServeAdminWorkspaceCleanupHonorsGate(t *testing.T) { dir := t.TempDir() id := "ws-clean" ws := filepath.Join(dir, "workspaces", id) if err := os.MkdirAll(ws, 0o755); err != nil { t.Fatal(err) } reg := workspace.NewFileRegistry(dir) if err := reg.Upsert(workspace.Record{ID: id, CreatedAt: time.Now()}); err != nil { t.Fatal(err) } s := &Server{cfg: &config.Config{DataDir: dir}, wsReg: reg} req := httptest.NewRequest(http.MethodPost, "/api/v1/admin/workspaces/"+id+"/cleanup", nil) req.SetPathValue("id", id) rec := httptest.NewRecorder() s.serveAdminWorkspaceCleanup(rec, req.WithContext(context.Background())) if rec.Code != http.StatusConflict { t.Fatalf("status %d body %s", rec.Code, rec.Body.String()) } if _, err := os.Stat(ws); err != nil { t.Fatal(err) } }