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") } }