diff --git a/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenterTest.kt b/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenterTest.kt index 6761a37fc6..f13d5b3cd8 100644 --- a/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenterTest.kt +++ b/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenterTest.kt @@ -21,6 +21,7 @@ import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.core.meta.BuildType +import io.element.android.libraries.featureflag.api.Feature import io.element.android.libraries.featureflag.api.FeatureFlags import io.element.android.libraries.featureflag.test.FakeFeature import io.element.android.libraries.featureflag.test.FakeFeatureFlagService @@ -41,15 +42,17 @@ class DeveloperSettingsPresenterTest { @Test fun `present - ensures initial states are correct`() = runTest { - val availableFeatures = listOf( - FakeFeature( - key = "feature_1", - title = "Feature 1", - isInLabs = false, + val getAvailableFeaturesResult = lambdaRecorder> { _, _ -> + listOf( + FakeFeature( + key = "feature_1", + title = "Feature 1", + isInLabs = false, + ) ) - ) + } val presenter = createDeveloperSettingsPresenter( - featureFlagService = FakeFeatureFlagService(providedAvailableFeatures = availableFeatures) + featureFlagService = FakeFeatureFlagService(getAvailableFeaturesResult = getAvailableFeaturesResult) ) presenter.test { awaitItem().also { state -> @@ -73,6 +76,8 @@ class DeveloperSettingsPresenterTest { awaitItem().also { state -> assertThat(state.cacheSize).isInstanceOf(AsyncData.Success::class.java) } + getAvailableFeaturesResult.assertions().isCalledOnce() + .with(value(false), value(false)) } } @@ -203,50 +208,17 @@ class DeveloperSettingsPresenterTest { } } - @Test - fun `present - won't display features in labs or finished`() = runTest { - val availableFeatures = listOf( - // Only this feature should be displayed - FakeFeature( - key = "feature_1", - title = "Feature 1", - isInLabs = false, - ), - FakeFeature( - key = "feature_2", - title = "Feature 2", - isInLabs = true, - ), - FakeFeature( - key = "feature_3", - title = "Feature 3", - isInLabs = false, - isFinished = true, - ) - ) - - val presenter = createDeveloperSettingsPresenter( - featureFlagService = FakeFeatureFlagService( - providedAvailableFeatures = availableFeatures, - ) - ) - presenter.test { - skipItems(2) - awaitItem().also { state -> - assertThat(state.features).hasSize(1) - } - } - } - private fun createDeveloperSettingsPresenter( featureFlagService: FakeFeatureFlagService = FakeFeatureFlagService( - providedAvailableFeatures = listOf( - FakeFeature( - key = "feature_1", - title = "Feature 1", - isInLabs = false, + getAvailableFeaturesResult = { _, _ -> + listOf( + FakeFeature( + key = "feature_1", + title = "Feature 1", + isInLabs = false, + ) ) - ) + } ), cacheSizeUseCase: FakeComputeCacheSizeUseCase = FakeComputeCacheSizeUseCase(), clearCacheUseCase: FakeClearCacheUseCase = FakeClearCacheUseCase(), diff --git a/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/labs/LabsPresenterTest.kt b/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/labs/LabsPresenterTest.kt index c9af521960..699e8102d5 100644 --- a/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/labs/LabsPresenterTest.kt +++ b/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/labs/LabsPresenterTest.kt @@ -15,6 +15,8 @@ import io.element.android.libraries.featureflag.api.FeatureFlags import io.element.android.libraries.featureflag.test.FakeFeature import io.element.android.libraries.featureflag.test.FakeFeatureFlagService import io.element.android.services.toolbox.test.strings.FakeStringProvider +import io.element.android.tests.testutils.lambda.lambdaRecorder +import io.element.android.tests.testutils.lambda.value import io.element.android.tests.testutils.test import kotlinx.coroutines.test.runTest import org.junit.Test @@ -34,14 +36,19 @@ class LabsPresenterTest { isInLabs = true, ) ) + val getAvailableFeaturesResult = lambdaRecorder> { _, _ -> + availableFeatures + } createLabsPresenter( - availableFeatures = availableFeatures, + getAvailableFeaturesResult = getAvailableFeaturesResult, ).test { skipItems(1) val receivedFeatures = awaitItem().features assertThat(receivedFeatures).hasSize(2) assertThat(receivedFeatures[0].key).isEqualTo(availableFeatures[0].key) assertThat(receivedFeatures[1].key).isEqualTo(availableFeatures[1].key) + getAvailableFeaturesResult.assertions().isCalledOnce() + .with(value(false), value(true)) } } @@ -55,7 +62,7 @@ class LabsPresenterTest { ), ) createLabsPresenter( - availableFeatures = availableFeatures, + getAvailableFeaturesResult = { _, _ -> availableFeatures }, ).test { skipItems(1) val initialItem = awaitItem() @@ -82,7 +89,7 @@ class LabsPresenterTest { val clearCacheUseCase = FakeClearCacheUseCase() createLabsPresenter( - availableFeatures = availableFeatures, + getAvailableFeaturesResult = { _, _ -> availableFeatures }, clearCacheUseCase = clearCacheUseCase, ).test { skipItems(1) @@ -100,12 +107,12 @@ class LabsPresenterTest { } private fun createLabsPresenter( - availableFeatures: List = emptyList(), + getAvailableFeaturesResult: (Boolean, Boolean) -> List = { _, _ -> emptyList() }, clearCacheUseCase: ClearCacheUseCase = FakeClearCacheUseCase(), ): LabsPresenter { return LabsPresenter( stringProvider = FakeStringProvider(), - featureFlagService = FakeFeatureFlagService(providedAvailableFeatures = availableFeatures), + featureFlagService = FakeFeatureFlagService(getAvailableFeaturesResult = getAvailableFeaturesResult), clearCacheUseCase = clearCacheUseCase, ) } diff --git a/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenterTest.kt b/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenterTest.kt index f65589beb6..ad561127da 100644 --- a/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenterTest.kt +++ b/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenterTest.kt @@ -189,14 +189,16 @@ class PreferencesRootPresenterTest { fun `present - labs can be shown if any feature flag is in labs and not finished`() = runTest { createPresenter( featureFlagService = FakeFeatureFlagService( - providedAvailableFeatures = listOf( - FakeFeature( - key = "feature_1", - title = "Feature 1", - isInLabs = true, - isFinished = false, + getAvailableFeaturesResult = { _, _ -> + listOf( + FakeFeature( + key = "feature_1", + title = "Feature 1", + isInLabs = true, + isFinished = false, + ) ) - ) + } ), matrixClient = FakeMatrixClient( canDeactivateAccountResult = { true }, @@ -212,14 +214,16 @@ class PreferencesRootPresenterTest { fun `present - labs can't be shown if all feature flags in labs are finished`() = runTest { createPresenter( featureFlagService = FakeFeatureFlagService( - providedAvailableFeatures = listOf( - FakeFeature( - key = "feature_1", - title = "Feature 1", - isInLabs = true, - isFinished = true, + getAvailableFeaturesResult = { _, _ -> + listOf( + FakeFeature( + key = "feature_1", + title = "Feature 1", + isInLabs = true, + isFinished = true, + ) ) - ) + } ), matrixClient = FakeMatrixClient( canDeactivateAccountResult = { true }, diff --git a/libraries/featureflag/test/src/main/java/io/element/android/libraries/featureflag/test/FakeFeatureFlagService.kt b/libraries/featureflag/test/src/main/java/io/element/android/libraries/featureflag/test/FakeFeatureFlagService.kt index 88a4941da1..60bd401cef 100644 --- a/libraries/featureflag/test/src/main/java/io/element/android/libraries/featureflag/test/FakeFeatureFlagService.kt +++ b/libraries/featureflag/test/src/main/java/io/element/android/libraries/featureflag/test/FakeFeatureFlagService.kt @@ -17,7 +17,7 @@ import kotlinx.coroutines.flow.MutableStateFlow class FakeFeatureFlagService( initialState: Map = emptyMap(), private val buildMeta: BuildMeta = aBuildMeta(), - var providedAvailableFeatures: List = emptyList(), + private val getAvailableFeaturesResult: (Boolean, Boolean) -> List = { _, _ -> emptyList() }, ) : FeatureFlagService { private val enabledFeatures = initialState .mapValues { MutableStateFlow(it.value) } @@ -37,6 +37,6 @@ class FakeFeatureFlagService( includeFinishFeatures: Boolean, isInLabs: Boolean, ): List { - return providedAvailableFeatures + return getAvailableFeaturesResult(includeFinishFeatures, isInLabs) } }