bitchat-android/wear/src/test/java/com/bitchat/watch/WearNavigationStateTest.kt
2026-07-29 19:12:13 +02:00

110 lines
3.6 KiB
Kotlin

package com.bitchat.watch
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Test
class WearNavigationStateTest {
@Test
fun `notification dm goes back to main chat`() {
val navigation = WearNavigationState()
navigation.navigate(WearScreen.People)
navigation.navigate(WearScreen.Nickname)
navigation.openDmFromNotification("peer-a")
assertEquals(WearScreen.Dm("peer-a"), navigation.screen)
assertTrue(navigation.goBack())
assertEquals(WearScreen.Chat, navigation.screen)
assertFalse(navigation.canGoBack)
}
@Test
fun `dm opened from people also goes back to main chat`() {
val navigation = WearNavigationState()
navigation.navigate(WearScreen.People)
navigation.navigate(WearScreen.Dm("peer-a"))
assertTrue(navigation.goBack())
assertEquals(WearScreen.Chat, navigation.screen)
assertFalse(navigation.canGoBack)
}
@Test
fun `dm text input returns to dm before main chat`() {
val navigation = WearNavigationState()
navigation.navigate(WearScreen.People)
navigation.navigate(WearScreen.Dm("peer-a"))
navigation.navigate(WearScreen.TextInput("peer-a"))
assertTrue(navigation.goBack())
assertEquals(WearScreen.Dm("peer-a"), navigation.screen)
assertTrue(navigation.goBack())
assertEquals(WearScreen.Chat, navigation.screen)
assertFalse(navigation.canGoBack)
}
@Test
fun `normal app launch resets an open dm to main chat`() {
val navigation = WearNavigationState()
navigation.openDmFromNotification("peer-a")
navigation.openChat()
assertEquals(WearScreen.Chat, navigation.screen)
assertFalse(navigation.canGoBack)
}
@Test
fun `user detail and verification return through dm before main chat`() {
val navigation = WearNavigationState()
navigation.openDmFromNotification("peer-a")
navigation.navigate(WearScreen.UserDetail("peer-a"))
navigation.navigate(WearScreen.Verification("peer-a"))
assertTrue(navigation.goBack())
assertEquals(WearScreen.UserDetail("peer-a"), navigation.screen)
assertTrue(navigation.goBack())
assertEquals(WearScreen.Dm("peer-a"), navigation.screen)
assertTrue(navigation.goBack())
assertEquals(WearScreen.Chat, navigation.screen)
}
@Test
fun `navigation state survives activity recreation`() {
val navigation = WearNavigationState()
navigation.openDmFromNotification("peer-a")
navigation.navigate(WearScreen.UserDetail("peer-a"))
navigation.navigate(WearScreen.Verification("peer-a"))
val restored = WearNavigationState.restore(navigation.toSavedStateValues())
requireNotNull(restored)
assertEquals(WearScreen.Verification("peer-a"), restored.screen)
assertTrue(restored.goBack())
assertEquals(WearScreen.UserDetail("peer-a"), restored.screen)
assertTrue(restored.goBack())
assertEquals(WearScreen.Dm("peer-a"), restored.screen)
assertTrue(restored.goBack())
assertEquals(WearScreen.Chat, restored.screen)
}
@Test
fun `unhandled notification launch survives activity recreation`() {
val request = WearLaunchRequest(
id = 42L,
target = WearLaunchTarget.Dm("peer-a")
)
val restored = restoreWearLaunchRequest(request.toSavedStateValues())
assertEquals(request, restored)
}
}