Files
byre/internal/agents/fork_internal_test.go
T

50 lines
1.8 KiB
Go
Raw Normal View History

package agents
import (
"testing"
"g.fc.run/misc/byre/internal/api"
)
func TestForkPoint(t *testing.T) {
s1, s2 := "s1", "s2"
ev := func(seq int64, sess *string, kind string, payload map[string]any) api.Event {
return api.Event{Seq: seq, AgentSessionId: sess, Kind: kind, Payload: payload}
}
events := []api.Event{
ev(1, &s1, "user.message", map[string]any{"text": "go"}),
ev(2, &s1, "agent.message", map[string]any{"text": "on it", "vendor_uuid": "u-msg"}),
ev(3, &s1, "agent.tool_call", map[string]any{"id": "a", "vendor_uuid": "u-call-a"}),
ev(4, &s1, "agent.tool_call", map[string]any{"id": "b", "vendor_uuid": "u-call-b"}),
ev(5, &s1, "agent.tool_call", map[string]any{"id": "x", "parent_tool_use_id": "b"}),
ev(6, nil, "snapshot.created", map[string]any{"n": 1}),
ev(7, &s1, "agent.tool_result", map[string]any{"tool_use_id": "a", "vendor_uuid": "u-res-a"}),
ev(8, &s2, "agent.tool_result", map[string]any{"tool_use_id": "b", "vendor_uuid": "u-other"}),
ev(9, &s1, "agent.tool_result", map[string]any{"tool_use_id": "b", "vendor_uuid": "u-res-b"}),
ev(10, &s1, "agent.message", map[string]any{"text": "done", "vendor_uuid": "u-done"}),
ev(11, &s1, "turn.ended", map[string]any{}),
ev(12, &s1, "user.message", map[string]any{"text": "more"}),
ev(13, &s1, "agent.tool_call", map[string]any{"id": "c", "vendor_uuid": "u-call-c"}),
ev(14, &s1, "agent.tool_result", map[string]any{"tool_use_id": "c", "vendor_uuid": "u-res-c"}),
}
for _, c := range []struct {
seq int64
want string
}{
{1, ""},
{2, "u-msg"},
{3, "u-res-b"},
{5, "u-res-b"},
{9, "u-res-b"},
{11, "u-done"},
{12, "u-done"},
{13, "u-res-c"},
} {
got := forkPoint(events, s1, c.seq)
if got != c.want {
t.Errorf("forkPoint at seq %d = %q, want %q", c.seq, got, c.want)
}
}
}