Add environment data to UserState.Account and AccountSummary (#351)

This commit is contained in:
Brian Yencho
2023-12-07 15:01:17 -06:00
committed by Álison Fernandes
parent b2c2c9e563
commit 146f770b8c
16 changed files with 67 additions and 2 deletions

View File

@@ -1,6 +1,7 @@
package com.x8bit.bitwarden.data.auth.repository.model
import com.x8bit.bitwarden.data.auth.repository.model.UserState.Account
import com.x8bit.bitwarden.data.platform.repository.model.Environment
/**
* Represents the overall "user state" of the current active user as well as any users that may be
@@ -39,6 +40,7 @@ data class UserState(
* @property email The user's email address.
* @property name The user's name (if applicable).
* @property avatarColorHex Hex color value for a user's avatar in the "#AARRGGBB" format.
* @property environment The [Environment] associated with the user's account.
* @property isPremium `true` if the account has a premium membership.
* @property isVaultUnlocked Whether or not the user's vault is currently unlocked.
*/
@@ -47,6 +49,7 @@ data class UserState(
val name: String?,
val email: String,
val avatarColorHex: String,
val environment: Environment,
val isPremium: Boolean,
val isVaultUnlocked: Boolean,
)

View File

@@ -2,6 +2,7 @@ package com.x8bit.bitwarden.data.auth.repository.util
import com.x8bit.bitwarden.data.auth.datasource.disk.model.UserStateJson
import com.x8bit.bitwarden.data.auth.repository.model.UserState
import com.x8bit.bitwarden.data.platform.repository.util.toEnvironmentUrlsOrDefault
import com.x8bit.bitwarden.data.vault.datasource.network.model.SyncResponseJson
import com.x8bit.bitwarden.data.vault.repository.model.VaultState
import com.x8bit.bitwarden.ui.platform.base.util.toHexColorRepresentation
@@ -56,6 +57,10 @@ fun UserStateJson.toUserState(
email = accountJson.profile.email,
avatarColorHex = accountJson.profile.avatarColorHex
?: accountJson.profile.userId.toHexColorRepresentation(),
environment = accountJson
.settings
.environmentUrlData
.toEnvironmentUrlsOrDefault(),
isPremium = accountJson.profile.hasPremium == true,
isVaultUnlocked = userId in vaultState.unlockedVaultUserIds,
)

View File

@@ -12,6 +12,8 @@ import kotlinx.parcelize.Parcelize
* @property name The full name of the user (if applicable).
* @property email The email of the user.
* @property avatarColorHex Hex color value for a user's avatar in the "#AARRGGBB" format.
* @property environmentLabel Label for the environment associated with the user's account
* (ex: "bitwarden.com"). This is purely for display purposes.
* @property status The current status of the user's account locally.
*/
@Parcelize
@@ -20,6 +22,7 @@ data class AccountSummary(
val name: String?,
val email: String,
val avatarColorHex: String,
val environmentLabel: String,
val status: Status,
) : Parcelable {

View File

@@ -35,6 +35,7 @@ fun UserState.Account.toAccountSummary(
name = this.name,
email = this.email,
avatarColorHex = this.avatarColorHex,
environmentLabel = this.environment.label,
status = when {
isActive -> AccountSummary.Status.ACTIVE
this.isVaultUnlocked -> AccountSummary.Status.UNLOCKED

View File

@@ -1,9 +1,11 @@
package com.x8bit.bitwarden.data.auth.repository.util
import com.x8bit.bitwarden.data.auth.datasource.disk.model.AccountJson
import com.x8bit.bitwarden.data.auth.datasource.disk.model.EnvironmentUrlDataJson
import com.x8bit.bitwarden.data.auth.datasource.disk.model.UserStateJson
import com.x8bit.bitwarden.data.auth.datasource.network.model.KdfTypeJson
import com.x8bit.bitwarden.data.auth.repository.model.UserState
import com.x8bit.bitwarden.data.platform.repository.model.Environment
import com.x8bit.bitwarden.data.vault.repository.model.VaultState
import io.mockk.every
import io.mockk.mockk
@@ -96,6 +98,7 @@ class UserStateJsonExtensionsTest {
name = "activeName",
email = "activeEmail",
avatarColorHex = "activeAvatarColorHex",
environment = Environment.Eu,
isPremium = false,
isVaultUnlocked = true,
),
@@ -113,7 +116,9 @@ class UserStateJsonExtensionsTest {
every { hasPremium } returns null
},
tokens = mockk(),
settings = mockk(),
settings = AccountJson.Settings(
environmentUrlData = EnvironmentUrlDataJson.DEFAULT_EU,
),
),
),
)
@@ -138,6 +143,7 @@ class UserStateJsonExtensionsTest {
email = "activeEmail",
// This value is calculated from the userId
avatarColorHex = "#ffecbc49",
environment = Environment.Eu,
isPremium = true,
isVaultUnlocked = false,
),
@@ -156,7 +162,9 @@ class UserStateJsonExtensionsTest {
every { hasPremium } returns true
},
tokens = mockk(),
settings = mockk(),
settings = AccountJson.Settings(
environmentUrlData = EnvironmentUrlDataJson.DEFAULT_EU,
),
),
),
)

View File

@@ -354,6 +354,7 @@ private val ACTIVE_ACCOUNT_SUMMARY = AccountSummary(
name = "Active User",
email = "active@bitwarden.com",
avatarColorHex = "#aa00aa",
environmentLabel = "bitwarden.com",
status = AccountSummary.Status.ACTIVE,
)

View File

@@ -59,6 +59,7 @@ class LandingViewModelTest : BaseViewModelTest() {
name = "name",
email = "email",
avatarColorHex = "avatarColorHex",
environment = Environment.Us,
isPremium = true,
isVaultUnlocked = true,
),
@@ -160,6 +161,7 @@ class LandingViewModelTest : BaseViewModelTest() {
name = "name",
email = rememberedEmail,
avatarColorHex = "avatarColorHex",
environment = Environment.Us,
isPremium = true,
isVaultUnlocked = true,
)

View File

@@ -176,6 +176,7 @@ private val ACTIVE_ACCOUNT_SUMMARY = AccountSummary(
name = "Active User",
email = "active@bitwarden.com",
avatarColorHex = "#aa00aa",
environmentLabel = "bitwarden.com",
status = AccountSummary.Status.ACTIVE,
)

View File

@@ -111,6 +111,7 @@ class LoginViewModelTest : BaseViewModelTest() {
name = "name",
email = "email",
avatarColorHex = "avatarColorHex",
environment = Environment.Us,
isPremium = true,
isVaultUnlocked = true,
),

View File

@@ -195,6 +195,7 @@ private val ACTIVE_ACCOUNT_SUMMARY = AccountSummary(
name = "Active User",
email = "active@bitwarden.com",
avatarColorHex = "#aa00aa",
environmentLabel = "bitwarden.com",
status = AccountSummary.Status.ACTIVE,
)
@@ -203,6 +204,7 @@ private val LOCKED_ACCOUNT_SUMMARY = AccountSummary(
name = "Locked User",
email = "locked@bitwarden.com",
avatarColorHex = "#00aaaa",
environmentLabel = "bitwarden.com",
status = AccountSummary.Status.LOCKED,
)

View File

@@ -100,6 +100,7 @@ class VaultUnlockViewModelTest : BaseViewModelTest() {
name = "Other User",
email = "active+test@bitwarden.com",
avatarColorHex = "#00aaaa",
environment = Environment.Us,
isPremium = true,
isVaultUnlocked = true,
),
@@ -117,6 +118,7 @@ class VaultUnlockViewModelTest : BaseViewModelTest() {
name = "Other User",
email = "active+test@bitwarden.com",
avatarColorHex = "#00aaaa",
environmentLabel = "bitwarden.com",
status = AccountSummary.Status.ACTIVE,
),
),
@@ -285,6 +287,7 @@ private val DEFAULT_STATE: VaultUnlockState = VaultUnlockState(
name = "Active User",
email = "active@bitwarden.com",
avatarColorHex = "#aa00aa",
environmentLabel = "bitwarden.com",
status = AccountSummary.Status.ACTIVE,
),
),
@@ -303,6 +306,7 @@ private val DEFAULT_USER_STATE = UserState(
userId = "activeUserId",
name = "Active User",
email = "active@bitwarden.com",
environment = Environment.Us,
avatarColorHex = "#aa00aa",
isPremium = true,
isVaultUnlocked = true,

View File

@@ -2,6 +2,7 @@ package com.x8bit.bitwarden.ui.platform.feature.rootnav
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
import com.x8bit.bitwarden.data.auth.repository.model.UserState
import com.x8bit.bitwarden.data.platform.repository.model.Environment
import com.x8bit.bitwarden.ui.platform.base.BaseViewModelTest
import io.mockk.every
import io.mockk.mockk
@@ -33,6 +34,7 @@ class RootNavViewModelTest : BaseViewModelTest() {
name = "name",
email = "email",
avatarColorHex = "avatarColorHex",
environment = Environment.Us,
isPremium = true,
isVaultUnlocked = true,
),
@@ -54,6 +56,7 @@ class RootNavViewModelTest : BaseViewModelTest() {
name = "name",
email = "email",
avatarColorHex = "avatarColorHex",
environment = Environment.Us,
isPremium = true,
isVaultUnlocked = false,
),

View File

@@ -8,6 +8,7 @@ import com.x8bit.bitwarden.data.auth.repository.AuthRepository
import com.x8bit.bitwarden.data.auth.repository.model.BreachCountResult
import com.x8bit.bitwarden.data.auth.repository.model.UserState
import com.x8bit.bitwarden.data.platform.repository.model.DataState
import com.x8bit.bitwarden.data.platform.repository.model.Environment
import com.x8bit.bitwarden.data.vault.repository.VaultRepository
import com.x8bit.bitwarden.ui.platform.base.BaseViewModelTest
import com.x8bit.bitwarden.ui.platform.base.util.asText
@@ -593,6 +594,7 @@ private val DEFAULT_USER_STATE: UserState = UserState(
name = "Bit",
email = "bitwarden@gmail.com",
avatarColorHex = "#ff00ff",
environment = Environment.Us,
isPremium = true,
isVaultUnlocked = true,
),

View File

@@ -467,6 +467,7 @@ private val ACTIVE_ACCOUNT_SUMMARY = AccountSummary(
name = "Active User",
email = "active@bitwarden.com",
avatarColorHex = "#aa00aa",
environmentLabel = "bitwarden.com",
status = AccountSummary.Status.ACTIVE,
)
@@ -475,6 +476,7 @@ private val LOCKED_ACCOUNT_SUMMARY = AccountSummary(
name = "Locked User",
email = "locked@bitwarden.com",
avatarColorHex = "#00aaaa",
environmentLabel = "bitwarden.com",
status = AccountSummary.Status.LOCKED,
)

View File

@@ -6,6 +6,7 @@ import com.x8bit.bitwarden.data.auth.repository.model.SwitchAccountResult
import com.x8bit.bitwarden.data.auth.repository.model.UserState
import com.x8bit.bitwarden.data.auth.repository.model.UserState.SpecialCircumstance
import com.x8bit.bitwarden.data.platform.repository.model.DataState
import com.x8bit.bitwarden.data.platform.repository.model.Environment
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCipherView
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockFolderView
import com.x8bit.bitwarden.data.vault.repository.VaultRepository
@@ -116,6 +117,7 @@ class VaultViewModelTest : BaseViewModelTest() {
name = "Other User",
email = "active@bitwarden.com",
avatarColorHex = "#00aaaa",
environment = Environment.Us,
isPremium = true,
isVaultUnlocked = true,
),
@@ -132,6 +134,7 @@ class VaultViewModelTest : BaseViewModelTest() {
name = "Other User",
email = "active@bitwarden.com",
avatarColorHex = "#00aaaa",
environmentLabel = "bitwarden.com",
status = AccountSummary.Status.ACTIVE,
),
),
@@ -457,6 +460,7 @@ private val DEFAULT_USER_STATE = UserState(
name = "Active User",
email = "active@bitwarden.com",
avatarColorHex = "#aa00aa",
environment = Environment.Us,
isPremium = true,
isVaultUnlocked = true,
),
@@ -465,6 +469,7 @@ private val DEFAULT_USER_STATE = UserState(
name = "Locked User",
email = "locked@bitwarden.com",
avatarColorHex = "#00aaaa",
environment = Environment.Us,
isPremium = false,
isVaultUnlocked = false,
),
@@ -481,6 +486,7 @@ private fun createMockVaultState(viewState: VaultState.ViewState): VaultState =
name = "Active User",
email = "active@bitwarden.com",
avatarColorHex = "#aa00aa",
environmentLabel = "bitwarden.com",
status = AccountSummary.Status.ACTIVE,
),
AccountSummary(
@@ -488,6 +494,7 @@ private fun createMockVaultState(viewState: VaultState.ViewState): VaultState =
name = "Locked User",
email = "locked@bitwarden.com",
avatarColorHex = "#00aaaa",
environmentLabel = "bitwarden.com",
status = AccountSummary.Status.LOCKED,
),
),

View File

@@ -1,6 +1,8 @@
package com.x8bit.bitwarden.ui.vault.feature.vault.util
import com.x8bit.bitwarden.data.auth.datasource.disk.model.EnvironmentUrlDataJson
import com.x8bit.bitwarden.data.auth.repository.model.UserState
import com.x8bit.bitwarden.data.platform.repository.model.Environment
import com.x8bit.bitwarden.ui.platform.components.model.AccountSummary
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test
@@ -15,6 +17,7 @@ class UserStateExtensionsTest {
name = "activeName",
email = "activeEmail",
avatarColorHex = "activeAvatarColorHex",
environmentLabel = "bitwarden.com",
status = AccountSummary.Status.ACTIVE,
),
AccountSummary(
@@ -22,6 +25,7 @@ class UserStateExtensionsTest {
name = "lockedName",
email = "lockedEmail",
avatarColorHex = "lockedAvatarColorHex",
environmentLabel = "bitwarden.eu",
status = AccountSummary.Status.LOCKED,
),
AccountSummary(
@@ -29,6 +33,7 @@ class UserStateExtensionsTest {
name = "unlockedName",
email = "unlockedEmail",
avatarColorHex = "unlockedAvatarColorHex",
environmentLabel = "vault.qa.bitwarden.pw",
status = AccountSummary.Status.UNLOCKED,
),
),
@@ -40,6 +45,7 @@ class UserStateExtensionsTest {
name = "activeName",
email = "activeEmail",
avatarColorHex = "activeAvatarColorHex",
environment = Environment.Us,
isPremium = true,
isVaultUnlocked = true,
),
@@ -48,6 +54,7 @@ class UserStateExtensionsTest {
name = "lockedName",
email = "lockedEmail",
avatarColorHex = "lockedAvatarColorHex",
environment = Environment.Eu,
isPremium = false,
isVaultUnlocked = false,
),
@@ -56,6 +63,11 @@ class UserStateExtensionsTest {
name = "unlockedName",
email = "unlockedEmail",
avatarColorHex = "unlockedAvatarColorHex",
environment = Environment.SelfHosted(
environmentUrlData = EnvironmentUrlDataJson(
base = "https://vault.qa.bitwarden.pw",
),
),
isPremium = true,
isVaultUnlocked = true,
),
@@ -73,6 +85,7 @@ class UserStateExtensionsTest {
name = "name",
email = "email",
avatarColorHex = "avatarColorHex",
environmentLabel = "bitwarden.com",
status = AccountSummary.Status.ACTIVE,
),
UserState.Account(
@@ -80,6 +93,7 @@ class UserStateExtensionsTest {
name = "name",
email = "email",
avatarColorHex = "avatarColorHex",
environment = Environment.Us,
isPremium = true,
isVaultUnlocked = true,
)
@@ -95,6 +109,7 @@ class UserStateExtensionsTest {
name = "name",
email = "email",
avatarColorHex = "avatarColorHex",
environmentLabel = "bitwarden.com",
status = AccountSummary.Status.LOCKED,
),
UserState.Account(
@@ -102,6 +117,7 @@ class UserStateExtensionsTest {
name = "name",
email = "email",
avatarColorHex = "avatarColorHex",
environment = Environment.Us,
isPremium = false,
isVaultUnlocked = false,
)
@@ -117,6 +133,7 @@ class UserStateExtensionsTest {
name = "name",
email = "email",
avatarColorHex = "avatarColorHex",
environmentLabel = "bitwarden.eu",
status = AccountSummary.Status.UNLOCKED,
),
UserState.Account(
@@ -124,6 +141,7 @@ class UserStateExtensionsTest {
name = "name",
email = "email",
avatarColorHex = "avatarColorHex",
environment = Environment.Eu,
isPremium = true,
isVaultUnlocked = true,
)
@@ -140,6 +158,7 @@ class UserStateExtensionsTest {
name = "name",
email = "email",
avatarColorHex = "avatarColorHex",
environmentLabel = "bitwarden.com",
status = AccountSummary.Status.ACTIVE,
),
UserState(
@@ -150,6 +169,7 @@ class UserStateExtensionsTest {
name = "name",
email = "email",
avatarColorHex = "avatarColorHex",
environment = Environment.Us,
isPremium = true,
isVaultUnlocked = true,
),