fix(chat): deduplicate message ids (#810)

This commit is contained in:
AlexDev_ authored and GitHub committed 2026-08-04 19:54:52 +03:00
1 parent 356ccc98b5
commit 87442e1a92
4 files changed
+61 -13

No files matched your search

@@ -68,6 +68,16 @@ class ChatViewModelTest {
/** Counter used to generate unique WS request IDs. */
private var reqCount = 0
@Test
fun mergeTranscriptWithLive_collapsesDuplicateIdsKeepingLatestMessage() {
val stale = ChatMessage(id = "duplicate-id", role = MessageRole.ASSISTANT, content = "stale")
val latest = stale.copy(content = "latest")
val merged = mergeTranscriptWithLive(emptyList(), listOf(stale, latest))
assertEquals(listOf(latest), merged)
}
@Before
fun setUp() {
Dispatchers.setMain(testDispatcher)
@@ -377,6 +377,34 @@ class ChatWsEventReducerTest {
assertEquals("", persistEffect?.message?.reasoningText)
}
@Test
fun testMessageComplete_replacesExistingStreamingMessageWithSameId() {
val streaming =
ChatMessage(
id = "037cae0c-494e-4a36-862f-3f3e8a235950",
role = MessageRole.ASSISTANT,
content = "partial",
isStreaming = true,
)
val result =
ChatWsEventReducer.reduce(
state =
ChatUiState(
messages =
listOf(
streaming.copy(content = "stale", isStreaming = false),
streaming.copy(isStreaming = false),
),
),
streamingState = StreamingState(streamingMessage = streaming),
event = WsEvent.MessageComplete(text = "complete", sessionId = "session-1"),
currentSessionId = "session-1",
)
assertEquals(1, result.state.messages.size)
assertEquals("complete", result.state.messages.single().content)
}
@Test
fun testMessageStart_prunesCompletedSubagents() {
val completedSubagent =