Forge
csharpdeeb25a2
1#nullable enable
2
3using CascadeIDE.Features.Chat;
4using CascadeIDE.Models.AgentChat;
5using CascadeIDE.Models.Intercom;
6using CascadeIDE.ViewModels;
7using Xunit;
8
9namespace CascadeIDE.Tests;
10
11public sealed class IntercomMessageAudienceTests
12{
13 [Fact]
14 public void Help_slash_route_is_self_only()
15 {
16 Assert.True(ChatSlashCommandCatalog.TryResolveInput("/help", out var d, out _));
17 Assert.Equal(IntercomMessageAudience.SelfOnly, d.MessageAudience);
18 }
19
20 [Fact]
21 public void Ide_slash_routes_default_to_self_only()
22 {
23 Assert.True(ChatSlashCommandCatalog.TryResolveInput("/solution open", out var d, out _));
24 Assert.Equal(IntercomMessageAudience.SelfOnly, d.MessageAudience);
25 Assert.Equal("open_solution_dialog", d.CommandId);
26 }
27
28 [Fact]
29 public void Payload_round_trips_audience_and_slash_fields()
30 {
31 var vm = ChatMessageViewModel.CreateSlashCommand(
32 "/help",
33 null,
34 audience: IntercomMessageAudience.SelfOnly);
35 vm.ApplySlashCommandResult(new ChatSlashCommandRunResult(true, true, "/help", null, "ok"));
36
37 var payload = ChatHistoryPayloadMapping.ToMessagePayload(vm);
38 Assert.Equal(IntercomMessageAudience.SelfOnly, payload.Audience);
39
40 var rows = ChatHistoryMessageProjector.Project(
41 [
42 new ChatHistoryEvent(
43 Guid.NewGuid(),
44 Guid.NewGuid(),
45 DateTimeOffset.UtcNow,
46 ChatHistoryEventKind.MessageCompleted,
47 ChatHistoryJson.Serialize(payload)),
48 ],
49 Guid.NewGuid());
50
51 Assert.Single(rows);
52 Assert.Equal(IntercomMessageAudience.SelfOnly, rows[0].Audience);
53 Assert.Equal("/help", rows[0].SlashCommandPath);
54 Assert.Equal(ChatSlashCommandStatus.Succeeded, rows[0].SlashCommandStatus);
55 }
56}
57
View only · write via MCP/CIDE