fix(store): backfill spans in run detail
This commit is contained in:
@@ -128,3 +128,58 @@ func TestFindRunIndexForSpan_MatchesOpenRun(t *testing.T) {
|
||||
t.Fatalf("expected span to attach to open run-2, got index %d", idx)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAddSpanToRunSpans_MergesDuplicateSpanIDs(t *testing.T) {
|
||||
rs := &runSpans{}
|
||||
|
||||
addSpanToRunSpans(rs, SpanRow{
|
||||
SpanID: "span-1",
|
||||
Name: "tool.call",
|
||||
Kind: "tool",
|
||||
Payload: json.RawMessage(`{
|
||||
"payload":{"input":{"command":"ls"}}
|
||||
}`),
|
||||
})
|
||||
|
||||
addSpanToRunSpans(rs, SpanRow{
|
||||
SpanID: "span-1",
|
||||
Status: "error",
|
||||
Duration: func() *int64 { v := int64(42); return &v }(),
|
||||
Payload: json.RawMessage(`{
|
||||
"payload":{"result_preview":"failed"}
|
||||
}`),
|
||||
})
|
||||
|
||||
if len(rs.order) != 1 {
|
||||
t.Fatalf("expected one span order entry, got %d", len(rs.order))
|
||||
}
|
||||
|
||||
span := rs.byID["span-1"]
|
||||
if span == nil {
|
||||
t.Fatal("expected merged span to be present")
|
||||
}
|
||||
if span.Name != "tool.call" {
|
||||
t.Fatalf("expected name to be preserved, got %q", span.Name)
|
||||
}
|
||||
if span.Status != "error" {
|
||||
t.Fatalf("expected error status to win, got %q", span.Status)
|
||||
}
|
||||
if span.Duration == nil || *span.Duration != 42 {
|
||||
t.Fatalf("expected duration to be merged, got %#v", span.Duration)
|
||||
}
|
||||
|
||||
var got map[string]any
|
||||
if err := json.Unmarshal(span.Payload, &got); err != nil {
|
||||
t.Fatalf("unmarshal merged payload: %v", err)
|
||||
}
|
||||
payload, ok := got["payload"].(map[string]any)
|
||||
if !ok {
|
||||
t.Fatal("expected merged payload object")
|
||||
}
|
||||
if _, ok := payload["input"].(map[string]any); !ok {
|
||||
t.Fatal("expected input to remain after merge")
|
||||
}
|
||||
if payload["result_preview"] != "failed" {
|
||||
t.Fatalf("expected result_preview to be merged, got %#v", payload["result_preview"])
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user