79 lines
1.7 KiB
Go
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")
|
|
}
|
|
}
|