fix(chat): deduplicate message ids (#810)
This commit is contained in:
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 =
|
||||
|
||||
Reference in new issue
Block a user