Files
Agent-System/internal/chat/session_stream_test.go
T

79 lines
1.7 KiB
Go

package chat
import (
"context"
"testing"
"chat-agent-system/internal/bizdev"
"chat-agent-system/internal/coordinator"
"chat-agent-system/internal/intent"
"chat-agent-system/internal/stream"
)
func TestChatSession_SendMessageStream(t *testing.T) {
u := coordinator.UserInfo{ID: "u1", Name: "李工", Role: "engineer", ProjectRole: "composer"}
userCtx := &coordinator.UserProjectContext{
User: u,
Project: coordinator.ProjectInfo{
Name: "内窥镜研发项目",
CurrentStage: bizdev.StageV01_Triage,
},
BlackboardFacts: make(map[string]string),
}
rec := intent.NewRecognizer()
engine := coordinator.NewCoordinatorEngine(nil)
session := NewSession("test_stream_sess", userCtx, rec, engine)
var events []stream.StreamEvent
listener := func(ev stream.StreamEvent) {
events = append(events, ev)
}
// 1. 发送查询进度消息
resp, err := session.SendMessageStream(context.Background(), "查一下当前进展", listener, false)
if err != nil {
t.Fatalf("SendMessageStream failed: %v", err)
}
if resp == nil {
t.Fatalf("expected non-nil response")
}
if len(events) == 0 {
t.Fatalf("expected streamed events, got 0")
}
// 验证事件流序列
hasPhase := false
hasStatus := false
hasDelta := false
hasDone := false
for _, ev := range events {
switch ev.Type {
case stream.EventPhase:
hasPhase = true
case stream.EventStatus:
hasStatus = true
case stream.EventDelta:
hasDelta = true
case stream.EventDone:
hasDone = true
}
}
if !hasPhase {
t.Errorf("expected at least one phase event")
}
if !hasStatus {
t.Errorf("expected at least one status event")
}
if !hasDelta {
t.Errorf("expected at least one delta event")
}
if !hasDone {
t.Errorf("expected done event")
}
}