| 1 | #nullable enable |
| 2 | using CascadeIDE.Features.Chat; |
| 3 | using Xunit; |
| 4 | |
| 5 | namespace CascadeIDE.Tests; |
| 6 | |
| 7 | public sealed class SlashSemanticCatalogIndexTests |
| 8 | { |
| 9 | [Fact] |
| 10 | public void GetSuggestions_Root_UsesSemanticDomainsAndElisionStarters() |
| 11 | { |
| 12 | var suggestions = ChatSlashAutocomplete.GetSuggestions("/"); |
| 13 | var titles = suggestions.Select(s => s.ListTitle).ToHashSet(StringComparer.OrdinalIgnoreCase); |
| 14 | |
| 15 | Assert.Contains("intercom", titles); |
| 16 | Assert.Contains("build", titles); |
| 17 | Assert.Contains("git", titles); |
| 18 | Assert.DoesNotContain("run", titles); |
| 19 | } |
| 20 | |
| 21 | [Fact] |
| 22 | public void GetSuggestions_BuildSpace_ListsIntentsNotObjects() |
| 23 | { |
| 24 | var suggestions = ChatSlashAutocomplete.GetSuggestions("/build "); |
| 25 | Assert.All(suggestions, s => Assert.DoesNotContain("build", s.ListTitle, StringComparison.OrdinalIgnoreCase)); |
| 26 | Assert.Contains(suggestions, s => s.ListTitle == "run"); |
| 27 | Assert.Contains(suggestions, s => s.ListTitle == "ui"); |
| 28 | } |
| 29 | |
| 30 | [Fact] |
| 31 | public void GetSuggestions_IntercomSpace_ListsObjectsNotIntents() |
| 32 | { |
| 33 | var suggestions = ChatSlashAutocomplete.GetSuggestions("/intercom "); |
| 34 | Assert.Contains(suggestions, s => s.ListTitle == "topic"); |
| 35 | Assert.Contains(suggestions, s => s.ListTitle == "server"); |
| 36 | Assert.DoesNotContain(suggestions, s => s.ListTitle is "list" or "rename"); |
| 37 | } |
| 38 | } |
| 39 | |