From 046bb0fa396dd57e317e63936269652c340e7e64 Mon Sep 17 00:00:00 2001 From: David Perez Date: Mon, 19 May 2025 10:56:19 -0500 Subject: [PATCH] PM-21080: Remove the isRemotelyConfigured flag (#5193) --- .../manager/FeatureFlagManagerImpl.kt | 5 +- .../data/platform/manager/model/FlagKey.kt | 29 +--------- .../disk/FeatureFlagOverrideDiskSourceTest.kt | 4 +- .../manager/FeatureFlagManagerTest.kt | 23 ++------ .../data/platform/manager/FlagKeyTest.kt | 35 ------------ .../repository/DebugMenuRepositoryTest.kt | 41 +------------- .../manager/FeatureFlagManagerImpl.kt | 5 +- .../data/platform/manager/model/FlagKey.kt | 13 +---- .../disk/FeatureFlagOverrideDiskSourceTest.kt | 4 +- .../manager/FeatureFlagManagerTest.kt | 23 ++------ .../data/platform/manager/FlagKeyTest.kt | 7 --- .../repository/DebugMenuRepositoryTest.kt | 55 +------------------ 12 files changed, 24 insertions(+), 220 deletions(-) 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 3028a581cd..f8f133f6b3 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 @@ -61,7 +61,6 @@ class FeatureFlagManagerImpl( */ fun ServerConfig?.getFlagValueOrDefault(key: FlagKey): T { val defaultValue = key.defaultValue - if (!key.isRemotelyConfigured) return key.defaultValue return this ?.serverData ?.featureStates @@ -76,9 +75,9 @@ fun ServerConfig?.getFlagValueOrDefault(key: FlagKey): T { Int::class -> it.content.toInt() as T else -> defaultValue } - } catch (ex: ClassCastException) { + } catch (_: ClassCastException) { defaultValue - } catch (ex: NumberFormatException) { + } catch (_: NumberFormatException) { defaultValue } } diff --git a/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/model/FlagKey.kt b/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/model/FlagKey.kt index ac7003c6f1..919d2d2f99 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/model/FlagKey.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/model/FlagKey.kt @@ -14,11 +14,6 @@ sealed class FlagKey { */ abstract val defaultValue: T - /** - * Indicates if the flag should respect the network value or not. - */ - abstract val isRemotelyConfigured: Boolean - @Suppress("UndocumentedPublicClass") companion object { /** @@ -53,7 +48,6 @@ sealed class FlagKey { data object AuthenticatorSync : FlagKey() { override val keyName: String = "enable-pm-bwa-sync" override val defaultValue: Boolean = false - override val isRemotelyConfigured: Boolean = true } /** @@ -62,7 +56,6 @@ sealed class FlagKey { data object EmailVerification : FlagKey() { override val keyName: String = "email-verification" override val defaultValue: Boolean = false - override val isRemotelyConfigured: Boolean = true } /** @@ -71,7 +64,6 @@ sealed class FlagKey { data object MobileErrorReporting : FlagKey() { override val keyName: String = "mobile-error-reporting" override val defaultValue: Boolean = false - override val isRemotelyConfigured: Boolean = true } /** @@ -80,7 +72,6 @@ sealed class FlagKey { data object FlightRecorder : FlagKey() { override val keyName: String = "enable-pm-flight-recorder" override val defaultValue: Boolean = false - override val isRemotelyConfigured: Boolean = false } /** @@ -89,7 +80,6 @@ sealed class FlagKey { data object OnboardingFlow : FlagKey() { override val keyName: String = "native-create-account-flow" override val defaultValue: Boolean = false - override val isRemotelyConfigured: Boolean = true } /** @@ -98,7 +88,6 @@ sealed class FlagKey { data object ImportLoginsFlow : FlagKey() { override val keyName: String = "import-logins-flow" override val defaultValue: Boolean = false - override val isRemotelyConfigured: Boolean = true } /** @@ -107,7 +96,6 @@ sealed class FlagKey { data object VerifiedSsoDomainEndpoint : FlagKey() { override val keyName: String = "pm-12337-refactor-sso-details-endpoint" override val defaultValue: Boolean = false - override val isRemotelyConfigured: Boolean = true } /** @@ -117,7 +105,6 @@ sealed class FlagKey { data object CredentialExchangeProtocolImport : FlagKey() { override val keyName: String = "cxp-import-mobile" override val defaultValue: Boolean = false - override val isRemotelyConfigured: Boolean = true } /** @@ -127,7 +114,6 @@ sealed class FlagKey { data object CredentialExchangeProtocolExport : FlagKey() { override val keyName: String = "cxp-export-mobile" override val defaultValue: Boolean = false - override val isRemotelyConfigured: Boolean = true } /** @@ -136,7 +122,6 @@ sealed class FlagKey { data object CipherKeyEncryption : FlagKey() { override val keyName: String = "cipher-key-encryption" override val defaultValue: Boolean = false - override val isRemotelyConfigured: Boolean = true } /** @@ -145,7 +130,6 @@ sealed class FlagKey { data object MutualTls : FlagKey() { override val keyName: String = "mutual-tls" override val defaultValue: Boolean = false - override val isRemotelyConfigured: Boolean = true } /** @@ -154,7 +138,6 @@ sealed class FlagKey { data object SingleTapPasskeyCreation : FlagKey() { override val keyName: String = "single-tap-passkey-creation" override val defaultValue: Boolean = false - override val isRemotelyConfigured: Boolean = true } /** @@ -163,7 +146,6 @@ sealed class FlagKey { data object SingleTapPasskeyAuthentication : FlagKey() { override val keyName: String = "single-tap-passkey-authentication" override val defaultValue: Boolean = false - override val isRemotelyConfigured: Boolean = true } /** @@ -173,7 +155,6 @@ sealed class FlagKey { data object AnonAddySelfHostAlias : FlagKey() { override val keyName: String = "anon-addy-self-host-alias" override val defaultValue: Boolean = false - override val isRemotelyConfigured: Boolean = true } /** @@ -182,7 +163,6 @@ sealed class FlagKey { data object SimpleLoginSelfHostAlias : FlagKey() { override val keyName: String = "simple-login-self-host-alias" override val defaultValue: Boolean = false - override val isRemotelyConfigured: Boolean = true } /** @@ -192,7 +172,6 @@ sealed class FlagKey { data object ChromeAutofill : FlagKey() { override val keyName: String = "android-chrome-autofill" override val defaultValue: Boolean = false - override val isRemotelyConfigured: Boolean = true } /** @@ -201,7 +180,6 @@ sealed class FlagKey { data object RestrictCipherItemDeletion : FlagKey() { override val keyName: String = "pm-15493-restrict-item-deletion-to-can-manage-permission" override val defaultValue: Boolean = false - override val isRemotelyConfigured: Boolean = true } /** @@ -210,7 +188,6 @@ sealed class FlagKey { data object PreAuthSettings : FlagKey() { override val keyName: String = "enable-pm-prelogin-settings" override val defaultValue: Boolean = false - override val isRemotelyConfigured: Boolean = false } //region Dummy keys for testing @@ -220,15 +197,12 @@ sealed class FlagKey { data object DummyBoolean : FlagKey() { override val keyName: String = "dummy-boolean" override val defaultValue: Boolean = false - override val isRemotelyConfigured: Boolean = true } /** * Data object holding the key for an [Int] flag to be used in tests. */ - data class DummyInt( - override val isRemotelyConfigured: Boolean = true, - ) : FlagKey() { + data object DummyInt : FlagKey() { override val keyName: String = "dummy-int" override val defaultValue: Int = Int.MIN_VALUE } @@ -239,7 +213,6 @@ sealed class FlagKey { data object DummyString : FlagKey() { override val keyName: String = "dummy-string" override val defaultValue: String = "defaultValue" - override val isRemotelyConfigured: Boolean = true } //endregion Dummy keys for testing } diff --git a/app/src/test/java/com/x8bit/bitwarden/data/platform/datasource/disk/FeatureFlagOverrideDiskSourceTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/platform/datasource/disk/FeatureFlagOverrideDiskSourceTest.kt index 36e84bf4a5..01d7a325a6 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/platform/datasource/disk/FeatureFlagOverrideDiskSourceTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/platform/datasource/disk/FeatureFlagOverrideDiskSourceTest.kt @@ -81,7 +81,7 @@ class FeatureFlagOverrideDiskSourceTest { @Test fun `call to save feature flag should update SharedPreferences for ints`() { - val key = FlagKey.DummyInt() + val key = FlagKey.DummyInt assertEquals( fakeSharedPreferences.getInt( "$BASE_STORAGE_PREFIX${key.keyName}", @@ -102,7 +102,7 @@ class FeatureFlagOverrideDiskSourceTest { @Test fun `call to get feature flag should return correct value for ints`() { - val key = FlagKey.DummyInt() + val key = FlagKey.DummyInt assertNull(featureFlagOverrideDiskSource.getFeatureFlag(key)) val expectedValue = 1 fakeSharedPreferences.edit { 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 b3ddbd638f..31548da398 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 @@ -147,7 +147,7 @@ class FeatureFlagManagerTest { ) val flagValue = manager.getFeatureFlag( - key = FlagKey.DummyInt(), + key = FlagKey.DummyInt, forceRefresh = false, ) @@ -168,7 +168,7 @@ class FeatureFlagManagerTest { ) val flagValue = manager.getFeatureFlag( - key = FlagKey.DummyInt(), + key = FlagKey.DummyInt, forceRefresh = false, ) @@ -240,22 +240,7 @@ class FeatureFlagManagerTest { fakeServerConfigRepository.serverConfigValue = null val flagValue = manager.getFeatureFlag( - key = FlagKey.DummyInt(), - forceRefresh = false, - ) - - assertEquals( - Int.MIN_VALUE, - flagValue, - ) - } - - @Test - fun `getFeatureFlag Int should return default value when not remotely controlled`() = runTest { - fakeServerConfigRepository.serverConfigValue = null - - val flagValue = manager.getFeatureFlag( - key = FlagKey.DummyInt(isRemotelyConfigured = false), + key = FlagKey.DummyInt, forceRefresh = false, ) @@ -288,7 +273,7 @@ class FeatureFlagManagerTest { ), ) - val flagValue = manager.getFeatureFlag(key = FlagKey.DummyInt()) + val flagValue = manager.getFeatureFlag(key = FlagKey.DummyInt) assertEquals(Int.MIN_VALUE, flagValue) } diff --git a/app/src/test/java/com/x8bit/bitwarden/data/platform/manager/FlagKeyTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/platform/manager/FlagKeyTest.kt index 1f931cb711..f7e7db49bb 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/platform/manager/FlagKeyTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/platform/manager/FlagKeyTest.kt @@ -105,39 +105,4 @@ class FlagKeyTest { }, ) } - - @Test - fun `All feature flags are correctly set to be remotely configured`() { - assertTrue( - listOf( - FlagKey.AuthenticatorSync, - FlagKey.EmailVerification, - FlagKey.OnboardingFlow, - FlagKey.ImportLoginsFlow, - FlagKey.VerifiedSsoDomainEndpoint, - FlagKey.CredentialExchangeProtocolImport, - FlagKey.CredentialExchangeProtocolExport, - FlagKey.CipherKeyEncryption, - FlagKey.SingleTapPasskeyCreation, - FlagKey.SingleTapPasskeyAuthentication, - FlagKey.MutualTls, - FlagKey.AnonAddySelfHostAlias, - FlagKey.SimpleLoginSelfHostAlias, - FlagKey.ChromeAutofill, - FlagKey.MobileErrorReporting, - FlagKey.RestrictCipherItemDeletion, - ).all { - it.isRemotelyConfigured - }, - ) - - assertTrue( - listOf( - FlagKey.FlightRecorder, - FlagKey.PreAuthSettings, - ).all { - !it.isRemotelyConfigured - }, - ) - } } diff --git a/app/src/test/java/com/x8bit/bitwarden/data/platform/repository/DebugMenuRepositoryTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/platform/repository/DebugMenuRepositoryTest.kt index 8dfca07b2e..ada52050d3 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/platform/repository/DebugMenuRepositoryTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/platform/repository/DebugMenuRepositoryTest.kt @@ -3,7 +3,6 @@ package com.x8bit.bitwarden.data.platform.repository import app.cash.turbine.test import com.bitwarden.data.datasource.disk.model.ServerConfig import com.bitwarden.data.repository.ServerConfigRepository -import com.bitwarden.network.model.ConfigResponseJson import com.x8bit.bitwarden.data.auth.datasource.disk.AuthDiskSource import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus import com.x8bit.bitwarden.data.auth.datasource.disk.model.UserStateJson @@ -17,7 +16,6 @@ import io.mockk.runs import io.mockk.verify import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.test.runTest -import kotlinx.serialization.json.JsonPrimitive import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertNull import org.junit.jupiter.api.Assertions.assertTrue @@ -27,7 +25,7 @@ class DebugMenuRepositoryTest { private val mockFeatureFlagOverrideDiskSource = mockk { every { getFeatureFlag(FlagKey.DummyBoolean) } returns true every { getFeatureFlag(FlagKey.DummyString) } returns TEST_STRING_VALUE - every { getFeatureFlag(FlagKey.DummyInt()) } returns TEST_INT_VALUE + every { getFeatureFlag(FlagKey.DummyInt) } returns TEST_INT_VALUE every { saveFeatureFlag(any(), any()) } just runs } private val mutableServerConfigStateFlow = MutableStateFlow(null) @@ -80,12 +78,12 @@ class DebugMenuRepositoryTest { @Test fun `getFeatureFlag should return the feature flag string value from disk`() { - assertEquals(TEST_STRING_VALUE, debugMenuRepository.getFeatureFlag(FlagKey.DummyString)!!) + assertEquals(TEST_STRING_VALUE, debugMenuRepository.getFeatureFlag(FlagKey.DummyString)) } @Test fun `getFeatureFlag should return the feature flag int value from disk`() { - assertEquals(TEST_INT_VALUE, debugMenuRepository.getFeatureFlag(FlagKey.DummyInt())!!) + assertEquals(TEST_INT_VALUE, debugMenuRepository.getFeatureFlag(FlagKey.DummyInt)) } @Test @@ -116,39 +114,6 @@ class DebugMenuRepositoryTest { } } - @Suppress("MaxLineLength") - @Test - fun `resetFeatureFlagOverrides should save all feature flags to values from the server config if remote configured is on`() = - runTest { - val mockServerData = mockk(relaxed = true) { - every { featureStates } returns mapOf( - FlagKey.EmailVerification.keyName to JsonPrimitive(true), - FlagKey.OnboardingFlow.keyName to JsonPrimitive(true), - ) - } - val mockServerConfig = mockk(relaxed = true) { - every { serverData } returns mockServerData - } - mutableServerConfigStateFlow.value = mockServerConfig - - debugMenuRepository.resetFeatureFlagOverrides() - - assertTrue(FlagKey.EmailVerification.isRemotelyConfigured) - verify(exactly = 1) { - mockFeatureFlagOverrideDiskSource.saveFeatureFlag(FlagKey.EmailVerification, true) - mockFeatureFlagOverrideDiskSource.saveFeatureFlag( - FlagKey.OnboardingFlow, - true, - ) - } - - debugMenuRepository.featureFlagOverridesUpdatedFlow.test { - awaitItem() // initial value on subscription - awaitItem() - cancel() - } - } - @Test fun `resetOnboardingStatusForCurrentUser should set the onboarding status to NOT_STARTED`() { val userId = "testUserId" diff --git a/authenticator/src/main/kotlin/com/bitwarden/authenticator/data/platform/manager/FeatureFlagManagerImpl.kt b/authenticator/src/main/kotlin/com/bitwarden/authenticator/data/platform/manager/FeatureFlagManagerImpl.kt index c27f3bdc1d..4160b01543 100644 --- a/authenticator/src/main/kotlin/com/bitwarden/authenticator/data/platform/manager/FeatureFlagManagerImpl.kt +++ b/authenticator/src/main/kotlin/com/bitwarden/authenticator/data/platform/manager/FeatureFlagManagerImpl.kt @@ -41,7 +41,6 @@ class FeatureFlagManagerImpl( */ fun ServerConfig?.getFlagValueOrDefault(key: FlagKey): T { val defaultValue = key.defaultValue - if (!key.isRemotelyConfigured) return key.defaultValue return this ?.serverData ?.featureStates @@ -56,9 +55,9 @@ fun ServerConfig?.getFlagValueOrDefault(key: FlagKey): T { Int::class -> it.content.toInt() as T else -> defaultValue } - } catch (ex: ClassCastException) { + } catch (_: ClassCastException) { defaultValue - } catch (ex: NumberFormatException) { + } catch (_: NumberFormatException) { defaultValue } } diff --git a/authenticator/src/main/kotlin/com/bitwarden/authenticator/data/platform/manager/model/FlagKey.kt b/authenticator/src/main/kotlin/com/bitwarden/authenticator/data/platform/manager/model/FlagKey.kt index a58fe6a30f..e788939185 100644 --- a/authenticator/src/main/kotlin/com/bitwarden/authenticator/data/platform/manager/model/FlagKey.kt +++ b/authenticator/src/main/kotlin/com/bitwarden/authenticator/data/platform/manager/model/FlagKey.kt @@ -14,11 +14,6 @@ sealed class FlagKey { */ abstract val defaultValue: T - /** - * Indicates if the flag should respect the network value or not. - */ - abstract val isRemotelyConfigured: Boolean - @Suppress("UndocumentedPublicClass") companion object { /** @@ -38,7 +33,6 @@ sealed class FlagKey { data object BitwardenAuthenticationEnabled : FlagKey() { override val keyName: String = "bitwarden-authentication-enabled" override val defaultValue: Boolean = false - override val isRemotelyConfigured: Boolean = false } /** @@ -47,7 +41,6 @@ sealed class FlagKey { data object PasswordManagerSync : FlagKey() { override val keyName: String = "enable-pm-bwa-sync" override val defaultValue: Boolean = false - override val isRemotelyConfigured: Boolean = true } /** @@ -56,15 +49,12 @@ sealed class FlagKey { data object DummyBoolean : FlagKey() { override val keyName: String = "dummy-boolean" override val defaultValue: Boolean = false - override val isRemotelyConfigured: Boolean = true } /** * Data object holding the key for an [Int] flag to be used in tests. */ - data class DummyInt( - override val isRemotelyConfigured: Boolean = true, - ) : FlagKey() { + data object DummyInt : FlagKey() { override val keyName: String = "dummy-int" override val defaultValue: Int = Int.MIN_VALUE } @@ -75,6 +65,5 @@ sealed class FlagKey { data object DummyString : FlagKey() { override val keyName: String = "dummy-string" override val defaultValue: String = "defaultValue" - override val isRemotelyConfigured: Boolean = true } } diff --git a/authenticator/src/test/java/com/bitwarden/authenticator/data/platform/datasource/disk/FeatureFlagOverrideDiskSourceTest.kt b/authenticator/src/test/java/com/bitwarden/authenticator/data/platform/datasource/disk/FeatureFlagOverrideDiskSourceTest.kt index 1b341bf60d..472ccb03bb 100644 --- a/authenticator/src/test/java/com/bitwarden/authenticator/data/platform/datasource/disk/FeatureFlagOverrideDiskSourceTest.kt +++ b/authenticator/src/test/java/com/bitwarden/authenticator/data/platform/datasource/disk/FeatureFlagOverrideDiskSourceTest.kt @@ -81,7 +81,7 @@ class FeatureFlagOverrideDiskSourceTest { @Test fun `call to save feature flag should update SharedPreferences for ints`() { - val key = FlagKey.DummyInt() + val key = FlagKey.DummyInt assertEquals( fakeSharedPreferences.getInt( "$BASE_STORAGE_PREFIX${key.keyName}", @@ -102,7 +102,7 @@ class FeatureFlagOverrideDiskSourceTest { @Test fun `call to get feature flag should return correct value for ints`() { - val key = FlagKey.DummyInt() + val key = FlagKey.DummyInt assertNull(featureFlagOverrideDiskSource.getFeatureFlag(key)) val expectedValue = 1 fakeSharedPreferences.edit { diff --git a/authenticator/src/test/java/com/bitwarden/authenticator/data/platform/manager/FeatureFlagManagerTest.kt b/authenticator/src/test/java/com/bitwarden/authenticator/data/platform/manager/FeatureFlagManagerTest.kt index eb4387f81a..cf423d0890 100644 --- a/authenticator/src/test/java/com/bitwarden/authenticator/data/platform/manager/FeatureFlagManagerTest.kt +++ b/authenticator/src/test/java/com/bitwarden/authenticator/data/platform/manager/FeatureFlagManagerTest.kt @@ -90,7 +90,7 @@ class FeatureFlagManagerTest { ) val flagValue = manager.getFeatureFlag( - key = FlagKey.DummyInt(), + key = FlagKey.DummyInt, forceRefresh = false, ) @@ -111,7 +111,7 @@ class FeatureFlagManagerTest { ) val flagValue = manager.getFeatureFlag( - key = FlagKey.DummyInt(), + key = FlagKey.DummyInt, forceRefresh = false, ) @@ -183,22 +183,7 @@ class FeatureFlagManagerTest { fakeServerConfigRepository.serverConfigValue = null val flagValue = manager.getFeatureFlag( - key = FlagKey.DummyInt(), - forceRefresh = false, - ) - - assertEquals( - Int.MIN_VALUE, - flagValue, - ) - } - - @Test - fun `getFeatureFlag Int should return default value when not remotely controlled`() = runTest { - fakeServerConfigRepository.serverConfigValue = null - - val flagValue = manager.getFeatureFlag( - key = FlagKey.DummyInt(isRemotelyConfigured = false), + key = FlagKey.DummyInt, forceRefresh = false, ) @@ -231,7 +216,7 @@ class FeatureFlagManagerTest { ), ) - val flagValue = manager.getFeatureFlag(key = FlagKey.DummyInt()) + val flagValue = manager.getFeatureFlag(key = FlagKey.DummyInt) assertEquals(Int.MIN_VALUE, flagValue) } diff --git a/authenticator/src/test/java/com/bitwarden/authenticator/data/platform/manager/FlagKeyTest.kt b/authenticator/src/test/java/com/bitwarden/authenticator/data/platform/manager/FlagKeyTest.kt index 843939f01a..b4af889e08 100644 --- a/authenticator/src/test/java/com/bitwarden/authenticator/data/platform/manager/FlagKeyTest.kt +++ b/authenticator/src/test/java/com/bitwarden/authenticator/data/platform/manager/FlagKeyTest.kt @@ -2,7 +2,6 @@ package com.bitwarden.authenticator.data.platform.manager import com.bitwarden.authenticator.data.platform.manager.model.FlagKey import org.junit.jupiter.api.Assertions.assertEquals -import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test @@ -30,10 +29,4 @@ class FlagKeyTest { }, ) } - - @Test - fun `All feature flags are correctly set to be remotely configured`() { - assertTrue(FlagKey.PasswordManagerSync.isRemotelyConfigured) - assertFalse(FlagKey.BitwardenAuthenticationEnabled.isRemotelyConfigured) - } } diff --git a/authenticator/src/test/java/com/bitwarden/authenticator/data/platform/repository/DebugMenuRepositoryTest.kt b/authenticator/src/test/java/com/bitwarden/authenticator/data/platform/repository/DebugMenuRepositoryTest.kt index 3a9fd2dc0e..eada73d1b4 100644 --- a/authenticator/src/test/java/com/bitwarden/authenticator/data/platform/repository/DebugMenuRepositoryTest.kt +++ b/authenticator/src/test/java/com/bitwarden/authenticator/data/platform/repository/DebugMenuRepositoryTest.kt @@ -5,14 +5,12 @@ import com.bitwarden.authenticator.data.platform.datasource.disk.FeatureFlagOver import com.bitwarden.authenticator.data.platform.manager.model.FlagKey import com.bitwarden.data.datasource.disk.model.ServerConfig import com.bitwarden.data.repository.ServerConfigRepository -import com.bitwarden.network.model.ConfigResponseJson import io.mockk.every import io.mockk.just import io.mockk.mockk import io.mockk.verify import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.test.runTest -import kotlinx.serialization.json.JsonPrimitive import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test @@ -21,7 +19,7 @@ class DebugMenuRepositoryTest { mockk { every { getFeatureFlag(FlagKey.DummyBoolean) } returns true every { getFeatureFlag(FlagKey.DummyString) } returns TEST_STRING_VALUE - every { getFeatureFlag(FlagKey.DummyInt()) } returns TEST_INT_VALUE + every { getFeatureFlag(FlagKey.DummyInt) } returns TEST_INT_VALUE every { saveFeatureFlag(any(), any()) } just io.mockk.runs } private val mutableServerConfigStateFlow = @@ -76,7 +74,7 @@ class DebugMenuRepositoryTest { fun `getFeatureFlag should return the feature flag string value from disk`() { Assertions.assertEquals( TEST_STRING_VALUE, - debugMenuRepository.getFeatureFlag(FlagKey.DummyString)!!, + debugMenuRepository.getFeatureFlag(FlagKey.DummyString), ) } @@ -84,7 +82,7 @@ class DebugMenuRepositoryTest { fun `getFeatureFlag should return the feature flag int value from disk`() { Assertions.assertEquals( TEST_INT_VALUE, - debugMenuRepository.getFeatureFlag(FlagKey.DummyInt())!!, + debugMenuRepository.getFeatureFlag(FlagKey.DummyInt), ) } @@ -115,53 +113,6 @@ class DebugMenuRepositoryTest { expectNoEvents() } } - - @Suppress("MaxLineLength") - @Test - fun `resetFeatureFlagOverrides should save all feature flags to values from the server config if remote configured is on`() = - runTest { - val mockServerData = - mockk( - relaxed = true, - ) { - every { featureStates } returns mapOf( - FlagKey.PasswordManagerSync.keyName to JsonPrimitive( - true, - ), - FlagKey.BitwardenAuthenticationEnabled.keyName to JsonPrimitive( - false, - ), - ) - } - val mockServerConfig = - mockk( - relaxed = true, - ) { - every { serverData } returns mockServerData - } - mutableServerConfigStateFlow.value = mockServerConfig - - debugMenuRepository.resetFeatureFlagOverrides() - - Assertions.assertTrue(FlagKey.PasswordManagerSync.isRemotelyConfigured) - Assertions.assertFalse(FlagKey.BitwardenAuthenticationEnabled.isRemotelyConfigured) - verify(exactly = 1) { - mockFeatureFlagOverrideDiskSource.saveFeatureFlag( - FlagKey.PasswordManagerSync, - true, - ) - mockFeatureFlagOverrideDiskSource.saveFeatureFlag( - FlagKey.BitwardenAuthenticationEnabled, - false, - ) - } - - debugMenuRepository.featureFlagOverridesUpdatedFlow.test { - awaitItem() // initial value on subscription - awaitItem() - cancel() - } - } } private const val TEST_STRING_VALUE = "test"