From a24cde6d0b91dd086ec26ca636f0c9a00aac93e7 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 17 Oct 2025 12:33:07 +0200 Subject: [PATCH] Avoid using volatile FeatureFlags in DefaultFeatureFlagServiceTest --- .../impl/DefaultFeatureFlagServiceTest.kt | 42 +++++++++++++------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/libraries/featureflag/impl/src/test/kotlin/io/element/android/libraries/featureflag/impl/DefaultFeatureFlagServiceTest.kt b/libraries/featureflag/impl/src/test/kotlin/io/element/android/libraries/featureflag/impl/DefaultFeatureFlagServiceTest.kt index becb82da49..c1f33333c4 100644 --- a/libraries/featureflag/impl/src/test/kotlin/io/element/android/libraries/featureflag/impl/DefaultFeatureFlagServiceTest.kt +++ b/libraries/featureflag/impl/src/test/kotlin/io/element/android/libraries/featureflag/impl/DefaultFeatureFlagServiceTest.kt @@ -11,19 +11,37 @@ import app.cash.turbine.test import com.google.common.truth.Truth.assertThat import io.element.android.libraries.core.meta.BuildMeta 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.matrix.test.core.aBuildMeta import kotlinx.coroutines.test.runTest import org.junit.Test class DefaultFeatureFlagServiceTest { + private val aFeature = FakeFeature( + key = "test_feature", + title = "Test Feature", + ) + @Test fun `given service without provider when feature is checked then it returns the default value`() = runTest { + val featureWithDefaultToFalse = FakeFeature( + key = "test_feature", + title = "Test Feature", + defaultValue = { false } + ) + val featureWithDefaultToTrue = FakeFeature( + key = "test_feature_2", + title = "Test Feature 2", + defaultValue = { true } + ) val buildMeta = aBuildMeta() val featureFlagService = createDefaultFeatureFlagService(buildMeta = buildMeta) - featureFlagService.isFeatureEnabledFlow(FeatureFlags.Space).test { - assertThat(awaitItem()).isEqualTo(FeatureFlags.Space.defaultValue(buildMeta)) + featureFlagService.isFeatureEnabledFlow(featureWithDefaultToFalse).test { + assertThat(awaitItem()).isFalse() + cancelAndIgnoreRemainingEvents() + } + featureFlagService.isFeatureEnabledFlow(featureWithDefaultToTrue).test { + assertThat(awaitItem()).isTrue() cancelAndIgnoreRemainingEvents() } } @@ -31,7 +49,7 @@ class DefaultFeatureFlagServiceTest { @Test fun `given service without provider when set enabled feature is called then it returns false`() = runTest { val featureFlagService = createDefaultFeatureFlagService() - val result = featureFlagService.setFeatureEnabled(FeatureFlags.Space, true) + val result = featureFlagService.setFeatureEnabled(aFeature, true) assertThat(result).isFalse() } @@ -43,7 +61,7 @@ class DefaultFeatureFlagServiceTest { providers = setOf(featureFlagProvider), buildMeta = buildMeta, ) - val result = featureFlagService.setFeatureEnabled(FeatureFlags.Space, true) + val result = featureFlagService.setFeatureEnabled(aFeature, true) assertThat(result).isTrue() } @@ -55,10 +73,10 @@ class DefaultFeatureFlagServiceTest { providers = setOf(featureFlagProvider), buildMeta = buildMeta ) - featureFlagService.setFeatureEnabled(FeatureFlags.Space, true) - featureFlagService.isFeatureEnabledFlow(FeatureFlags.Space).test { + featureFlagService.setFeatureEnabled(aFeature, true) + featureFlagService.isFeatureEnabledFlow(aFeature).test { assertThat(awaitItem()).isTrue() - featureFlagService.setFeatureEnabled(FeatureFlags.Space, false) + featureFlagService.setFeatureEnabled(aFeature, false) assertThat(awaitItem()).isFalse() } } @@ -72,9 +90,9 @@ class DefaultFeatureFlagServiceTest { providers = setOf(lowPriorityFeatureFlagProvider, highPriorityFeatureFlagProvider), buildMeta = buildMeta ) - lowPriorityFeatureFlagProvider.setFeatureEnabled(FeatureFlags.Space, false) - highPriorityFeatureFlagProvider.setFeatureEnabled(FeatureFlags.Space, true) - featureFlagService.isFeatureEnabledFlow(FeatureFlags.Space).test { + lowPriorityFeatureFlagProvider.setFeatureEnabled(aFeature, false) + highPriorityFeatureFlagProvider.setFeatureEnabled(aFeature, true) + featureFlagService.isFeatureEnabledFlow(aFeature).test { assertThat(awaitItem()).isTrue() } } @@ -143,7 +161,7 @@ class DefaultFeatureFlagServiceTest { private fun createDefaultFeatureFlagService( providers: Set = emptySet(), buildMeta: BuildMeta = aBuildMeta(), - features: List = FeatureFlags.entries, + features: List = emptyList(), ) = DefaultFeatureFlagService( providers = providers, buildMeta = buildMeta,