Files
pikasTech-HWLAB/internal/workbenchruntime/service_test.go
T
2026-07-02 08:43:03 +08:00

59 lines
2.8 KiB
Go

package workbenchruntime
import "strings"
import "testing"
func TestWorkbenchRuntimeReadIndexesCoverTraceFanout(t *testing.T) {
want := []string{
"idx_workbench_sessions_last_trace_updated",
"idx_workbench_messages_trace_updated",
"idx_workbench_parts_trace_updated",
"idx_workbench_turns_trace_updated",
"idx_workbench_projection_checkpoints_trace_updated",
}
joined := strings.Join(workbenchRuntimeReadIndexes, "\n")
for _, name := range want {
if !strings.Contains(joined, name) {
t.Fatalf("workbench runtime trace fanout index %s is not ensured", name)
}
}
}
func TestSessionSummaryUsesNewestTurnFactsOverStaleSessionLastTrace(t *testing.T) {
sessionID := "ses_triad_current_trace"
oldTraceID := "trc_triad_completed"
newTraceID := "trc_triad_running"
facts := emptyFacts()
facts["messages"] = []any{
map[string]any{"messageId": "msg_old_user", "sessionId": sessionID, "traceId": oldTraceID, "role": "user", "status": "sent", "updatedAt": "2026-07-01T00:00:00Z", "projectedSeq": int64(10)},
map[string]any{"messageId": "msg_old_agent", "sessionId": sessionID, "traceId": oldTraceID, "role": "agent", "status": "completed", "text": "first done", "updatedAt": "2026-07-01T00:00:02Z", "projectedSeq": int64(20)},
map[string]any{"messageId": "msg_new_user", "sessionId": sessionID, "traceId": newTraceID, "role": "user", "status": "sent", "updatedAt": "2026-07-01T00:00:03Z", "projectedSeq": int64(30)},
map[string]any{"messageId": "msg_new_agent", "sessionId": sessionID, "traceId": newTraceID, "role": "agent", "status": "running", "updatedAt": "2026-07-01T00:00:04Z", "projectedSeq": int64(40)},
}
facts["turns"] = []any{
map[string]any{"turnId": oldTraceID, "sessionId": sessionID, "traceId": oldTraceID, "status": "completed", "terminal": true, "updatedAt": "2026-07-01T00:00:02Z", "projectedSeq": int64(20)},
map[string]any{"turnId": newTraceID, "sessionId": sessionID, "traceId": newTraceID, "status": "running", "terminal": false, "updatedAt": "2026-07-01T00:00:04Z", "projectedSeq": int64(40)},
}
summary := sessionSummary(map[string]any{
"sessionId": sessionID,
"ownerUserId": "usr_triad",
"status": "completed",
"lastTraceId": oldTraceID,
"updatedAt": "2026-07-01T00:00:02Z",
}, facts)
if got := text(summary["lastTraceId"]); got != newTraceID {
t.Fatalf("lastTraceId=%q, want %q; summary=%#v", got, newTraceID, summary)
}
if got := text(summary["status"]); got != "running" {
t.Fatalf("status=%q, want running; summary=%#v", got, summary)
}
turnSummary := objectMap(summary["turnSummary"])
if got := text(turnSummary["traceId"]); got != newTraceID {
t.Fatalf("turnSummary.traceId=%q, want %q; turnSummary=%#v", got, newTraceID, turnSummary)
}
if got := text(turnSummary["status"]); got != "running" {
t.Fatalf("turnSummary.status=%q, want running; turnSummary=%#v", got, turnSummary)
}
}