Forge
csharpdeeb25a2
1using CascadeIDE.Features.Chat;
2using CascadeIDE.Models.AgentChat;
3using Xunit;
4
5namespace CascadeIDE.Tests;
6
7public sealed class ChatHistoryMessageProjectorTests
8{
9 [Fact]
10 public void InferMainThreadId_uses_dominant_thread_from_events()
11 {
12 var sessionId = Guid.NewGuid();
13 var main = Guid.Parse("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
14 var side = Guid.Parse("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
15 var events = new List<ChatHistoryEvent>
16 {
17 messageEvent(sessionId, main, "one"),
18 messageEvent(sessionId, main, "two"),
19 messageEvent(sessionId, side, "side"),
20 };
21
22 var inferred = ChatHistoryMessageProjector.InferMainThreadId(events);
23 Assert.Equal(main, inferred);
24 }
25
26 [Fact]
27 public void Project_after_infer_places_new_messages_on_same_thread_as_history()
28 {
29 var sessionId = Guid.NewGuid();
30 var thread = Guid.Parse("cccccccccccccccccccccccccccccccc");
31 var events = new[] { messageEvent(sessionId, thread, "hello") };
32 var inferred = ChatHistoryMessageProjector.InferMainThreadId(events);
33 var rows = ChatHistoryMessageProjector.Project(events, inferred);
34 Assert.Single(rows);
35 Assert.Equal(thread, rows[0].ThreadId);
36 Assert.Equal(inferred, thread);
37 }
38
39 private static ChatHistoryEvent messageEvent(Guid sessionId, Guid threadId, string content)
40 {
41 var payload = ChatHistoryPayloadMapping.ToMessagePayload(
42 new ViewModels.ChatMessageViewModel("user", content, threadId: threadId));
43 return new ChatHistoryEvent(
44 Guid.NewGuid(),
45 sessionId,
46 DateTimeOffset.UtcNow,
47 ChatHistoryEventKind.MessageAdded,
48 ChatHistoryJson.Serialize(payload),
49 ThreadId: threadId.ToString("N"));
50 }
51}
52
View only · write via MCP/CIDE