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 78b2d256f5..192f75bc6a 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 @@ -15,7 +15,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" @@ -58,7 +57,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 5ab6802904..67b7e9ab4d 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,8 @@ 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 /** @@ -32,6 +34,7 @@ class NewDeviceNoticeTwoFactorViewModel @Inject constructor( val authRepository: AuthRepository, val environmentRepository: EnvironmentRepository, val featureFlagManager: FeatureFlagManager, + private val clock: Clock, ) : BaseViewModel< NewDeviceNoticeTwoFactorState, NewDeviceNoticeTwoFactorEvent, @@ -79,7 +82,7 @@ class NewDeviceNoticeTwoFactorViewModel @Inject constructor( authRepository.setNewDeviceNoticeState( NewDeviceNoticeState( displayStatus = NewDeviceNoticeDisplayStatus.HAS_SEEN, - lastSeenDate = null, + lastSeenDate = ZonedDateTime.now(clock), ), ) sendEvent(NewDeviceNoticeTwoFactorEvent.NavigateBackToVault) 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 6e8b722714..73756004cd 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, + ), + ) + } } } 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 1130125188..f9ace923ea 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, +)