Improve FakeAppNavigationStateService

This commit is contained in:
Benoit Marty 2026-02-12 10:53:51 +01:00 committed by Benoit Marty
parent 00fb4498f4
commit a651a1cd6f
4 changed files with 29 additions and 27 deletions

View file

@ -35,7 +35,6 @@ import io.element.android.libraries.sessionstorage.test.InMemorySessionStore
import io.element.android.libraries.sessionstorage.test.observer.FakeSessionObserver import io.element.android.libraries.sessionstorage.test.observer.FakeSessionObserver
import io.element.android.services.appnavstate.api.AppNavigationState import io.element.android.services.appnavstate.api.AppNavigationState
import io.element.android.services.appnavstate.api.AppNavigationStateService import io.element.android.services.appnavstate.api.AppNavigationStateService
import io.element.android.services.appnavstate.api.NavigationState
import io.element.android.services.appnavstate.test.FakeAppNavigationStateService import io.element.android.services.appnavstate.test.FakeAppNavigationStateService
import io.element.android.services.appnavstate.test.aNavigationState import io.element.android.services.appnavstate.test.aNavigationState
import io.element.android.tests.testutils.lambda.any import io.element.android.tests.testutils.lambda.any
@ -44,7 +43,6 @@ import io.element.android.tests.testutils.lambda.value
import io.mockk.every import io.mockk.every
import io.mockk.mockk import io.mockk.mockk
import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
@ -92,26 +90,25 @@ class DefaultNotificationDrawerManagerTest {
@Test @Test
fun `react to applicationStateChange`() = runTest { fun `react to applicationStateChange`() = runTest {
// For now just call all the API. Later, add more valuable tests. // For now just call all the API. Later, add more valuable tests.
val appNavigationStateFlow: MutableStateFlow<AppNavigationState> = MutableStateFlow( val appNavigationStateService = FakeAppNavigationStateService()
AppNavigationState(
navigationState = NavigationState.Root,
isInForeground = true,
)
)
val appNavigationStateService = FakeAppNavigationStateService(appNavigationState = appNavigationStateFlow)
createDefaultNotificationDrawerManager( createDefaultNotificationDrawerManager(
appNavigationStateService = appNavigationStateService appNavigationStateService = appNavigationStateService
) )
appNavigationStateFlow.emit(AppNavigationState(aNavigationState(), isInForeground = true)) appNavigationStateService.emitNavigationState(AppNavigationState(aNavigationState(), isInForeground = true))
runCurrent() runCurrent()
appNavigationStateFlow.emit(AppNavigationState(aNavigationState(A_SESSION_ID), isInForeground = true)) appNavigationStateService.emitNavigationState(AppNavigationState(aNavigationState(A_SESSION_ID), isInForeground = true))
runCurrent() runCurrent()
appNavigationStateFlow.emit(AppNavigationState(aNavigationState(A_SESSION_ID, A_ROOM_ID), isInForeground = true)) appNavigationStateService.emitNavigationState(AppNavigationState(aNavigationState(A_SESSION_ID, A_ROOM_ID), isInForeground = true))
runCurrent() runCurrent()
appNavigationStateFlow.emit(AppNavigationState(aNavigationState(A_SESSION_ID, A_ROOM_ID, A_THREAD_ID), isInForeground = true)) appNavigationStateService.emitNavigationState(
AppNavigationState(
aNavigationState(A_SESSION_ID, A_ROOM_ID, A_THREAD_ID),
isInForeground = true
)
)
runCurrent() runCurrent()
// Like a user sign out // Like a user sign out
appNavigationStateFlow.emit(AppNavigationState(aNavigationState(), isInForeground = true)) appNavigationStateService.emitNavigationState(AppNavigationState(aNavigationState(), isInForeground = true))
runCurrent() runCurrent()
} }

View file

@ -63,9 +63,9 @@ class DefaultAnalyticsRoomListStateWatcherTest {
@Test @Test
fun `Opening the app in a cold state does nothing`() = runTest { fun `Opening the app in a cold state does nothing`() = runTest {
val navigationStateService = FakeAppNavigationStateService().apply { val navigationStateService = FakeAppNavigationStateService(
appNavigationState.emit(AppNavigationState(NavigationState.Root, false)) initialAppNavigationState = AppNavigationState(NavigationState.Root, false)
} )
val roomListService = FakeRoomListService().apply { val roomListService = FakeRoomListService().apply {
postState(RoomListService.State.Idle) postState(RoomListService.State.Idle)
} }

View file

@ -31,7 +31,6 @@ import io.sentry.Sentry
import io.sentry.SentryTracer import io.sentry.SentryTracer
import io.sentry.protocol.SentryId import io.sentry.protocol.SentryId
import io.sentry.protocol.SentryTransaction import io.sentry.protocol.SentryTransaction
import kotlinx.coroutines.flow.MutableStateFlow
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
@ -149,7 +148,7 @@ class SentryAnalyticsProviderTest {
) )
}, },
appNavigationStateService = FakeAppNavigationStateService( appNavigationStateService = FakeAppNavigationStateService(
MutableStateFlow(AppNavigationState(navigationState = NavigationState.Session("owner", A_SESSION_ID), isInForeground = true)) initialAppNavigationState = AppNavigationState(navigationState = NavigationState.Session("owner", A_SESSION_ID), isInForeground = true)
) )
).run { ).run {
init() init()
@ -182,7 +181,7 @@ class SentryAnalyticsProviderTest {
) )
}, },
appNavigationStateService = FakeAppNavigationStateService( appNavigationStateService = FakeAppNavigationStateService(
MutableStateFlow(AppNavigationState(navigationState = NavigationState.Root, isInForeground = true)) initialAppNavigationState = AppNavigationState(navigationState = NavigationState.Root, isInForeground = true)
) )
).run { ).run {
init() init()
@ -203,7 +202,7 @@ class SentryAnalyticsProviderTest {
) )
}, },
appNavigationStateService = FakeAppNavigationStateService( appNavigationStateService = FakeAppNavigationStateService(
MutableStateFlow(AppNavigationState(navigationState = NavigationState.Session("owner", A_SESSION_ID), isInForeground = true)) initialAppNavigationState = AppNavigationState(navigationState = NavigationState.Session("owner", A_SESSION_ID), isInForeground = true)
) )
).run { ).run {
init() init()
@ -221,7 +220,7 @@ class SentryAnalyticsProviderTest {
buildMeta: BuildMeta = aBuildMeta(), buildMeta: BuildMeta = aBuildMeta(),
getDatabaseSizesUseCase: GetDatabaseSizesUseCase = GetDatabaseSizesUseCase { Result.success(SdkStoreSizes(null, null, null, null)) }, getDatabaseSizesUseCase: GetDatabaseSizesUseCase = GetDatabaseSizesUseCase { Result.success(SdkStoreSizes(null, null, null, null)) },
appNavigationStateService: FakeAppNavigationStateService = FakeAppNavigationStateService( appNavigationStateService: FakeAppNavigationStateService = FakeAppNavigationStateService(
MutableStateFlow(AppNavigationState(navigationState = NavigationState.Session("owner", A_SESSION_ID), isInForeground = true)) initialAppNavigationState = AppNavigationState(NavigationState.Session("owner", A_SESSION_ID), isInForeground = true)
) )
) = SentryAnalyticsProvider( ) = SentryAnalyticsProvider(
context = InstrumentationRegistry.getInstrumentation().targetContext, context = InstrumentationRegistry.getInstrumentation().targetContext,

View file

@ -15,15 +15,21 @@ import io.element.android.services.appnavstate.api.AppNavigationState
import io.element.android.services.appnavstate.api.AppNavigationStateService import io.element.android.services.appnavstate.api.AppNavigationStateService
import io.element.android.services.appnavstate.api.NavigationState import io.element.android.services.appnavstate.api.NavigationState
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
class FakeAppNavigationStateService( class FakeAppNavigationStateService(
override val appNavigationState: MutableStateFlow<AppNavigationState> = MutableStateFlow( initialAppNavigationState: AppNavigationState = AppNavigationState(
AppNavigationState( navigationState = NavigationState.Root,
navigationState = NavigationState.Root, isInForeground = true,
isInForeground = true,
)
), ),
) : AppNavigationStateService { ) : AppNavigationStateService {
private val _appNavigationState: MutableStateFlow<AppNavigationState> = MutableStateFlow(initialAppNavigationState)
override val appNavigationState = _appNavigationState.asStateFlow()
fun emitNavigationState(state: AppNavigationState) {
_appNavigationState.value = state
}
override fun onNavigateToSession(owner: String, sessionId: SessionId) = Unit override fun onNavigateToSession(owner: String, sessionId: SessionId) = Unit
override fun onLeavingSession(owner: String) = Unit override fun onLeavingSession(owner: String) = Unit