1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
package executor
import (
"testing"
"github.com/thepeterstone/claudomator/internal/task"
)
func TestClaudeRunner_BuildArgs_BasicTask(t *testing.T) {
r := &ClaudeRunner{}
tk := &task.Task{
Claude: task.ClaudeConfig{
Instructions: "fix the bug",
Model: "sonnet",
},
}
args := r.buildArgs(tk)
expected := []string{"-p", "fix the bug", "--output-format", "stream-json", "--model", "sonnet"}
if len(args) != len(expected) {
t.Fatalf("args length: want %d, got %d: %v", len(expected), len(args), args)
}
for i, want := range expected {
if args[i] != want {
t.Errorf("arg[%d]: want %q, got %q", i, want, args[i])
}
}
}
func TestClaudeRunner_BuildArgs_FullConfig(t *testing.T) {
r := &ClaudeRunner{}
tk := &task.Task{
Claude: task.ClaudeConfig{
Instructions: "implement feature",
Model: "opus",
MaxBudgetUSD: 5.0,
PermissionMode: "bypassPermissions",
SystemPromptAppend: "Follow TDD",
AllowedTools: []string{"Bash", "Edit"},
DisallowedTools: []string{"Write"},
ContextFiles: []string{"/src"},
AdditionalArgs: []string{"--verbose"},
},
}
args := r.buildArgs(tk)
// Check key args are present.
argMap := make(map[string]bool)
for _, a := range args {
argMap[a] = true
}
requiredArgs := []string{
"-p", "implement feature", "--output-format", "stream-json",
"--model", "opus", "--max-budget-usd", "5.00",
"--permission-mode", "bypassPermissions",
"--append-system-prompt", "Follow TDD",
"--allowedTools", "Bash", "Edit",
"--disallowedTools", "Write",
"--add-dir", "/src",
"--verbose",
}
for _, req := range requiredArgs {
if !argMap[req] {
t.Errorf("missing arg %q in %v", req, args)
}
}
}
func TestClaudeRunner_BinaryPath_Default(t *testing.T) {
r := &ClaudeRunner{}
if r.binaryPath() != "claude" {
t.Errorf("want 'claude', got %q", r.binaryPath())
}
}
func TestClaudeRunner_BinaryPath_Custom(t *testing.T) {
r := &ClaudeRunner{BinaryPath: "/usr/local/bin/claude"}
if r.binaryPath() != "/usr/local/bin/claude" {
t.Errorf("want custom path, got %q", r.binaryPath())
}
}
|