test(chat): cover post-switch dispatch recovery
This commit is contained in:
1 parent
f94d1784d4
commit
b2aa08de23
1 file changed
+36
@@ -75,6 +75,7 @@ class ChatViewModelTest {
|
|||||||
|
|
||||||
/** Counter used to generate unique WS request IDs. */
|
/** Counter used to generate unique WS request IDs. */
|
||||||
private var reqCount = 0
|
private var reqCount = 0
|
||||||
|
private val sentRequestMethods = mutableListOf<Pair<String, String>>()
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun mergeTranscriptWithLive_collapsesDuplicateIdsKeepingLatestMessage() {
|
fun mergeTranscriptWithLive_collapsesDuplicateIdsKeepingLatestMessage() {
|
||||||
@@ -118,6 +119,7 @@ class ChatViewModelTest {
|
|||||||
fun setUp() {
|
fun setUp() {
|
||||||
Dispatchers.setMain(testDispatcher)
|
Dispatchers.setMain(testDispatcher)
|
||||||
reqCount = 0
|
reqCount = 0
|
||||||
|
sentRequestMethods.clear()
|
||||||
|
|
||||||
mockkStatic(Log::class)
|
mockkStatic(Log::class)
|
||||||
every { Log.d(any(), any()) } returns 0
|
every { Log.d(any(), any()) } returns 0
|
||||||
@@ -185,6 +187,7 @@ class ChatViewModelTest {
|
|||||||
every { HermesWsClient.send(any(), any(), any()) } answers {
|
every { HermesWsClient.send(any(), any(), any()) } answers {
|
||||||
reqCount++
|
reqCount++
|
||||||
val id = "req-id-$reqCount"
|
val id = "req-id-$reqCount"
|
||||||
|
sentRequestMethods += arg<String>(0) to id
|
||||||
arg<((String) -> Unit)?>(2)?.invoke(id)
|
arg<((String) -> Unit)?>(2)?.invoke(id)
|
||||||
id
|
id
|
||||||
}
|
}
|
||||||
@@ -2123,6 +2126,39 @@ class ChatViewModelTest {
|
|||||||
val state = viewModel.uiState.value
|
val state = viewModel.uiState.value
|
||||||
assertEquals("session-456", state.currentSessionId)
|
assertEquals("session-456", state.currentSessionId)
|
||||||
assertNull(state.errorMessage)
|
assertNull(state.errorMessage)
|
||||||
|
|
||||||
|
val resumeRequestId = sentRequestMethods.last { it.first == WsMethods.SESSION_RESUME }.second
|
||||||
|
mockEventsFlow.emit(
|
||||||
|
WsEvent.RpcResult(
|
||||||
|
resumeRequestId,
|
||||||
|
mapOf("session_id" to "session-456"),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
advanceUntilIdle()
|
||||||
|
mockEventsFlow.emit(
|
||||||
|
WsEvent.SessionUsage(
|
||||||
|
data = mapOf("usage" to mapOf("output" to 9000L)),
|
||||||
|
sessionId = "session-456",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
advanceUntilIdle()
|
||||||
|
viewModel.sendMessage("Send in the new session")
|
||||||
|
advanceUntilIdle()
|
||||||
|
|
||||||
|
assertEquals(
|
||||||
|
9000L,
|
||||||
|
viewModel.streamingState.value.turnUsageBaseline
|
||||||
|
?.outputTokens,
|
||||||
|
)
|
||||||
|
assertTrue(viewModel.streamingState.value.turnUsageBaselineCaptured)
|
||||||
|
verify {
|
||||||
|
HermesWsClient.sendMessage(
|
||||||
|
"session-456",
|
||||||
|
match { it.contains("Send in the new session") },
|
||||||
|
any(),
|
||||||
|
any(),
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in new issue
Block a user