Forge
csharp4405de34
1using CascadeIDE.Features.Chat;
2using Xunit;
3
4namespace CascadeIDE.Tests;
5
6public sealed class SessionTopicSlashCompletionProviderTests
7{
8 private static readonly Guid MainId = Guid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa");
9 private static readonly Guid BranchId = Guid.Parse("bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb");
10
11 [Fact]
12 public void GetMatches_LabelShowsIdAndTitle_InsertArgIsShortId()
13 {
14 var provider = new SessionTopicSlashCompletionProvider(SampleSnapshot);
15 var matches = provider.GetMatches("", limit: 10);
16 var branch = Assert.Single(matches, m => m.InsertArg == "bbbbbbbb");
17 Assert.Equal("bbbbbbbb · Ветка", branch.Label);
18 Assert.Contains("сообщ.", branch.Help);
19 }
20
21 [Fact]
22 public void Autocomplete_TopicOpen_UsesLabelAsDisplayLine()
23 {
24 var provider = new SessionTopicSlashCompletionProvider(SampleSnapshot);
25 var suggestions = ChatSlashAutocomplete.GetSuggestions(
26 "/intercom topic open ",
27 sessionTopics: provider);
28 Assert.Contains(suggestions, s =>
29 s.InsertText == "/intercom topic open bbbbbbbb"
30 && s.SlashPath == "bbbbbbbb · Ветка");
31 }
32
33 [Fact]
34 public void GetMatches_FiltersByIdPrefix()
35 {
36 var provider = new SessionTopicSlashCompletionProvider(SampleSnapshot);
37 var matches = provider.GetMatches("bbbb", limit: 10);
38 Assert.Single(matches);
39 Assert.Equal("bbbbbbbb", matches[0].InsertArg);
40 }
41
42 private static ChatSurfaceSnapshot SampleSnapshot() =>
43 new(
44 new ChatSurfaceState(
45 [
46 new ChatThreadNode(MainId, "t-main", "Основная тема", true, true, null, null, 0, 0),
47 new ChatThreadNode(BranchId, "t-branch", "Ветка", false, false, MainId, null, 1, 1),
48 ],
49 [],
50 [],
51 [],
52 MainId,
53 "Chat"),
54 new ChatSurfaceLayout(
55 [
56 new ChatThreadOverviewItem(MainId, "Основная тема", "", true, true, 0, 2),
57 new ChatThreadOverviewItem(BranchId, "Ветка", "", false, false, 1, 1),
58 ],
59 []),
60 ChatProductSpine.Empty);
61}
62
View only · write via MCP/CIDE