| 1 | using CascadeIDE.Features.Chat; |
| 2 | using Xunit; |
| 3 | |
| 4 | namespace CascadeIDE.Tests; |
| 5 | |
| 6 | public 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 | |