Forge
csharpdeeb25a2
1using CascadeIDE.Features.Chat;
2using CascadeIDE.Models.AgentChat;
3using CascadeIDE.ViewModels;
4using Xunit;
5
6namespace CascadeIDE.Tests;
7
8public sealed class ChatHistoryPayloadTests
9{
10 [Fact]
11 public void MessagePayload_RoundTrip_UsesSnakeCaseKeys()
12 {
13 var vm = new ChatMessageViewModel("user", "hello", threadId: Guid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"));
14 var payload = ChatHistoryPayloadMapping.ToMessagePayload(vm);
15 var json = ChatHistoryJson.Serialize(payload);
16
17 Assert.Contains("\"message_id\"", json);
18 Assert.Contains("\"thread_id\"", json);
19
20 var back = System.Text.Json.JsonSerializer.Deserialize<ChatHistoryMessagePayload>(json, ChatHistoryJson.Options);
21 Assert.NotNull(back);
22 Assert.Equal(payload.MessageId, back!.MessageId);
23 Assert.Equal("hello", back.Content);
24 }
25
26 [Fact]
27 public void Projector_ReadsTypedMessagePayload()
28 {
29 var sid = Guid.NewGuid();
30 var userId = Guid.Parse("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
31 var payload = ChatHistoryPayloadMapping.ToMessagePayload(
32 new ChatMessageViewModel("user", "hi", messageId: userId));
33
34 var ev = new ChatHistoryEvent(
35 Guid.NewGuid(),
36 sid,
37 DateTimeOffset.UtcNow,
38 ChatHistoryEventKind.MessageAdded,
39 ChatHistoryJson.Serialize(payload));
40
41 var defaultThread = Guid.Parse("CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC");
42 var rows = ChatHistoryMessageProjector.Project([ev], defaultThread);
43
44 Assert.Single(rows);
45 Assert.Equal(userId, rows[0].MessageId);
46 Assert.Equal("hi", rows[0].Content);
47 }
48
49 [Fact]
50 public void ThreadForkedPayload_SerializesSnakeCase()
51 {
52 var payload = ChatHistoryPayloadMapping.ToThreadForkedPayload(
53 Guid.Parse("11111111-1111-1111-1111-111111111111"),
54 Guid.Parse("22222222-2222-2222-2222-222222222222"),
55 Guid.Parse("33333333-3333-3333-3333-333333333333"));
56 var json = ChatHistoryJson.Serialize(payload);
57 Assert.Contains("\"new_thread_id\"", json);
58 Assert.Contains("\"parent_message_id\"", json);
59 }
60}
61
View only · write via MCP/CIDE