summaryrefslogtreecommitdiff
path: root/internal/api/elaborate_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/api/elaborate_test.go')
-rw-r--r--internal/api/elaborate_test.go71
1 files changed, 71 insertions, 0 deletions
diff --git a/internal/api/elaborate_test.go b/internal/api/elaborate_test.go
index b33ca11..114e75e 100644
--- a/internal/api/elaborate_test.go
+++ b/internal/api/elaborate_test.go
@@ -189,3 +189,74 @@ func TestElaborateTask_InvalidJSONFromClaude(t *testing.T) {
t.Error("expected error message in response")
}
}
+
+func createFakeClaudeCapturingArgs(t *testing.T, output string, exitCode int, argsFile string) string {
+ t.Helper()
+ dir := t.TempDir()
+ outputFile := filepath.Join(dir, "output.json")
+ if err := os.WriteFile(outputFile, []byte(output), 0600); err != nil {
+ t.Fatal(err)
+ }
+ script := filepath.Join(dir, "claude")
+ // Use printf to handle arguments safely
+ content := fmt.Sprintf("#!/bin/sh\nprintf \"%%s\\n\" \"$@\" > %q\ncat %q\nexit %d\n", argsFile, outputFile, exitCode)
+ if err := os.WriteFile(script, []byte(content), 0755); err != nil {
+ t.Fatal(err)
+ }
+ return script
+}
+
+func TestElaborateTask_WithProjectContext(t *testing.T) {
+ srv, _ := testServer(t)
+
+ // Create a temporary workspace with CLAUDE.md and SESSION_STATE.md
+ workDir := t.TempDir()
+ claudeContent := "Claude context info"
+ sessionContent := "Session state info"
+ if err := os.WriteFile(filepath.Join(workDir, "CLAUDE.md"), []byte(claudeContent), 0600); err != nil {
+ t.Fatal(err)
+ }
+ if err := os.WriteFile(filepath.Join(workDir, "SESSION_STATE.md"), []byte(sessionContent), 0600); err != nil {
+ t.Fatal(err)
+ }
+
+ // Capture arguments passed to claude
+ argsFile := filepath.Join(t.TempDir(), "args.txt")
+
+ task := elaboratedTask{
+ Name: "Task with context",
+ Agent: elaboratedAgent{
+ Instructions: "Instructions",
+ },
+ }
+ taskJSON, _ := json.Marshal(task)
+ wrapper := map[string]string{"result": string(taskJSON)}
+ wrapperJSON, _ := json.Marshal(wrapper)
+
+ // Modified createFakeClaude to capture arguments
+ srv.elaborateCmdPath = createFakeClaudeCapturingArgs(t, string(wrapperJSON), 0, argsFile)
+
+ body := fmt.Sprintf(`{"prompt":"do something", "project_dir":"%s"}`, workDir)
+ req := httptest.NewRequest("POST", "/api/tasks/elaborate", bytes.NewBufferString(body))
+ req.Header.Set("Content-Type", "application/json")
+ w := httptest.NewRecorder()
+
+ srv.Handler().ServeHTTP(w, req)
+
+ if w.Code != http.StatusOK {
+ t.Fatalf("status: want 200, got %d; body: %s", w.Code, w.Body.String())
+ }
+
+ // Check if captured arguments contain the context
+ capturedArgs, err := os.ReadFile(argsFile)
+ if err != nil {
+ t.Fatal(err)
+ }
+ argsStr := string(capturedArgs)
+ if !strings.Contains(argsStr, claudeContent) {
+ t.Errorf("expected arguments to contain CLAUDE.md content, got %s", argsStr)
+ }
+ if !strings.Contains(argsStr, sessionContent) {
+ t.Errorf("expected arguments to contain SESSION_STATE.md content, got %s", argsStr)
+ }
+}