refactor(chat): stabilize streaming, session loading, and connection status
Optimize streaming message updates, correct session load merging, and derive connection state reactively. Add reconnection UI banner.
This commit is contained in:
1 parent
a2d299e136
commit
d0eedf053f
4 files changed
+462
-215
No files matched your search
@@ -213,7 +213,8 @@ class ChatViewModelTest {
|
||||
|
||||
var state = viewModel.uiState.value
|
||||
assertTrue(state.isAgentTyping)
|
||||
assertEquals("", state.currentStreamingText)
|
||||
assertNotNull(state.streamingMessage)
|
||||
assertEquals("", state.streamingMessage?.content)
|
||||
assertFalse(state.isThinking)
|
||||
assertEquals("", state.thinkingText)
|
||||
|
||||
@@ -236,27 +237,25 @@ class ChatViewModelTest {
|
||||
advanceUntilIdle()
|
||||
state = viewModel.uiState.value
|
||||
assertFalse(state.isThinking)
|
||||
assertEquals("Hello", state.currentStreamingText)
|
||||
// System message was cleared when createNewSession() was called, so only Assistant streaming message is present
|
||||
assertEquals(1, state.messages.size)
|
||||
assertEquals("Hello", state.messages[0].content)
|
||||
assertTrue(state.messages[0].isStreaming)
|
||||
assertNotNull(state.streamingMessage)
|
||||
assertEquals("Hello", state.streamingMessage?.content)
|
||||
// Streaming message is not in the main messages list yet
|
||||
assertEquals(0, state.messages.size)
|
||||
|
||||
// Token 2
|
||||
mockEventsFlow.emit(WsEvent.MessageToken(" world", "session-123"))
|
||||
advanceUntilIdle()
|
||||
state = viewModel.uiState.value
|
||||
assertEquals("Hello world", state.currentStreamingText)
|
||||
assertEquals(1, state.messages.size)
|
||||
assertEquals("Hello world", state.messages[0].content)
|
||||
assertTrue(state.messages[0].isStreaming)
|
||||
assertNotNull(state.streamingMessage)
|
||||
assertEquals("Hello world", state.streamingMessage?.content)
|
||||
assertEquals(0, state.messages.size)
|
||||
|
||||
// Complete
|
||||
mockEventsFlow.emit(WsEvent.MessageComplete("Hello world!", "session-123"))
|
||||
advanceUntilIdle()
|
||||
state = viewModel.uiState.value
|
||||
assertFalse(state.isAgentTyping)
|
||||
assertEquals("", state.currentStreamingText)
|
||||
assertNull(state.streamingMessage)
|
||||
assertFalse(state.isThinking)
|
||||
assertEquals("", state.thinkingText)
|
||||
assertEquals(1, state.messages.size)
|
||||
|
||||
Reference in new issue
Block a user