Fresh repository history for elektrine/tarakan-client hosted at https://git.elektrine.com/elektrine/tarakan-client.
72 lines
2.5 KiB
Go
72 lines
2.5 KiB
Go
package agent
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestFormatGrokUpdateLineToolCall(t *testing.T) {
|
|
raw := `{"timestamp":1,"method":"session/update","params":{"sessionId":"x","update":{"sessionUpdate":"tool_call_update","toolCallId":"c1","kind":"read","title":"Read sample.txt","locations":[{"path":"sample.txt"}],"status":"in_progress","rawInput":{"target_file":"sample.txt"},"_meta":{"x.ai/tool":{"name":"read_file"}}}}}`
|
|
msg, ok := formatGrokUpdateLine(raw)
|
|
if !ok {
|
|
t.Fatal("expected tool line")
|
|
}
|
|
if !strings.Contains(msg, "Read") || !strings.Contains(msg, "sample.txt") {
|
|
t.Fatalf("msg = %q", msg)
|
|
}
|
|
if !strings.HasPrefix(msg, "→ ") {
|
|
t.Fatalf("expected arrow prefix, got %q", msg)
|
|
}
|
|
}
|
|
|
|
func TestFormatGrokUpdateLineGrepPatternTitle(t *testing.T) {
|
|
// Grok often sets title to the raw pattern; we should still show "Grep …".
|
|
raw := `{"params":{"update":{"sessionUpdate":"tool_call_update","title":"password|secret|api_key","rawInput":{"variant":"Grep","pattern":"password|secret|api_key","glob":"*.ex"},"_meta":{"x.ai/tool":{"name":"grep"}}}}}`
|
|
msg, ok := formatGrokUpdateLine(raw)
|
|
if !ok || !strings.Contains(msg, "Grep") || strings.HasPrefix(msg, "→ password") {
|
|
t.Fatalf("msg=%q ok=%v", msg, ok)
|
|
}
|
|
}
|
|
|
|
func TestFormatGrokUpdateLineSkipsBareToolName(t *testing.T) {
|
|
raw := `{"params":{"update":{"sessionUpdate":"tool_call","title":"grep"}}}`
|
|
if _, ok := formatGrokUpdateLine(raw); ok {
|
|
t.Fatal("bare grep title without input should be skipped")
|
|
}
|
|
}
|
|
|
|
func TestFormatGrokUpdateLineCompleted(t *testing.T) {
|
|
raw := `{"params":{"update":{"sessionUpdate":"tool_call_update","title":"Execute ls -la","status":"completed"}}}`
|
|
msg, ok := formatGrokUpdateLine(raw)
|
|
if !ok || !strings.HasPrefix(msg, "✓ ") {
|
|
t.Fatalf("msg=%q ok=%v", msg, ok)
|
|
}
|
|
}
|
|
|
|
func TestFormatGrokToolFromInputSubagent(t *testing.T) {
|
|
got := formatGrokToolFromInput("spawn_subagent", map[string]any{
|
|
"subagent_type": "explore",
|
|
"description": "find auth handlers",
|
|
})
|
|
if !strings.Contains(got, "Subagent") || !strings.Contains(got, "explore") {
|
|
t.Fatalf("got %q", got)
|
|
}
|
|
}
|
|
|
|
func TestEncodeGrokSessionDir(t *testing.T) {
|
|
got := encodeGrokSessionDir("/tmp/foo")
|
|
if got != "%2Ftmp%2Ffoo" && !strings.HasSuffix(got, "%2Ftmp%2Ffoo") {
|
|
// Abs path may prefix differently; require slash encoding.
|
|
if !strings.Contains(got, "%2F") {
|
|
t.Fatalf("got %q", got)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestNewSessionUUIDShape(t *testing.T) {
|
|
id := newSessionUUID()
|
|
parts := strings.Split(id, "-")
|
|
if len(parts) != 5 {
|
|
t.Fatalf("uuid = %q", id)
|
|
}
|
|
}
|