mirror of
https://github.com/bitwarden/android.git
synced 2025-03-16 03:08:50 +03:00
Add option to retrieve feature flag synchronously (#3692)
This commit is contained in:
parent
59ba585048
commit
23066769a1
3 changed files with 51 additions and 1 deletions
|
@ -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 <T : Any> getFeatureFlag(
|
||||
key: FlagKey<T>,
|
||||
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 <T : Any> getFeatureFlag(
|
||||
key: FlagKey<T>,
|
||||
): T
|
||||
}
|
||||
|
|
|
@ -32,6 +32,12 @@ class FeatureFlagManagerImpl(
|
|||
serverConfigRepository
|
||||
.getServerConfig(forceRefresh = forceRefresh)
|
||||
.getFlagValueOrDefault(key = key)
|
||||
|
||||
override fun <T : Any> getFeatureFlag(key: FlagKey<T>): T =
|
||||
serverConfigRepository
|
||||
.serverConfigStateFlow
|
||||
.value
|
||||
.getFlagValueOrDefault(key = key)
|
||||
}
|
||||
|
||||
private fun <T : Any> ServerConfig?.getFlagValueOrDefault(key: FlagKey<T>): T {
|
||||
|
|
|
@ -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(
|
||||
|
|
Loading…
Add table
Reference in a new issue