From 50809d2adbaeacc245db7a9c85cdbd14fe133423 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 11 Aug 2025 11:10:32 +0200 Subject: [PATCH] Add missing test on CrashDetectionPresenter --- .../impl/crash/FakeCrashDataStore.kt | 1 + .../crash/ui/CrashDetectionPresenterTest.kt | 37 +++++++++++++++++-- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/crash/FakeCrashDataStore.kt b/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/crash/FakeCrashDataStore.kt index 1a89a52bf7..8ab5d33eb3 100644 --- a/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/crash/FakeCrashDataStore.kt +++ b/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/crash/FakeCrashDataStore.kt @@ -21,6 +21,7 @@ class FakeCrashDataStore( override fun setCrashData(crashData: String) { crashDataFlow.value = crashData + appHasCrashedFlow.value = true } override suspend fun resetAppHasCrashed() { diff --git a/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/crash/ui/CrashDetectionPresenterTest.kt b/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/crash/ui/CrashDetectionPresenterTest.kt index 7c14177399..a0172e3d39 100644 --- a/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/crash/ui/CrashDetectionPresenterTest.kt +++ b/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/crash/ui/CrashDetectionPresenterTest.kt @@ -18,6 +18,8 @@ import io.element.android.features.rageshake.impl.crash.FakeCrashDataStore import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.matrix.test.core.aBuildMeta import io.element.android.tests.testutils.WarmUpRule +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.test.runTest import org.junit.Rule @@ -56,7 +58,7 @@ class CrashDetectionPresenterTest { fun `present - initial state crash is ignored if the feature is not available`() = runTest { val presenter = createPresenter( FakeCrashDataStore(appHasCrashed = true), - isFeatureAvailable = false, + isFeatureAvailableFlow = flowOf(false), ) moleculeFlow(RecompositionMode.Immediate) { presenter.present() @@ -98,13 +100,42 @@ class CrashDetectionPresenterTest { } } + @Test + fun `present - crashDetected is false if the feature is not available`() = runTest { + val isFeatureAvailableFlow = MutableStateFlow(false) + val crashDataStore = FakeCrashDataStore(appHasCrashed = false) + val presenter = createPresenter( + crashDataStore = crashDataStore, + isFeatureAvailableFlow = isFeatureAvailableFlow, + ) + moleculeFlow(RecompositionMode.Immediate) { + presenter.present() + }.test { + val initialState = awaitItem() + assertThat(initialState.crashDetected).isFalse() + crashDataStore.setCrashData("Some crash data") + // No new state + crashDataStore.resetAppHasCrashed() + // No new state + isFeatureAvailableFlow.value = true + crashDataStore.setCrashData("Some crash data") + assertThat(awaitItem().crashDetected).isTrue() + crashDataStore.resetAppHasCrashed() + assertThat(awaitItem().crashDetected).isFalse() + crashDataStore.setCrashData("Some crash data") + assertThat(awaitItem().crashDetected).isTrue() + isFeatureAvailableFlow.value = false + assertThat(awaitItem().crashDetected).isFalse() + } + } + private fun createPresenter( crashDataStore: FakeCrashDataStore = FakeCrashDataStore(), buildMeta: BuildMeta = aBuildMeta(), - isFeatureAvailable: Boolean = true, + isFeatureAvailableFlow: Flow = flowOf(true), ) = DefaultCrashDetectionPresenter( buildMeta = buildMeta, crashDataStore = crashDataStore, - rageshakeFeatureAvailability = { flowOf(isFeatureAvailable) }, + rageshakeFeatureAvailability = { isFeatureAvailableFlow }, ) }