git.iko.soy/opencode-android
on 930859e help sign in
opencode-android/app/src/test/java/soy/iko/opencode/di/UnreadTrackingTest.kt
56 lines 2.0 kB history raw
1package soy.iko.opencode.di
3import org.junit.Assert.assertEquals
4import org.junit.Assert.assertNull
5import org.junit.Test
6import soy.iko.opencode.data.model.AssistantMessage
7import soy.iko.opencode.data.model.MessagePartRemoved
8import soy.iko.opencode.data.model.MessagePartUpdated
9import soy.iko.opencode.data.model.MessageUpdated
10import soy.iko.opencode.data.model.SessionIdle
11import soy.iko.opencode.data.model.TextPart
13class UnreadTrackingTest {
15 private val session = "s1"
17 @Test
18 fun extractsSessionFromMessageUpdated() {
19 val event = MessageUpdated(MessageUpdated.Props(AssistantMessage(id = "a1", sessionID = session)))
20 assertEquals(session, sessionOfEvent(event))
21 }
23 @Test
24 fun extractsSessionFromPartSessionId() {
25 val event = MessagePartUpdated(
26 MessagePartUpdated.Props(
27 part = TextPart(id = "p1", messageID = "m1", sessionID = session, text = "hi"),
28 sessionID = session,
29 messageID = "m1",
30 ),
31 )
32 assertEquals(session, sessionOfEvent(event))
33 }
35 @Test
36 fun fallsBackToEnvelopeSessionIdWhenPartSessionIdMissing() {
37 // Some events omit the session id on the nested part; the envelope value must
38 // still badge the right session.
39 val event = MessagePartUpdated(
40 MessagePartUpdated.Props(
41 part = TextPart(id = "p1", messageID = "m1", sessionID = null, text = "hi"),
42 sessionID = session,
43 messageID = "m1",
44 ),
45 )
46 assertEquals(session, sessionOfEvent(event))
47 }
49 @Test
50 fun returnsNullForNonMessageEvents() {
51 // Idle/error/etc. events describe session lifecycle, not message activity, so
52 // they must not badge a session.
53 assertNull(sessionOfEvent(SessionIdle(SessionIdle.Props(sessionID = session))))
54 assertNull(sessionOfEvent(MessagePartRemoved(MessagePartRemoved.Props(sessionID = session, messageID = "m1", partID = "p1"))))
55 }