From 1d05f5f7585afdd2d84a054032501dcc1cb1b757 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andre=CC=81=20Bispo?= Date: Fri, 16 Aug 2024 14:46:31 +0100 Subject: [PATCH] [PM-6702] Add email verification feature flag to landing create account click --- .../auth/feature/landing/LandingViewModel.kt | 10 ++++++-- .../feature/landing/LandingViewModelTest.kt | 24 +++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingViewModel.kt index 031c157cec..fda51181c9 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingViewModel.kt @@ -6,6 +6,8 @@ import androidx.lifecycle.viewModelScope import com.x8bit.bitwarden.R import com.x8bit.bitwarden.data.auth.repository.AuthRepository import com.x8bit.bitwarden.data.auth.repository.model.UserState +import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager +import com.x8bit.bitwarden.data.platform.manager.model.FlagKey import com.x8bit.bitwarden.data.platform.repository.EnvironmentRepository import com.x8bit.bitwarden.data.platform.repository.model.Environment import com.x8bit.bitwarden.data.vault.repository.VaultRepository @@ -34,6 +36,7 @@ class LandingViewModel @Inject constructor( private val authRepository: AuthRepository, private val vaultRepository: VaultRepository, private val environmentRepository: EnvironmentRepository, + private val featureFlagManager: FeatureFlagManager, savedStateHandle: SavedStateHandle, ) : BaseViewModel( initialState = savedStateHandle[KEY_STATE] @@ -191,8 +194,11 @@ class LandingViewModel @Inject constructor( } private fun handleCreateAccountClicked() { - // TODO PM-9401: ADD FEATURE FLAG email-verification and navigation to StartRegistration - sendEvent(LandingEvent.NavigateToCreateAccount) + if (featureFlagManager.getFeatureFlag(FlagKey.EmailVerification)) { + sendEvent(LandingEvent.NavigateToStartRegistration) + } else { + sendEvent(LandingEvent.NavigateToCreateAccount) + } } private fun handleDialogDismiss() { diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingViewModelTest.kt index c416235919..5f544cdb5f 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingViewModelTest.kt @@ -6,6 +6,8 @@ import com.x8bit.bitwarden.R import com.x8bit.bitwarden.data.auth.repository.AuthRepository import com.x8bit.bitwarden.data.auth.repository.model.UserState import com.x8bit.bitwarden.data.auth.repository.model.VaultUnlockType +import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager +import com.x8bit.bitwarden.data.platform.manager.model.FlagKey import com.x8bit.bitwarden.data.platform.repository.model.Environment import com.x8bit.bitwarden.data.platform.repository.util.FakeEnvironmentRepository import com.x8bit.bitwarden.data.vault.repository.VaultRepository @@ -34,6 +36,7 @@ class LandingViewModelTest : BaseViewModelTest() { every { lockVault(any()) } just runs } private val fakeEnvironmentRepository = FakeEnvironmentRepository() + private val featureFlagManager: FeatureFlagManager = mockk() @Test fun `initial state should be correct when there is no remembered email`() = runTest { @@ -358,6 +361,9 @@ class LandingViewModelTest : BaseViewModelTest() { @Test fun `CreateAccountClick should emit NavigateToCreateAccount`() = runTest { + every { + featureFlagManager.getFeatureFlag(FlagKey.EmailVerification) + } returns false val viewModel = createViewModel() viewModel.eventFlow.test { viewModel.trySendAction(LandingAction.CreateAccountClick) @@ -368,6 +374,23 @@ class LandingViewModelTest : BaseViewModelTest() { } } + @Suppress("MaxLineLength") + @Test + fun `CreateAccountClick should emit NavigateToStartRegistration if EmailVerification feature flag is true`() = + runTest { + every { + featureFlagManager.getFeatureFlag(FlagKey.EmailVerification) + } returns true + val viewModel = createViewModel() + viewModel.eventFlow.test { + viewModel.trySendAction(LandingAction.CreateAccountClick) + assertEquals( + LandingEvent.NavigateToStartRegistration, + awaitItem(), + ) + } + } + @Test fun `DialogDismiss should clear the active dialog`() { val initialState = DEFAULT_STATE.copy( @@ -543,6 +566,7 @@ class LandingViewModelTest : BaseViewModelTest() { }, vaultRepository = vaultRepository, environmentRepository = fakeEnvironmentRepository, + featureFlagManager = featureFlagManager, savedStateHandle = savedStateHandle, )