From 8e10d4e2a507ae26f7cbfc0fe8db7a50df504b0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andre=CC=81=20Bispo?= Date: Tue, 7 Jan 2025 09:28:52 +0000 Subject: [PATCH 1/4] [PM-16809] Fix remind me later date --- .../newdevicenotice/NewDeviceNoticeEmailAccessViewModel.kt | 3 +-- .../newdevicenotice/NewDeviceNoticeTwoFactorViewModel.kt | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/newdevicenotice/NewDeviceNoticeEmailAccessViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/newdevicenotice/NewDeviceNoticeEmailAccessViewModel.kt index 7f64b02fdb3..d704a79543c 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/newdevicenotice/NewDeviceNoticeEmailAccessViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/newdevicenotice/NewDeviceNoticeEmailAccessViewModel.kt @@ -16,7 +16,6 @@ import com.x8bit.bitwarden.ui.platform.base.BaseViewModel import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.update import kotlinx.parcelize.Parcelize -import java.time.ZonedDateTime import javax.inject.Inject private const val KEY_STATE = "state" @@ -60,7 +59,7 @@ class NewDeviceNoticeEmailAccessViewModel @Inject constructor( authRepository.setNewDeviceNoticeState( NewDeviceNoticeState( displayStatus = displayStatus, - lastSeenDate = ZonedDateTime.now(), + lastSeenDate = null, ), ) sendEvent(NewDeviceNoticeEmailAccessEvent.NavigateBackToVault) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/newdevicenotice/NewDeviceNoticeTwoFactorViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/newdevicenotice/NewDeviceNoticeTwoFactorViewModel.kt index 5ab6802904d..980696590d3 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/newdevicenotice/NewDeviceNoticeTwoFactorViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/newdevicenotice/NewDeviceNoticeTwoFactorViewModel.kt @@ -22,6 +22,7 @@ import com.x8bit.bitwarden.ui.platform.base.util.asText import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.update import kotlinx.parcelize.Parcelize +import java.time.ZonedDateTime import javax.inject.Inject /** @@ -79,7 +80,7 @@ class NewDeviceNoticeTwoFactorViewModel @Inject constructor( authRepository.setNewDeviceNoticeState( NewDeviceNoticeState( displayStatus = NewDeviceNoticeDisplayStatus.HAS_SEEN, - lastSeenDate = null, + lastSeenDate = ZonedDateTime.now(), ), ) sendEvent(NewDeviceNoticeTwoFactorEvent.NavigateBackToVault) From 55d9eab8955f43b01c121f21788cbc4dcfc8816f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andre=CC=81=20Bispo?= Date: Wed, 8 Jan 2025 12:19:49 +0000 Subject: [PATCH 2/4] [PM-16809] Add fixed clock --- .../NewDeviceNoticeTwoFactorViewModel.kt | 4 ++- .../NewDeviceNoticeTwoFactorViewModelTest.kt | 29 +++++++++++++------ 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/newdevicenotice/NewDeviceNoticeTwoFactorViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/newdevicenotice/NewDeviceNoticeTwoFactorViewModel.kt index 980696590d3..67b7e9ab4d2 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/newdevicenotice/NewDeviceNoticeTwoFactorViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/newdevicenotice/NewDeviceNoticeTwoFactorViewModel.kt @@ -22,6 +22,7 @@ import com.x8bit.bitwarden.ui.platform.base.util.asText import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.update import kotlinx.parcelize.Parcelize +import java.time.Clock import java.time.ZonedDateTime import javax.inject.Inject @@ -33,6 +34,7 @@ class NewDeviceNoticeTwoFactorViewModel @Inject constructor( val authRepository: AuthRepository, val environmentRepository: EnvironmentRepository, val featureFlagManager: FeatureFlagManager, + private val clock: Clock, ) : BaseViewModel< NewDeviceNoticeTwoFactorState, NewDeviceNoticeTwoFactorEvent, @@ -80,7 +82,7 @@ class NewDeviceNoticeTwoFactorViewModel @Inject constructor( authRepository.setNewDeviceNoticeState( NewDeviceNoticeState( displayStatus = NewDeviceNoticeDisplayStatus.HAS_SEEN, - lastSeenDate = ZonedDateTime.now(), + lastSeenDate = ZonedDateTime.now(clock), ), ) sendEvent(NewDeviceNoticeTwoFactorEvent.NavigateBackToVault) diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/newdevicenotice/NewDeviceNoticeTwoFactorViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/newdevicenotice/NewDeviceNoticeTwoFactorViewModelTest.kt index 1130125188d..f9ace923ea1 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/newdevicenotice/NewDeviceNoticeTwoFactorViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/newdevicenotice/NewDeviceNoticeTwoFactorViewModelTest.kt @@ -11,22 +11,19 @@ import com.x8bit.bitwarden.ui.auth.feature.newdevicenotice.NewDeviceNoticeTwoFac import com.x8bit.bitwarden.ui.auth.feature.newdevicenotice.NewDeviceNoticeTwoFactorDialogState.TurnOnTwoFactorDialog import com.x8bit.bitwarden.ui.platform.base.BaseViewModelTest import io.mockk.every -import io.mockk.just import io.mockk.mockk -import io.mockk.runs +import io.mockk.verify import kotlinx.coroutines.test.runTest import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test +import java.time.Clock +import java.time.Instant +import java.time.ZoneOffset +import java.time.ZonedDateTime class NewDeviceNoticeTwoFactorViewModelTest : BaseViewModelTest() { private val environmentRepository = FakeEnvironmentRepository() - private val authRepository = mockk { - every { getNewDeviceNoticeState() } returns NewDeviceNoticeState( - displayStatus = NewDeviceNoticeDisplayStatus.HAS_NOT_SEEN, - lastSeenDate = null, - ) - every { setNewDeviceNoticeState(any()) } just runs - } + private val authRepository = mockk(relaxed = true) private val featureFlagManager = mockk(relaxed = true) { every { getFeatureFlag(FlagKey.NewDevicePermanentDismiss) } returns false @@ -109,6 +106,14 @@ class NewDeviceNoticeTwoFactorViewModelTest : BaseViewModelTest() { NewDeviceNoticeTwoFactorEvent.NavigateBackToVault, awaitItem(), ) + verify(exactly = 1) { + authRepository.setNewDeviceNoticeState( + NewDeviceNoticeState( + displayStatus = NewDeviceNoticeDisplayStatus.HAS_SEEN, + lastSeenDate = ZonedDateTime.now(FIXED_CLOCK), + ), + ) + } } } @@ -172,6 +177,7 @@ class NewDeviceNoticeTwoFactorViewModelTest : BaseViewModelTest() { authRepository = authRepository, environmentRepository = environmentRepository, featureFlagManager = featureFlagManager, + clock = FIXED_CLOCK, ) } @@ -180,3 +186,8 @@ private val DEFAULT_STATE = shouldShowRemindMeLater = true, dialogState = null, ) + +private val FIXED_CLOCK: Clock = Clock.fixed( + Instant.parse("2023-10-27T12:00:00Z"), + ZoneOffset.UTC, +) From e7ac975c11348e2a6ba19222e33e2b8aaab29a86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andre=CC=81=20Bispo?= Date: Wed, 8 Jan 2025 12:30:27 +0000 Subject: [PATCH 3/4] [PM-16809] Add missing test --- .../NewDeviceNoticeEmailAccessViewModelTest.kt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/newdevicenotice/NewDeviceNoticeEmailAccessViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/newdevicenotice/NewDeviceNoticeEmailAccessViewModelTest.kt index 62fe1d915be..17dc3fe334c 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/newdevicenotice/NewDeviceNoticeEmailAccessViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/newdevicenotice/NewDeviceNoticeEmailAccessViewModelTest.kt @@ -12,6 +12,7 @@ import io.mockk.every import io.mockk.just import io.mockk.mockk import io.mockk.runs +import io.mockk.verify import kotlinx.coroutines.test.runTest import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test @@ -61,6 +62,14 @@ class NewDeviceNoticeEmailAccessViewModelTest : BaseViewModelTest() { NewDeviceNoticeEmailAccessEvent.NavigateBackToVault, awaitItem(), ) + verify (exactly = 1){ + authRepository.setNewDeviceNoticeState( + NewDeviceNoticeState( + displayStatus = NewDeviceNoticeDisplayStatus.CAN_ACCESS_EMAIL_PERMANENT, + lastSeenDate = null, + ), + ) + } } } @@ -77,6 +86,14 @@ class NewDeviceNoticeEmailAccessViewModelTest : BaseViewModelTest() { NewDeviceNoticeEmailAccessEvent.NavigateBackToVault, awaitItem(), ) + verify (exactly = 1){ + authRepository.setNewDeviceNoticeState( + NewDeviceNoticeState( + displayStatus = NewDeviceNoticeDisplayStatus.CAN_ACCESS_EMAIL, + lastSeenDate = null, + ), + ) + } } } From a040bb0d2ed75087d01f5de4f3a42d574f9f9c80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andre=CC=81=20Bispo?= Date: Wed, 8 Jan 2025 12:30:48 +0000 Subject: [PATCH 4/4] [PM-16809] lint --- .../NewDeviceNoticeEmailAccessViewModelTest.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/newdevicenotice/NewDeviceNoticeEmailAccessViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/newdevicenotice/NewDeviceNoticeEmailAccessViewModelTest.kt index 17dc3fe334c..23134a86cb6 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/newdevicenotice/NewDeviceNoticeEmailAccessViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/newdevicenotice/NewDeviceNoticeEmailAccessViewModelTest.kt @@ -62,7 +62,7 @@ class NewDeviceNoticeEmailAccessViewModelTest : BaseViewModelTest() { NewDeviceNoticeEmailAccessEvent.NavigateBackToVault, awaitItem(), ) - verify (exactly = 1){ + verify(exactly = 1) { authRepository.setNewDeviceNoticeState( NewDeviceNoticeState( displayStatus = NewDeviceNoticeDisplayStatus.CAN_ACCESS_EMAIL_PERMANENT, @@ -86,7 +86,7 @@ class NewDeviceNoticeEmailAccessViewModelTest : BaseViewModelTest() { NewDeviceNoticeEmailAccessEvent.NavigateBackToVault, awaitItem(), ) - verify (exactly = 1){ + verify(exactly = 1) { authRepository.setNewDeviceNoticeState( NewDeviceNoticeState( displayStatus = NewDeviceNoticeDisplayStatus.CAN_ACCESS_EMAIL,