From 67b8544b222392d8a01847e3d34559c23fd0cd12 Mon Sep 17 00:00:00 2001 From: Claudomator Agent Date: Mon, 9 Mar 2026 04:59:39 +0000 Subject: api: make workspace root configurable instead of hardcoded /workspace - Add workspaceRoot field (default "/workspace") to Server struct - Add SetWorkspaceRoot method on Server - Update handleListWorkspaces to use s.workspaceRoot - Add WorkspaceRoot field to Config with default "/workspace" - Wire cfg.WorkspaceRoot into server in serve.go - Expose --workspace-root flag on the serve command - Add TestListWorkspaces_UsesConfiguredRoot integration test Co-Authored-By: Claude Sonnet 4.6 --- internal/api/server_test.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'internal/api/server_test.go') diff --git a/internal/api/server_test.go b/internal/api/server_test.go index 8484e02..765b813 100644 --- a/internal/api/server_test.go +++ b/internal/api/server_test.go @@ -99,6 +99,50 @@ func (m *mockRunner) Run(_ context.Context, _ *task.Task, _ *storage.Execution) return nil } +func TestListWorkspaces_UsesConfiguredRoot(t *testing.T) { + srv, _ := testServer(t) + + root := t.TempDir() + for _, name := range []string{"alpha", "beta", "gamma"} { + if err := os.Mkdir(filepath.Join(root, name), 0755); err != nil { + t.Fatal(err) + } + } + // Also create a file (should be excluded from results). + f, err := os.Create(filepath.Join(root, "notadir.txt")) + if err != nil { + t.Fatal(err) + } + f.Close() + + srv.SetWorkspaceRoot(root) + + req := httptest.NewRequest("GET", "/api/workspaces", nil) + w := httptest.NewRecorder() + srv.Handler().ServeHTTP(w, req) + + if w.Code != http.StatusOK { + t.Fatalf("status: want 200, got %d", w.Code) + } + var dirs []string + if err := json.NewDecoder(w.Body).Decode(&dirs); err != nil { + t.Fatalf("decode: %v", err) + } + want := map[string]bool{ + root + "/alpha": true, + root + "/beta": true, + root + "/gamma": true, + } + if len(dirs) != len(want) { + t.Fatalf("want %d dirs, got %d: %v", len(want), len(dirs), dirs) + } + for _, d := range dirs { + if !want[d] { + t.Errorf("unexpected dir in response: %s", d) + } + } +} + func TestHealthEndpoint(t *testing.T) { srv, _ := testServer(t) req := httptest.NewRequest("GET", "/api/health", nil) -- cgit v1.2.3