(t *testing.T)
| 165 | } |
| 166 | |
| 167 | func TestChatNormalFlow(t *testing.T) { |
| 168 | agent := simpleReplyAgent("test response") |
| 169 | srv, _, cleanup := newTestServer(t, agent) |
| 170 | defer cleanup() |
| 171 | |
| 172 | sessionID := createSession(t, srv) |
| 173 | sess, _ := srv.cfg.Store.GetOrCreate(sessionID) |
| 174 | |
| 175 | // Simulate handleChat: create loop, push item, run, consume events. |
| 176 | ts := srv.getTurnState(sessionID) |
| 177 | ts.mu.Lock() |
| 178 | loop := srv.newLoop(sess, sessionID, false) |
| 179 | ts.loop = loop |
| 180 | ts.iterReady = make(chan iterEnvelope[*schema.Message], 1) |
| 181 | ts.iterDone = make(chan iterResult[*schema.Message], 1) |
| 182 | ts.mu.Unlock() |
| 183 | |
| 184 | item := &ChatItem{Query: "hello"} |
| 185 | if err := sess.Append(schema.UserMessage("hello")); err != nil { |
| 186 | t.Fatalf("append: %v", err) |
| 187 | } |
| 188 | loop.Push(item) |
| 189 | loop.Run(context.Background()) |
| 190 | |
| 191 | // Wait for the iterator. |
| 192 | var envelope iterEnvelope[*schema.Message] |
| 193 | select { |
| 194 | case envelope = <-ts.iterReady: |
| 195 | case <-time.After(5 * time.Second): |
| 196 | t.Fatal("timeout waiting for iterReady") |
| 197 | } |
| 198 | |
| 199 | // Drain the iterator. |
| 200 | var content string |
| 201 | for { |
| 202 | event, ok := envelope.events.Next() |
| 203 | if !ok { |
| 204 | break |
| 205 | } |
| 206 | if event.Output != nil && event.Output.MessageOutput != nil { |
| 207 | if m := event.Output.MessageOutput.Message; m != nil && m.Content != "" { |
| 208 | content += m.Content |
| 209 | } |
| 210 | } |
| 211 | } |
| 212 | |
| 213 | if content != "test response" { |
| 214 | t.Errorf("expected 'test response', got %q", content) |
| 215 | } |
| 216 | |
| 217 | // Signal done to OnAgentEvents. |
| 218 | envelope.done <- iterResult[*schema.Message]{ |
| 219 | lastContent: content, |
| 220 | intermediates: []*schema.Message{schema.AssistantMessage(content, nil)}, |
| 221 | } |
| 222 | |
| 223 | // Stop the loop — no more items to process. |
| 224 | loop.Stop() |
nothing calls this directly
no test coverage detected