diff --git a/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/FeatureFlagManager.kt b/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/FeatureFlagManager.kt index 713715aef0..efabfc4c10 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/FeatureFlagManager.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/FeatureFlagManager.kt @@ -20,11 +20,19 @@ interface FeatureFlagManager { /** * Get value for feature flag with [key] and returns it as generic type [T]. - * If no value is found the the given [key] its default value will be returned. + * If no value is found the given [key] its default value will be returned. * Cached flags can be invalidated with [forceRefresh] */ suspend fun getFeatureFlag( key: FlagKey, forceRefresh: Boolean, ): T + + /** + * Gets the value for feature flag with [key] and returns it as generic type [T]. + * If no value is found the given [key] its [FlagKey.defaultValue] will be returned. + */ + fun getFeatureFlag( + key: FlagKey, + ): T } diff --git a/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/FeatureFlagManagerImpl.kt b/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/FeatureFlagManagerImpl.kt index 1c161a4f07..1e8c693d9f 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/FeatureFlagManagerImpl.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/FeatureFlagManagerImpl.kt @@ -32,6 +32,12 @@ class FeatureFlagManagerImpl( serverConfigRepository .getServerConfig(forceRefresh = forceRefresh) .getFlagValueOrDefault(key = key) + + override fun getFeatureFlag(key: FlagKey): T = + serverConfigRepository + .serverConfigStateFlow + .value + .getFlagValueOrDefault(key = key) } private fun ServerConfig?.getFlagValueOrDefault(key: FlagKey): T { diff --git a/app/src/test/java/com/x8bit/bitwarden/data/platform/manager/FeatureFlagManagerTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/platform/manager/FeatureFlagManagerTest.kt index 81591f430a..472f6f4891 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/platform/manager/FeatureFlagManagerTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/platform/manager/FeatureFlagManagerTest.kt @@ -216,6 +216,42 @@ class FeatureFlagManagerTest { flagValue, ) } + + @Test + fun `synchronous getFeatureFlag should return stored value when present`() { + fakeServerConfigRepository.serverConfigValue = SERVER_CONFIG.copy( + serverData = SERVER_CONFIG.serverData.copy( + featureStates = mapOf("dummy-int" to JsonPrimitive(true)), + ), + ) + + val flagValue = manager.getFeatureFlag(key = FlagKey.DummyInt) + + assertEquals(Int.MIN_VALUE, flagValue) + } + + @Test + fun `synchronous getFeatureFlag should return default value if flag is incorrect type`() { + val value = "nonDefaultValue" + fakeServerConfigRepository.serverConfigValue = SERVER_CONFIG.copy( + serverData = SERVER_CONFIG.serverData.copy( + featureStates = mapOf("dummy-string" to JsonPrimitive(value)), + ), + ) + + val flagValue = manager.getFeatureFlag(key = FlagKey.DummyString) + + assertEquals(value, flagValue) + } + + @Test + fun `synchronous getFeatureFlag should return default value if no flags available`() { + fakeServerConfigRepository.serverConfigValue = null + + val flagValue = manager.getFeatureFlag(key = FlagKey.DummyString) + + assertEquals("defaultValue", flagValue) + } } private val SERVER_CONFIG = ServerConfig(