Forge
csharp4405de34
1using CascadeIDE.Features.Chat;
2using Xunit;
3
4namespace CascadeIDE.Tests;
5
6public sealed class AgentEnvironmentChatTraceThreadTests
7{
8 [Fact]
9 public void Compose_AeeTraceOnMainThread_DoesNotCreateEmptyGuidTopic()
10 {
11 var mainId = Guid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa");
12 var msg = new ChatConversationMessage(
13 Guid.NewGuid(),
14 "assistant",
15 """
16 [AEE] verify deadbeef…
17 ✓ build.affected 1.0s
18 Status: green · max rung: build.affected
19 """,
20 mainId,
21 null,
22 0,
23 SlashCommandPath: "/agent verify",
24 SlashCommandStatus: ChatSlashCommandStatus.Succeeded);
25
26 var snapshot = new ChatSurfaceCompositor().Compose(new ChatSurfaceIntent(
27 [msg],
28 ActiveClarificationBatch: null,
29 SelectedMessageIndex: 0,
30 MainThreadId: mainId,
31 ActiveThreadId: mainId,
32 ThreadBranchHint: null));
33
34 Assert.DoesNotContain(snapshot.State.Threads, t => t.ThreadId == Guid.Empty);
35 Assert.Contains(snapshot.State.Threads, t => t.ThreadId == mainId);
36 }
37
38 [Fact]
39 public void Compose_MessageWithEmptyThreadId_StillCreatesOrphanTopicForLegacyRows()
40 {
41 var mainId = Guid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa");
42 var msg = new ChatConversationMessage(
43 Guid.NewGuid(),
44 "assistant",
45 "[AEE] verify deadbeef…",
46 Guid.Empty,
47 null,
48 0,
49 SlashCommandPath: "/agent verify",
50 SlashCommandStatus: ChatSlashCommandStatus.Succeeded);
51
52 var snapshot = new ChatSurfaceCompositor().Compose(new ChatSurfaceIntent(
53 [msg],
54 ActiveClarificationBatch: null,
55 SelectedMessageIndex: 0,
56 MainThreadId: mainId,
57 ActiveThreadId: mainId,
58 ThreadBranchHint: null));
59
60 Assert.Contains(snapshot.State.Threads, t => t.ThreadId == Guid.Empty);
61 }
62}
63
View only · write via MCP/CIDE