Forge
csharpdeeb25a2
1using CascadeIDE.Features.Chat;
2using Xunit;
3
4namespace CascadeIDE.Tests;
5
6public sealed class ChatSurfaceSyntheticThreadTests
7{
8 [Fact]
9 public void Compose_DisplayTitleWithoutMessages_IncludesThread()
10 {
11 var mainId = Guid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa");
12 var newTopicId = Guid.Parse("cccccccc-cccc-cccc-cccc-cccccccccccc");
13 var titles = new Dictionary<Guid, string> { [newTopicId] = "Новая тема" };
14
15 var snapshot = new ChatSurfaceCompositor().Compose(new ChatSurfaceIntent(
16 [],
17 ActiveClarificationBatch: null,
18 SelectedMessageIndex: -1,
19 MainThreadId: mainId,
20 ActiveThreadId: newTopicId,
21 ThreadBranchHint: "Новая тема",
22 ThreadDisplayTitles: titles,
23 ThreadForks: [new ChatThreadForkRecord(newTopicId, mainId, null)]));
24
25 Assert.Contains(snapshot.State.Threads, t => t.ThreadId == newTopicId);
26 Assert.Contains(snapshot.State.Threads, t => t.ThreadId == mainId);
27 var topic = Assert.Single(snapshot.State.Threads, t => t.ThreadId == newTopicId);
28 Assert.Equal("Новая тема", topic.Title);
29 Assert.Equal(mainId, topic.ParentThreadId);
30 }
31
32 [Fact]
33 public void Compose_ThreadForkWithoutMessages_ParentFromPreviousThread()
34 {
35 var mainId = Guid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa");
36 var branchId = Guid.Parse("bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb");
37 var root = new ChatConversationMessage(Guid.NewGuid(), "user", "root", mainId, null, 0);
38
39 var snapshot = new ChatSurfaceCompositor().Compose(new ChatSurfaceIntent(
40 [root],
41 ActiveClarificationBatch: null,
42 SelectedMessageIndex: 0,
43 MainThreadId: mainId,
44 ActiveThreadId: branchId,
45 ThreadBranchHint: null,
46 ThreadForks: [new ChatThreadForkRecord(branchId, mainId, null)]));
47
48 var branch = Assert.Single(snapshot.State.Threads, t => t.ThreadId == branchId);
49 Assert.Equal(mainId, branch.ParentThreadId);
50 }
51}
52
View only · write via MCP/CIDE