mirror of
https://github.com/bitwarden/android.git
synced 2026-05-27 23:20:03 -05:00
Set Settings defaults on login and clear them on logout (#537)
This commit is contained in:
@@ -42,6 +42,7 @@ import com.x8bit.bitwarden.data.auth.repository.util.toUserStateJson
|
||||
import com.x8bit.bitwarden.data.auth.util.toSdkParams
|
||||
import com.x8bit.bitwarden.data.platform.base.FakeDispatcherManager
|
||||
import com.x8bit.bitwarden.data.platform.manager.dispatcher.DispatcherManager
|
||||
import com.x8bit.bitwarden.data.platform.repository.SettingsRepository
|
||||
import com.x8bit.bitwarden.data.platform.repository.model.Environment
|
||||
import com.x8bit.bitwarden.data.platform.repository.util.FakeEnvironmentRepository
|
||||
import com.x8bit.bitwarden.data.platform.util.asFailure
|
||||
@@ -89,6 +90,10 @@ class AuthRepositoryTest {
|
||||
.apply {
|
||||
environment = Environment.Us
|
||||
}
|
||||
private val settingsRepository: SettingsRepository = mockk() {
|
||||
every { clearData(any()) } just runs
|
||||
every { setDefaultsIfNecessary(any()) } just runs
|
||||
}
|
||||
private val authSdkSource = mockk<AuthSdkSource> {
|
||||
coEvery {
|
||||
hashPassword(
|
||||
@@ -123,6 +128,7 @@ class AuthRepositoryTest {
|
||||
authSdkSource = authSdkSource,
|
||||
authDiskSource = fakeAuthDiskSource,
|
||||
environmentRepository = fakeEnvironmentRepository,
|
||||
settingsRepository = settingsRepository,
|
||||
vaultRepository = vaultRepository,
|
||||
dispatcherManager = dispatcherManager,
|
||||
)
|
||||
@@ -498,6 +504,7 @@ class AuthRepositoryTest {
|
||||
fakeAuthDiskSource.userState,
|
||||
)
|
||||
assertNull(repository.specialCircumstance)
|
||||
verify { settingsRepository.setDefaultsIfNecessary(userId = USER_ID_1) }
|
||||
verify(exactly = 0) { vaultRepository.lockVaultIfNecessary(any()) }
|
||||
verify { vaultRepository.clearUnlockedData() }
|
||||
}
|
||||
@@ -579,6 +586,7 @@ class AuthRepositoryTest {
|
||||
fakeAuthDiskSource.userState,
|
||||
)
|
||||
assertNull(repository.specialCircumstance)
|
||||
verify { settingsRepository.setDefaultsIfNecessary(userId = USER_ID_1) }
|
||||
verify { vaultRepository.lockVaultIfNecessary(userId = USER_ID_2) }
|
||||
verify { vaultRepository.clearUnlockedData() }
|
||||
}
|
||||
@@ -949,7 +957,7 @@ class AuthRepositoryTest {
|
||||
|
||||
@Suppress("MaxLineLength")
|
||||
@Test
|
||||
fun `logout for single account should clear the access token and profile data`() = runTest {
|
||||
fun `logout for single account should clear the access token and stored data`() = runTest {
|
||||
// First login:
|
||||
val successResponse = GET_TOKEN_RESPONSE_SUCCESS
|
||||
coEvery {
|
||||
@@ -1029,6 +1037,7 @@ class AuthRepositoryTest {
|
||||
userId = USER_ID_1,
|
||||
organizations = null,
|
||||
)
|
||||
verify { settingsRepository.clearData(userId = USER_ID_1) }
|
||||
verify { vaultRepository.deleteVaultData(userId = USER_ID_1) }
|
||||
verify { vaultRepository.clearUnlockedData() }
|
||||
verify { vaultRepository.lockVaultIfNecessary(userId = USER_ID_1) }
|
||||
@@ -1112,6 +1121,7 @@ class AuthRepositoryTest {
|
||||
userId = USER_ID_1,
|
||||
organizationKeys = null,
|
||||
)
|
||||
verify { settingsRepository.clearData(userId = USER_ID_1) }
|
||||
verify { vaultRepository.deleteVaultData(userId = USER_ID_1) }
|
||||
verify { vaultRepository.clearUnlockedData() }
|
||||
verify { vaultRepository.lockVaultIfNecessary(userId = USER_ID_1) }
|
||||
@@ -1163,6 +1173,7 @@ class AuthRepositoryTest {
|
||||
userId = USER_ID_2,
|
||||
organizationKeys = null,
|
||||
)
|
||||
verify { settingsRepository.clearData(userId = USER_ID_2) }
|
||||
verify { vaultRepository.deleteVaultData(userId = USER_ID_2) }
|
||||
verify(exactly = 0) { vaultRepository.clearUnlockedData() }
|
||||
verify { vaultRepository.lockVaultIfNecessary(userId = USER_ID_2) }
|
||||
|
||||
@@ -11,6 +11,7 @@ import io.mockk.mockk
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.Assertions.assertFalse
|
||||
import org.junit.jupiter.api.Assertions.assertNull
|
||||
import org.junit.jupiter.api.Assertions.assertTrue
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
@@ -24,6 +25,68 @@ class SettingsRepositoryTest {
|
||||
dispatcherManager = FakeDispatcherManager(),
|
||||
)
|
||||
|
||||
@Test
|
||||
fun `clearData should clear all necessary data for the given user`() {
|
||||
val userId = "userId"
|
||||
|
||||
fakeSettingsDiskSource.apply {
|
||||
storeVaultTimeoutInMinutes(
|
||||
userId = userId,
|
||||
vaultTimeoutInMinutes = 30,
|
||||
)
|
||||
storeVaultTimeoutAction(
|
||||
userId = userId,
|
||||
vaultTimeoutAction = VaultTimeoutAction.LOCK,
|
||||
)
|
||||
}
|
||||
|
||||
settingsRepository.clearData(userId = userId)
|
||||
|
||||
assertNull(fakeSettingsDiskSource.getVaultTimeoutInMinutes(userId = userId))
|
||||
assertNull(fakeSettingsDiskSource.getVaultTimeoutAction(userId = userId))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `setDefaultsIfNecessary should set default values for the given user if necessary`() {
|
||||
val userId = "userId"
|
||||
assertNull(fakeSettingsDiskSource.getVaultTimeoutInMinutes(userId = userId))
|
||||
assertNull(fakeSettingsDiskSource.getVaultTimeoutAction(userId = userId))
|
||||
|
||||
settingsRepository.setDefaultsIfNecessary(userId = userId)
|
||||
|
||||
// Calling once sets values
|
||||
assertEquals(
|
||||
30,
|
||||
fakeSettingsDiskSource.getVaultTimeoutInMinutes(userId = userId),
|
||||
)
|
||||
assertEquals(
|
||||
VaultTimeoutAction.LOCK,
|
||||
fakeSettingsDiskSource.getVaultTimeoutAction(userId = userId),
|
||||
)
|
||||
|
||||
// Updating the Vault settings values and calling setDefaultsIfNecessary again has no effect
|
||||
// on the currently stored values.
|
||||
fakeSettingsDiskSource.apply {
|
||||
storeVaultTimeoutInMinutes(
|
||||
userId = userId,
|
||||
vaultTimeoutInMinutes = 240,
|
||||
)
|
||||
storeVaultTimeoutAction(
|
||||
userId = userId,
|
||||
vaultTimeoutAction = VaultTimeoutAction.LOGOUT,
|
||||
)
|
||||
}
|
||||
settingsRepository.setDefaultsIfNecessary(userId = userId)
|
||||
assertEquals(
|
||||
240,
|
||||
fakeSettingsDiskSource.getVaultTimeoutInMinutes(userId = userId),
|
||||
)
|
||||
assertEquals(
|
||||
VaultTimeoutAction.LOGOUT,
|
||||
fakeSettingsDiskSource.getVaultTimeoutAction(userId = userId),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `vaultTimeout should pull from and update SettingsDiskSource for the current user`() {
|
||||
every { authDiskSource.userState?.activeUserId } returns null
|
||||
|
||||
Reference in New Issue
Block a user