Cleanup organizations (#6391)

This commit is contained in:
David Perez 2026-01-27 11:28:09 -06:00 committed by GitHub
parent 9463cf646b
commit 66316e4bd2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
31 changed files with 324 additions and 537 deletions

View File

@ -1,7 +1,6 @@
package com.x8bit.bitwarden.data.auth.repository
import com.bitwarden.network.model.GetTokenResponseJson
import com.bitwarden.network.model.SyncResponseJson
import com.bitwarden.network.model.TwoFactorDataModel
import com.x8bit.bitwarden.data.auth.datasource.disk.model.ForcePasswordResetReason
import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus
@ -17,6 +16,7 @@ import com.x8bit.bitwarden.data.auth.repository.model.LeaveOrganizationResult
import com.x8bit.bitwarden.data.auth.repository.model.LoginResult
import com.x8bit.bitwarden.data.auth.repository.model.LogoutReason
import com.x8bit.bitwarden.data.auth.repository.model.NewSsoUserResult
import com.x8bit.bitwarden.data.auth.repository.model.Organization
import com.x8bit.bitwarden.data.auth.repository.model.PasswordHintResult
import com.x8bit.bitwarden.data.auth.repository.model.PasswordStrengthResult
import com.x8bit.bitwarden.data.auth.repository.model.PolicyInformation
@ -126,7 +126,7 @@ interface AuthRepository :
/**
* The organization for the active user.
*/
val organizations: List<SyncResponseJson.Profile.Organization>
val organizations: List<Organization>
/**
* Whether or not the welcome carousel should be displayed, based on the feature flag and

View File

@ -72,6 +72,7 @@ import com.x8bit.bitwarden.data.auth.repository.model.LeaveOrganizationResult
import com.x8bit.bitwarden.data.auth.repository.model.LoginResult
import com.x8bit.bitwarden.data.auth.repository.model.LogoutReason
import com.x8bit.bitwarden.data.auth.repository.model.NewSsoUserResult
import com.x8bit.bitwarden.data.auth.repository.model.Organization
import com.x8bit.bitwarden.data.auth.repository.model.PasswordHintResult
import com.x8bit.bitwarden.data.auth.repository.model.PasswordStrengthResult
import com.x8bit.bitwarden.data.auth.repository.model.PolicyInformation
@ -96,6 +97,7 @@ import com.x8bit.bitwarden.data.auth.repository.util.SsoCallbackResult
import com.x8bit.bitwarden.data.auth.repository.util.WebAuthResult
import com.x8bit.bitwarden.data.auth.repository.util.activeUserIdChangesFlow
import com.x8bit.bitwarden.data.auth.repository.util.policyInformation
import com.x8bit.bitwarden.data.auth.repository.util.toOrganizations
import com.x8bit.bitwarden.data.auth.repository.util.toRemovedPasswordUserStateJson
import com.x8bit.bitwarden.data.auth.repository.util.toSdkParams
import com.x8bit.bitwarden.data.auth.repository.util.toUserState
@ -288,8 +290,11 @@ class AuthRepositoryImpl(
?.profile
?.forcePasswordResetReason
override val organizations: List<SyncResponseJson.Profile.Organization>
get() = activeUserId?.let { authDiskSource.getOrganizations(it) }.orEmpty()
override val organizations: List<Organization>
get() = activeUserId
?.let { authDiskSource.getOrganizations(it) }
.orEmpty()
.toOrganizations()
override val showWelcomeCarousel: Boolean
get() = !settingsRepository.hasUserLoggedInOrCreatedAccount
@ -975,8 +980,8 @@ class AuthRepositoryImpl(
val keyConnectorUrl = organizations
.find {
it.shouldUseKeyConnector &&
it.type != OrganizationType.OWNER &&
it.type != OrganizationType.ADMIN
it.role != OrganizationType.OWNER &&
it.role != OrganizationType.ADMIN
}
?.keyConnectorUrl
?: return RemovePasswordResult.Error(

View File

@ -14,14 +14,16 @@ import com.bitwarden.network.model.OrganizationType
* @property keyConnectorUrl The key connector domain (if applicable).
* @property userIsClaimedByOrganization Indicates that the user is claimed by the organization.
* @property limitItemDeletion Indicates that the organization limits item deletion.
* @property shouldUseEvents Indicates if the organization uses tracking events.
*/
data class Organization(
val id: String,
val name: String?,
val name: String,
val shouldManageResetPassword: Boolean,
val shouldUseKeyConnector: Boolean,
val role: OrganizationType,
val keyConnectorUrl: String?,
val userIsClaimedByOrganization: Boolean,
val limitItemDeletion: Boolean = false,
val limitItemDeletion: Boolean,
val shouldUseEvents: Boolean,
)

View File

@ -13,26 +13,30 @@ private val JSON = Json {
}
/**
* Maps the given [SyncResponseJson.Profile.Organization] to an [Organization].
* Maps the given [SyncResponseJson.Profile.Organization] to an [Organization] or `null` if the
* [SyncResponseJson.Profile.Organization.name] is not present.
*/
fun SyncResponseJson.Profile.Organization.toOrganization(): Organization =
Organization(
id = this.id,
name = this.name,
shouldUseKeyConnector = this.shouldUseKeyConnector,
role = this.type,
shouldManageResetPassword = this.permissions.shouldManageResetPassword,
keyConnectorUrl = this.keyConnectorUrl,
userIsClaimedByOrganization = this.userIsClaimedByOrganization,
limitItemDeletion = this.limitItemDeletion,
)
fun SyncResponseJson.Profile.Organization.toOrganization(): Organization? =
this.name?.let {
Organization(
id = this.id,
name = it,
shouldUseKeyConnector = this.shouldUseKeyConnector,
role = this.type,
shouldManageResetPassword = this.permissions.shouldManageResetPassword,
keyConnectorUrl = this.keyConnectorUrl,
userIsClaimedByOrganization = this.userIsClaimedByOrganization,
limitItemDeletion = this.limitItemDeletion,
shouldUseEvents = this.shouldUseEvents,
)
}
/**
* Maps the given list of [SyncResponseJson.Profile.Organization] to a list of
* [Organization]s.
*/
fun List<SyncResponseJson.Profile.Organization>.toOrganizations(): List<Organization> =
this.map { it.toOrganization() }
this.mapNotNull { it.toOrganization() }
/**
* Convert the JSON data of the [SyncResponseJson.Policy] object into [PolicyInformation] data.

View File

@ -11,7 +11,7 @@ import com.bitwarden.network.model.KeyConnectorUserDecryptionOptionsJson
import com.bitwarden.network.model.TrustedDeviceUserDecryptionOptionsJson
import com.bitwarden.network.model.UserDecryptionOptionsJson
import com.bitwarden.network.model.createMockAccountKeysJson
import com.bitwarden.network.model.createMockOrganization
import com.bitwarden.network.model.createMockOrganizationNetwork
import com.bitwarden.network.model.createMockPolicy
import com.x8bit.bitwarden.data.auth.datasource.disk.model.AccountJson
import com.x8bit.bitwarden.data.auth.datasource.disk.model.AccountTokensJson
@ -296,7 +296,7 @@ class AuthDiskSourceTest {
)
authDiskSource.storeOrganizations(
userId = userId,
organizations = listOf(createMockOrganization(1)),
organizations = listOf(createMockOrganizationNetwork(number = 1)),
)
authDiskSource.storePolicies(
userId = userId,
@ -1048,8 +1048,8 @@ class AuthDiskSourceTest {
val organizationsBaseKey = "bwPreferencesStorage:organizations"
val mockUserId = "mockUserId"
val mockOrganizations = listOf(
createMockOrganization(0),
createMockOrganization(1),
createMockOrganizationNetwork(number = 0),
createMockOrganizationNetwork(number = 1),
)
val mockOrganizationsMap = mockOrganizations.associateBy { it.id }
fakeSharedPreferences
@ -1070,8 +1070,8 @@ class AuthDiskSourceTest {
fun `getOrganizationsFlow should react to changes in getOrganizations`() = runTest {
val mockUserId = "mockUserId"
val mockOrganizations = listOf(
createMockOrganization(0),
createMockOrganization(1),
createMockOrganizationNetwork(number = 0),
createMockOrganizationNetwork(number = 1),
)
authDiskSource.getOrganizationsFlow(userId = mockUserId).test {
// The initial values of the Flow and the property are in sync
@ -1092,8 +1092,8 @@ class AuthDiskSourceTest {
val organizationsBaseKey = "bwPreferencesStorage:organizations"
val mockUserId = "mockUserId"
val mockOrganizations = listOf(
createMockOrganization(0),
createMockOrganization(1),
createMockOrganizationNetwork(number = 0),
createMockOrganizationNetwork(number = 1),
)
val mockOrganizationsMap = mockOrganizations.associateBy { it.id }
authDiskSource.storeOrganizations(

View File

@ -7,7 +7,7 @@ import com.bitwarden.data.datasource.disk.model.EnvironmentUrlDataJson
import com.bitwarden.network.model.GetTokenResponseJson
import com.bitwarden.network.model.KdfTypeJson
import com.bitwarden.network.model.PolicyTypeJson
import com.bitwarden.network.model.createMockOrganization
import com.bitwarden.network.model.createMockOrganizationNetwork
import com.bitwarden.network.model.createMockPolicy
import com.x8bit.bitwarden.data.auth.datasource.disk.model.AccountJson
import com.x8bit.bitwarden.data.auth.datasource.disk.model.UserStateJson
@ -301,7 +301,7 @@ private val FIRST_TIME_STATE = FirstTimeState(
showImportLoginsCard = true,
)
private val ORGANIZATIONS = listOf(createMockOrganization(number = 0))
private val ORGANIZATIONS = listOf(createMockOrganizationNetwork(number = 0))
private val USER_ORGANIZATIONS = listOf(
UserOrganizations(
userId = USER_ID_1,

View File

@ -61,7 +61,7 @@ import com.bitwarden.network.model.VerifyEmailTokenRequestJson
import com.bitwarden.network.model.VerifyEmailTokenResponseJson
import com.bitwarden.network.model.createMockAccountKeysJson
import com.bitwarden.network.model.createMockAccountKeysJsonWithNullFields
import com.bitwarden.network.model.createMockOrganization
import com.bitwarden.network.model.createMockOrganizationNetwork
import com.bitwarden.network.model.createMockPolicy
import com.bitwarden.network.service.AccountsService
import com.bitwarden.network.service.DevicesService
@ -99,6 +99,7 @@ import com.x8bit.bitwarden.data.auth.repository.model.LeaveOrganizationResult
import com.x8bit.bitwarden.data.auth.repository.model.LoginResult
import com.x8bit.bitwarden.data.auth.repository.model.LogoutReason
import com.x8bit.bitwarden.data.auth.repository.model.NewSsoUserResult
import com.x8bit.bitwarden.data.auth.repository.model.Organization
import com.x8bit.bitwarden.data.auth.repository.model.PasswordHintResult
import com.x8bit.bitwarden.data.auth.repository.model.PasswordStrengthResult
import com.x8bit.bitwarden.data.auth.repository.model.PrevalidateSsoResult
@ -115,6 +116,7 @@ import com.x8bit.bitwarden.data.auth.repository.model.ValidatePasswordResult
import com.x8bit.bitwarden.data.auth.repository.model.ValidatePinResult
import com.x8bit.bitwarden.data.auth.repository.model.VerifiedOrganizationDomainSsoDetailsResult
import com.x8bit.bitwarden.data.auth.repository.model.VerifyOtpResult
import com.x8bit.bitwarden.data.auth.repository.model.createMockOrganization
import com.x8bit.bitwarden.data.auth.repository.util.DuoCallbackTokenResult
import com.x8bit.bitwarden.data.auth.repository.util.SsoCallbackResult
import com.x8bit.bitwarden.data.auth.repository.util.WebAuthResult
@ -610,7 +612,7 @@ class AuthRepositoryTest {
@Test
fun `organizations should return an empty list when there is no active user`() = runTest {
assertEquals(emptyList<SyncResponseJson.Profile.Organization>(), repository.organizations)
assertEquals(emptyList<Organization>(), repository.organizations)
}
@Test
@ -618,9 +620,9 @@ class AuthRepositoryTest {
fakeAuthDiskSource.userState = SINGLE_USER_STATE_1
fakeAuthDiskSource.storeOrganizations(
userId = USER_ID_1,
organizations = ORGANIZATIONS,
organizations = listOf(createMockOrganizationNetwork(number = 0)),
)
assertEquals(ORGANIZATIONS, repository.organizations)
assertEquals(listOf(createMockOrganization(number = 0)), repository.organizations)
}
@Test
@ -5257,18 +5259,12 @@ class AuthRepositoryTest {
fakeAuthDiskSource.userState = SINGLE_USER_STATE_1
fakeAuthDiskSource.storeUserKey(userId = USER_ID_1, userKey = ENCRYPTED_USER_KEY)
val organizations = listOf(
mockk<SyncResponseJson.Profile.Organization> {
every { id } returns "orgId"
every { name } returns "orgName"
every { permissions } returns mockk {
every { shouldManageResetPassword } returns false
}
every { shouldUseKeyConnector } returns true
every { type } returns OrganizationType.USER
every { keyConnectorUrl } returns null
every { userIsClaimedByOrganization } returns false
every { limitItemDeletion } returns false
},
createMockOrganizationNetwork(
number = 1,
shouldUseKeyConnector = true,
type = OrganizationType.USER,
keyConnectorUrl = null,
),
)
fakeAuthDiskSource.storeOrganizations(userId = USER_ID_1, organizations = organizations)
@ -5288,18 +5284,12 @@ class AuthRepositoryTest {
val url = "www.example.com"
val error = Throwable("Fail!")
val organizations = listOf(
mockk<SyncResponseJson.Profile.Organization> {
every { id } returns "orgId"
every { name } returns "orgName"
every { permissions } returns mockk {
every { shouldManageResetPassword } returns false
}
every { shouldUseKeyConnector } returns true
every { type } returns OrganizationType.USER
every { keyConnectorUrl } returns url
every { userIsClaimedByOrganization } returns false
every { limitItemDeletion } returns false
},
createMockOrganizationNetwork(
number = 1,
shouldUseKeyConnector = true,
type = OrganizationType.USER,
keyConnectorUrl = url,
),
)
fakeAuthDiskSource.storeOrganizations(userId = USER_ID_1, organizations = organizations)
coEvery {
@ -5327,18 +5317,12 @@ class AuthRepositoryTest {
val error = Throwable("Fail!")
val expectedResult = MigrateExistingUserToKeyConnectorResult.Error(error)
val organizations = listOf(
mockk<SyncResponseJson.Profile.Organization> {
every { id } returns "orgId"
every { name } returns "orgName"
every { permissions } returns mockk {
every { shouldManageResetPassword } returns false
}
every { shouldUseKeyConnector } returns true
every { type } returns OrganizationType.USER
every { keyConnectorUrl } returns url
every { userIsClaimedByOrganization } returns false
every { limitItemDeletion } returns false
},
createMockOrganizationNetwork(
number = 1,
shouldUseKeyConnector = true,
type = OrganizationType.USER,
keyConnectorUrl = url,
),
)
fakeAuthDiskSource.storeOrganizations(userId = USER_ID_1, organizations = organizations)
coEvery {
@ -5369,18 +5353,12 @@ class AuthRepositoryTest {
val url = "www.example.com"
val expectedResult = MigrateExistingUserToKeyConnectorResult.WrongPasswordError
val organizations = listOf(
mockk<SyncResponseJson.Profile.Organization> {
every { id } returns "orgId"
every { name } returns "orgName"
every { permissions } returns mockk {
every { shouldManageResetPassword } returns false
}
every { shouldUseKeyConnector } returns true
every { type } returns OrganizationType.USER
every { keyConnectorUrl } returns url
every { userIsClaimedByOrganization } returns false
every { limitItemDeletion } returns false
},
createMockOrganizationNetwork(
number = 1,
shouldUseKeyConnector = true,
type = OrganizationType.USER,
keyConnectorUrl = url,
),
)
fakeAuthDiskSource.storeOrganizations(userId = USER_ID_1, organizations = organizations)
coEvery {
@ -5410,18 +5388,12 @@ class AuthRepositoryTest {
fakeAuthDiskSource.storeUserKey(userId = USER_ID_1, userKey = ENCRYPTED_USER_KEY)
val url = "www.example.com"
val organizations = listOf(
mockk<SyncResponseJson.Profile.Organization> {
every { id } returns "orgId"
every { name } returns "orgName"
every { permissions } returns mockk {
every { shouldManageResetPassword } returns false
}
every { shouldUseKeyConnector } returns true
every { type } returns OrganizationType.USER
every { keyConnectorUrl } returns url
every { userIsClaimedByOrganization } returns false
every { limitItemDeletion } returns false
},
createMockOrganizationNetwork(
number = 1,
shouldUseKeyConnector = true,
type = OrganizationType.USER,
keyConnectorUrl = url,
),
)
fakeAuthDiskSource.storeOrganizations(userId = USER_ID_1, organizations = organizations)
coEvery {
@ -7501,7 +7473,6 @@ class AuthRepositoryTest {
private const val USER_ID_1 = "2a135b23-e1fb-42c9-bec3-573857bc8181"
private const val USER_ID_2 = "b9d32ec0-6497-4582-9798-b350f53bfa02"
private const val ORGANIZATION_IDENTIFIER = "organizationIdentifier"
private val ORGANIZATIONS = listOf(createMockOrganization(number = 0))
private val ACCOUNT_KEYS = createMockAccountKeysJson(number = 1)
private val ACCOUNT_KEYS_WITH_NULL_FIELDS =
createMockAccountKeysJsonWithNullFields(number = 1)

View File

@ -0,0 +1,31 @@
package com.x8bit.bitwarden.data.auth.repository.model
import com.bitwarden.network.model.OrganizationType
/**
* Creates a mock [Organization] with a given parameters.
*/
@Suppress("LongParameterList")
fun createMockOrganization(
number: Int,
id: String = "mockId-$number",
name: String = "mockName-$number",
shouldManageResetPassword: Boolean = false,
shouldUseKeyConnector: Boolean = false,
role: OrganizationType = OrganizationType.ADMIN,
keyConnectorUrl: String? = "mockKeyConnectorUrl-$number",
userIsClaimedByOrganization: Boolean = false,
limitItemDeletion: Boolean = false,
shouldUseEvents: Boolean = false,
): Organization =
Organization(
id = id,
name = name,
shouldManageResetPassword = shouldManageResetPassword,
shouldUseKeyConnector = shouldUseKeyConnector,
role = role,
keyConnectorUrl = keyConnectorUrl,
userIsClaimedByOrganization = userIsClaimedByOrganization,
limitItemDeletion = limitItemDeletion,
shouldUseEvents = shouldUseEvents,
)

View File

@ -1,19 +1,18 @@
package com.x8bit.bitwarden.data.auth.repository.util
import app.cash.turbine.test
import com.bitwarden.network.model.OrganizationType
import com.bitwarden.network.model.createMockOrganization
import com.bitwarden.network.model.createMockOrganizationNetwork
import com.x8bit.bitwarden.data.auth.datasource.disk.AuthDiskSource
import com.x8bit.bitwarden.data.auth.datasource.disk.model.AccountJson
import com.x8bit.bitwarden.data.auth.datasource.disk.model.AccountTokensJson
import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus
import com.x8bit.bitwarden.data.auth.datasource.disk.model.UserStateJson
import com.x8bit.bitwarden.data.auth.datasource.disk.util.FakeAuthDiskSource
import com.x8bit.bitwarden.data.auth.repository.model.Organization
import com.x8bit.bitwarden.data.auth.repository.model.UserAccountTokens
import com.x8bit.bitwarden.data.auth.repository.model.UserKeyConnectorState
import com.x8bit.bitwarden.data.auth.repository.model.UserOrganizations
import com.x8bit.bitwarden.data.auth.repository.model.UserSwitchingData
import com.x8bit.bitwarden.data.auth.repository.model.createMockOrganization
import io.mockk.every
import io.mockk.mockk
import kotlinx.coroutines.test.runTest
@ -171,15 +170,15 @@ class AuthDiskSourceExtensionsTest {
userState = userStateJson
storeOrganizations(
userId = "userId1",
organizations = listOf(createMockOrganization(number = 1)),
organizations = listOf(createMockOrganizationNetwork(number = 1)),
)
storeOrganizations(
userId = "userId2",
organizations = listOf(createMockOrganization(number = 2)),
organizations = listOf(createMockOrganizationNetwork(number = 2)),
)
storeOrganizations(
userId = "userId3",
organizations = listOf(createMockOrganization(number = 3)),
organizations = listOf(createMockOrganizationNetwork(number = 3)),
)
}
@ -188,43 +187,19 @@ class AuthDiskSourceExtensionsTest {
UserOrganizations(
userId = "userId1",
organizations = listOf(
Organization(
id = "mockId-1",
name = "mockName-1",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = "mockKeyConnectorUrl-1",
userIsClaimedByOrganization = false,
),
createMockOrganization(number = 1),
),
),
UserOrganizations(
userId = "userId2",
organizations = listOf(
Organization(
id = "mockId-2",
name = "mockName-2",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = "mockKeyConnectorUrl-2",
userIsClaimedByOrganization = false,
),
createMockOrganization(number = 2),
),
),
UserOrganizations(
userId = "userId3",
organizations = listOf(
Organization(
id = "mockId-3",
name = "mockName-3",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = "mockKeyConnectorUrl-3",
userIsClaimedByOrganization = false,
),
createMockOrganization(number = 3),
),
),
),
@ -355,7 +330,7 @@ class AuthDiskSourceExtensionsTest {
userState = userStateJson
storeOrganizations(
userId = "userId1",
organizations = listOf(createMockOrganization(number = 1)),
organizations = listOf(createMockOrganizationNetwork(number = 1)),
)
}
@ -365,15 +340,7 @@ class AuthDiskSourceExtensionsTest {
UserOrganizations(
userId = "userId1",
organizations = listOf(
Organization(
id = "mockId-1",
name = "mockName-1",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = "mockKeyConnectorUrl-1",
userIsClaimedByOrganization = false,
),
createMockOrganization(number = 1),
),
),
UserOrganizations(
@ -390,7 +357,7 @@ class AuthDiskSourceExtensionsTest {
authDiskSource.storeOrganizations(
userId = "userId2",
organizations = listOf(createMockOrganization(number = 2)),
organizations = listOf(createMockOrganizationNetwork(number = 2)),
)
assertEquals(
@ -398,29 +365,13 @@ class AuthDiskSourceExtensionsTest {
UserOrganizations(
userId = "userId1",
organizations = listOf(
Organization(
id = "mockId-1",
name = "mockName-1",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = "mockKeyConnectorUrl-1",
userIsClaimedByOrganization = false,
),
createMockOrganization(number = 1),
),
),
UserOrganizations(
userId = "userId2",
organizations = listOf(
Organization(
id = "mockId-2",
name = "mockName-2",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = "mockKeyConnectorUrl-2",
userIsClaimedByOrganization = false,
),
createMockOrganization(number = 2),
),
),
UserOrganizations(

View File

@ -2,11 +2,11 @@ package com.x8bit.bitwarden.data.auth.repository.util
import com.bitwarden.network.model.OrganizationType
import com.bitwarden.network.model.PolicyTypeJson
import com.bitwarden.network.model.createMockOrganization
import com.bitwarden.network.model.createMockOrganizationNetwork
import com.bitwarden.network.model.createMockPermissions
import com.bitwarden.network.model.createMockPolicy
import com.x8bit.bitwarden.data.auth.repository.model.Organization
import com.x8bit.bitwarden.data.auth.repository.model.PolicyInformation
import com.x8bit.bitwarden.data.auth.repository.model.createMockOrganization
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.encodeToJsonElement
import kotlinx.serialization.json.jsonObject
@ -18,16 +18,8 @@ class SyncResponseJsonExtensionsTest {
@Test
fun `toOrganization should output the correct organization`() {
assertEquals(
Organization(
id = "mockId-1",
name = "mockName-1",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = "mockKeyConnectorUrl-1",
userIsClaimedByOrganization = false,
),
createMockOrganization(number = 1).toOrganization(),
createMockOrganization(number = 1),
createMockOrganizationNetwork(number = 1).toOrganization(),
)
}
@ -35,28 +27,19 @@ class SyncResponseJsonExtensionsTest {
fun `toOrganizations should output the correct list of organizations`() {
assertEquals(
listOf(
Organization(
id = "mockId-1",
name = "mockName-1",
shouldManageResetPassword = false,
createMockOrganization(
number = 1,
shouldUseKeyConnector = true,
role = OrganizationType.ADMIN,
keyConnectorUrl = "mockKeyConnectorUrl-1",
userIsClaimedByOrganization = false,
),
Organization(
id = "mockId-2",
name = "mockName-2",
createMockOrganization(
number = 2,
shouldManageResetPassword = true,
shouldUseKeyConnector = false,
role = OrganizationType.USER,
keyConnectorUrl = "mockKeyConnectorUrl-2",
userIsClaimedByOrganization = false,
),
),
listOf(
createMockOrganization(number = 1, shouldUseKeyConnector = true),
createMockOrganization(
createMockOrganizationNetwork(number = 1, shouldUseKeyConnector = true),
createMockOrganizationNetwork(
number = 2,
type = OrganizationType.USER,
permissions = createMockPermissions(shouldManageResetPassword = true),

View File

@ -17,12 +17,12 @@ import com.x8bit.bitwarden.data.auth.datasource.disk.model.AccountTokensJson
import com.x8bit.bitwarden.data.auth.datasource.disk.model.ForcePasswordResetReason
import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus
import com.x8bit.bitwarden.data.auth.datasource.disk.model.UserStateJson
import com.x8bit.bitwarden.data.auth.repository.model.Organization
import com.x8bit.bitwarden.data.auth.repository.model.UserAccountTokens
import com.x8bit.bitwarden.data.auth.repository.model.UserKeyConnectorState
import com.x8bit.bitwarden.data.auth.repository.model.UserOrganizations
import com.x8bit.bitwarden.data.auth.repository.model.UserState
import com.x8bit.bitwarden.data.auth.repository.model.VaultUnlockType
import com.x8bit.bitwarden.data.auth.repository.model.createMockOrganization
import com.x8bit.bitwarden.data.auth.util.KdfParamsConstants.DEFAULT_PBKDF2_ITERATIONS
import com.x8bit.bitwarden.data.platform.manager.model.FirstTimeState
import com.x8bit.bitwarden.data.vault.repository.model.VaultUnlockData
@ -373,14 +373,11 @@ class UserStateJsonExtensionsTest {
isVaultUnlocked = true,
needsPasswordReset = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
isBiometricsEnabled = false,
@ -441,14 +438,11 @@ class UserStateJsonExtensionsTest {
UserOrganizations(
userId = "activeUserId",
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
),
@ -488,14 +482,11 @@ class UserStateJsonExtensionsTest {
isVaultUnlocked = false,
needsPasswordReset = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
isBiometricsEnabled = true,
@ -552,14 +543,11 @@ class UserStateJsonExtensionsTest {
UserOrganizations(
userId = "activeUserId",
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
),
@ -600,14 +588,11 @@ class UserStateJsonExtensionsTest {
isVaultUnlocked = false,
needsPasswordReset = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
isBiometricsEnabled = false,
@ -672,14 +657,11 @@ class UserStateJsonExtensionsTest {
UserOrganizations(
userId = "activeUserId",
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
),
@ -720,14 +702,11 @@ class UserStateJsonExtensionsTest {
isVaultUnlocked = false,
needsPasswordReset = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
isBiometricsEnabled = false,
@ -792,14 +771,11 @@ class UserStateJsonExtensionsTest {
UserOrganizations(
userId = "activeUserId",
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
),
@ -840,14 +816,11 @@ class UserStateJsonExtensionsTest {
isVaultUnlocked = false,
needsPasswordReset = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
isBiometricsEnabled = false,
@ -912,14 +885,12 @@ class UserStateJsonExtensionsTest {
UserOrganizations(
userId = "activeUserId",
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
),
@ -959,16 +930,15 @@ class UserStateJsonExtensionsTest {
isVaultUnlocked = false,
needsPasswordReset = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
// Key part of the result #1, this is true or the role is owner or
// admin
shouldManageResetPassword = true,
shouldUseKeyConnector = false,
role = OrganizationType.USER,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
isBiometricsEnabled = false,
@ -1036,14 +1006,13 @@ class UserStateJsonExtensionsTest {
UserOrganizations(
userId = "activeUserId",
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
shouldManageResetPassword = true,
shouldUseKeyConnector = false,
role = OrganizationType.USER,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
),
@ -1247,16 +1216,12 @@ class UserStateJsonExtensionsTest {
isVaultUnlocked = false,
needsPasswordReset = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
// Key part of the result #1, this is true or the role is owner or
// admin
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.USER,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
isBiometricsEnabled = false,
@ -1323,14 +1288,12 @@ class UserStateJsonExtensionsTest {
UserOrganizations(
userId = "activeUserId",
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.USER,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
),
@ -1371,14 +1334,11 @@ class UserStateJsonExtensionsTest {
isVaultUnlocked = false,
needsPasswordReset = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
isBiometricsEnabled = false,
@ -1445,14 +1405,11 @@ class UserStateJsonExtensionsTest {
UserOrganizations(
userId = "activeUserId",
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
),
@ -1493,14 +1450,11 @@ class UserStateJsonExtensionsTest {
isVaultUnlocked = true,
needsPasswordReset = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
isBiometricsEnabled = false,
@ -1561,14 +1515,11 @@ class UserStateJsonExtensionsTest {
UserOrganizations(
userId = "activeUserId",
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
),
@ -1617,14 +1568,11 @@ class UserStateJsonExtensionsTest {
isVaultUnlocked = true,
needsPasswordReset = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
isBiometricsEnabled = false,
@ -1685,14 +1633,11 @@ class UserStateJsonExtensionsTest {
UserOrganizations(
userId = "activeUserId",
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
),

View File

@ -4,7 +4,7 @@ import app.cash.turbine.test
import com.bitwarden.network.model.OrganizationType
import com.bitwarden.network.model.PolicyTypeJson
import com.bitwarden.network.model.SyncResponseJson
import com.bitwarden.network.model.createMockOrganization
import com.bitwarden.network.model.createMockOrganizationNetwork
import com.bitwarden.network.model.createMockPolicy
import com.x8bit.bitwarden.data.auth.datasource.disk.AuthDiskSource
import com.x8bit.bitwarden.data.auth.datasource.disk.model.UserStateJson
@ -42,12 +42,12 @@ class PolicyManagerTest {
val userStateJson = mockk<UserStateJson> {
every { activeUserId } returns USER_ID
}
val organizationsOne = createMockOrganization(
val organizationsOne = createMockOrganizationNetwork(
number = 1,
isEnabled = true,
shouldUsePolicies = true,
)
val organizationsTwo = createMockOrganization(
val organizationsTwo = createMockOrganizationNetwork(
number = 2,
isEnabled = true,
shouldUsePolicies = true,
@ -100,7 +100,7 @@ class PolicyManagerTest {
every {
authDiskSource.getOrganizations(USER_ID)
} returns listOf(
createMockOrganization(
createMockOrganizationNetwork(
number = 3,
isEnabled = true,
),
@ -126,7 +126,7 @@ class PolicyManagerTest {
every {
authDiskSource.getOrganizations(USER_ID)
} returns listOf(
createMockOrganization(
createMockOrganizationNetwork(
number = 3,
isEnabled = false,
),
@ -153,7 +153,7 @@ class PolicyManagerTest {
every {
authDiskSource.getOrganizations(USER_ID)
} returns listOf(
createMockOrganization(
createMockOrganizationNetwork(
number = 3,
isEnabled = false,
shouldUsePolicies = true,
@ -177,7 +177,7 @@ class PolicyManagerTest {
every {
authDiskSource.getOrganizations(USER_ID)
} returns listOf(
createMockOrganization(
createMockOrganizationNetwork(
number = 3,
isEnabled = true,
shouldUsePolicies = true,
@ -205,7 +205,7 @@ class PolicyManagerTest {
every {
authDiskSource.getOrganizations(USER_ID)
} returns listOf(
createMockOrganization(
createMockOrganizationNetwork(
number = 3,
isEnabled = true,
shouldUsePolicies = true,
@ -252,7 +252,7 @@ class PolicyManagerTest {
every {
authDiskSource.getOrganizations(USER_ID)
} returns listOf(
createMockOrganization(
createMockOrganizationNetwork(
number = 3,
isEnabled = true,
shouldUsePolicies = true,
@ -308,7 +308,7 @@ class PolicyManagerTest {
every {
authDiskSource.getOrganizations(USER_ID)
} returns listOf(
createMockOrganization(
createMockOrganizationNetwork(
number = 1,
isEnabled = true,
shouldUsePolicies = true,
@ -338,7 +338,7 @@ class PolicyManagerTest {
every {
authDiskSource.getOrganizations(USER_ID)
} returns listOf(
createMockOrganization(
createMockOrganizationNetwork(
number = 1,
isEnabled = true,
shouldUsePolicies = true,
@ -377,19 +377,19 @@ class PolicyManagerTest {
every {
authDiskSource.getOrganizations(USER_ID)
} returns listOf(
createMockOrganization(
createMockOrganizationNetwork(
number = 1,
isEnabled = true,
shouldUsePolicies = true,
type = OrganizationType.USER,
),
createMockOrganization(
createMockOrganizationNetwork(
number = 2,
isEnabled = true,
shouldUsePolicies = true,
type = OrganizationType.USER,
),
createMockOrganization(
createMockOrganizationNetwork(
number = 3,
isEnabled = true,
shouldUsePolicies = true,
@ -442,13 +442,13 @@ class PolicyManagerTest {
every {
authDiskSource.getOrganizations(USER_ID)
} returns listOf(
createMockOrganization(
createMockOrganizationNetwork(
number = 1,
isEnabled = true,
shouldUsePolicies = false, // This org does NOT use policies
type = OrganizationType.USER,
),
createMockOrganization(
createMockOrganizationNetwork(
number = 2,
isEnabled = true,
shouldUsePolicies = true, // This org uses policies

View File

@ -6,11 +6,11 @@ import com.bitwarden.core.data.util.advanceTimeByAndRunCurrent
import com.bitwarden.core.data.util.asSuccess
import com.bitwarden.network.model.OrganizationEventJson
import com.bitwarden.network.model.OrganizationEventType
import com.bitwarden.network.model.createMockOrganization
import com.bitwarden.network.service.EventService
import com.bitwarden.vault.CipherView
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
import com.x8bit.bitwarden.data.auth.repository.model.AuthState
import com.x8bit.bitwarden.data.auth.repository.model.createMockOrganization
import com.x8bit.bitwarden.data.platform.datasource.disk.EventDiskSource
import com.x8bit.bitwarden.data.platform.manager.model.OrganizationEvent
import com.x8bit.bitwarden.data.util.FakeLifecycleOwner
@ -172,7 +172,7 @@ class OrganizationEventManagerTest {
@Test
fun `trackEvent should do nothing if the cipher does not belong to an organization that uses events`() {
mutableAuthStateFlow.value = AuthState.Authenticated(accessToken = "access-token")
val organization = createMockOrganization(number = 1).copy(shouldUseEvents = true)
val organization = createMockOrganization(number = 1, shouldUseEvents = true)
every { authRepository.organizations } returns listOf(organization)
val cipherView = createMockCipherView(number = 1)
mutableVaultItemStateFlow.value = DataState.Loaded(data = cipherView)
@ -191,7 +191,8 @@ class OrganizationEventManagerTest {
@Test
fun `trackEvent should add the event to disk if the ciphers organization allows it`() {
mutableAuthStateFlow.value = AuthState.Authenticated(accessToken = "access-token")
val organization = createMockOrganization(number = 1).copy(
val organization = createMockOrganization(
number = 1,
id = "mockOrganizationId-1",
shouldUseEvents = true,
)

View File

@ -15,8 +15,8 @@ import com.bitwarden.network.model.createMockCipher
import com.bitwarden.network.model.createMockCollection
import com.bitwarden.network.model.createMockDomains
import com.bitwarden.network.model.createMockFolder
import com.bitwarden.network.model.createMockOrganization
import com.bitwarden.network.model.createMockOrganizationKeys
import com.bitwarden.network.model.createMockOrganizationNetwork
import com.bitwarden.network.model.createMockPolicy
import com.bitwarden.network.model.createMockProfile
import com.bitwarden.network.model.createMockSend
@ -742,7 +742,7 @@ class VaultSyncManagerTest {
)
fakeAuthDiskSource.assertOrganizations(
userId = userId,
organizations = listOf(createMockOrganization(number = 1)),
organizations = listOf(createMockOrganizationNetwork(number = 1)),
)
fakeAuthDiskSource.assertPolicies(
userId = userId,

View File

@ -4,7 +4,7 @@ import com.bitwarden.collections.Collection
import com.bitwarden.collections.CollectionType
import com.bitwarden.network.model.CollectionTypeJson
import com.bitwarden.network.model.SyncResponseJson
import com.bitwarden.network.model.createMockOrganization
import com.bitwarden.network.model.createMockOrganizationNetwork
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCollectionView
import org.junit.Test
import org.junit.jupiter.api.Assertions.assertEquals
@ -147,8 +147,8 @@ class VaultSdkCollectionExtensionsTest {
expected,
list.sortAlphabeticallyByTypeAndOrganization(
userOrganizations = listOf(
createMockOrganization(number = 1),
createMockOrganization(number = 2),
createMockOrganizationNetwork(number = 1),
createMockOrganizationNetwork(number = 2),
),
),
)

View File

@ -10,9 +10,9 @@ import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
import com.x8bit.bitwarden.data.auth.repository.model.LeaveOrganizationResult
import com.x8bit.bitwarden.data.auth.repository.model.Organization
import com.x8bit.bitwarden.data.auth.repository.model.RemovePasswordResult
import com.x8bit.bitwarden.data.auth.repository.model.UserState
import com.x8bit.bitwarden.data.auth.repository.model.createMockOrganization
import com.x8bit.bitwarden.data.platform.manager.model.FirstTimeState
import io.mockk.coEvery
import io.mockk.coVerify
@ -84,36 +84,37 @@ class RemovePasswordViewModelTest : BaseViewModelTest() {
@Test
@Suppress("MaxLineLength")
fun `ContinueClick with input and remove password wrong password error with should show error dialog with message`() = runTest {
val password = "123"
val initialState = DEFAULT_STATE.copy(input = password)
val viewModel = createViewModel(state = initialState)
coEvery {
authRepository.removePassword(masterPassword = password)
} returns RemovePasswordResult.WrongPasswordError
fun `ContinueClick with input and remove password wrong password error with should show error dialog with message`() =
runTest {
val password = "123"
val initialState = DEFAULT_STATE.copy(input = password)
val viewModel = createViewModel(state = initialState)
coEvery {
authRepository.removePassword(masterPassword = password)
} returns RemovePasswordResult.WrongPasswordError
viewModel.stateFlow.test {
assertEquals(initialState, awaitItem())
viewModel.trySendAction(RemovePasswordAction.ContinueClick)
assertEquals(
initialState.copy(
dialogState = RemovePasswordState.DialogState.Loading(
title = BitwardenString.deleting.asText(),
viewModel.stateFlow.test {
assertEquals(initialState, awaitItem())
viewModel.trySendAction(RemovePasswordAction.ContinueClick)
assertEquals(
initialState.copy(
dialogState = RemovePasswordState.DialogState.Loading(
title = BitwardenString.deleting.asText(),
),
),
),
awaitItem(),
)
assertEquals(
initialState.copy(
dialogState = RemovePasswordState.DialogState.Error(
title = BitwardenString.an_error_has_occurred.asText(),
message = BitwardenString.invalid_master_password.asText(),
awaitItem(),
)
assertEquals(
initialState.copy(
dialogState = RemovePasswordState.DialogState.Error(
title = BitwardenString.an_error_has_occurred.asText(),
message = BitwardenString.invalid_master_password.asText(),
),
),
),
awaitItem(),
)
awaitItem(),
)
}
}
}
@Test
fun `ContinueClick with input and remove password success should dismiss dialog`() = runTest {
@ -288,14 +289,12 @@ private val DEFAULT_ACCOUNT = UserState.Account(
needsPasswordReset = false,
isBiometricsEnabled = false,
organizations = listOf(
Organization(
id = "mockId-1",
createMockOrganization(
number = 1,
name = ORGANIZATION_NAME,
shouldManageResetPassword = false,
shouldUseKeyConnector = true,
role = OrganizationType.USER,
keyConnectorUrl = KEY_CONNECTOR_URL,
userIsClaimedByOrganization = false,
),
),
needsMasterPassword = false,

View File

@ -15,8 +15,8 @@ import com.bitwarden.ui.platform.manager.share.model.ShareData
import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
import com.x8bit.bitwarden.data.auth.repository.model.AuthState
import com.x8bit.bitwarden.data.auth.repository.model.Organization
import com.x8bit.bitwarden.data.auth.repository.model.UserState
import com.x8bit.bitwarden.data.auth.repository.model.createMockOrganization
import com.x8bit.bitwarden.data.autofill.model.AutofillSaveItem
import com.x8bit.bitwarden.data.autofill.model.AutofillSelectionData
import com.x8bit.bitwarden.data.credentials.model.CreateCredentialRequest
@ -405,14 +405,13 @@ class RootNavViewModelTest : BaseViewModelTest() {
needsPasswordReset = false,
isBiometricsEnabled = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "orgId",
name = "orgName",
shouldManageResetPassword = false,
shouldUseKeyConnector = true,
role = OrganizationType.USER,
keyConnectorUrl = "bitwarden.com",
userIsClaimedByOrganization = false,
),
),
needsMasterPassword = false,

View File

@ -16,10 +16,10 @@ import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
import com.x8bit.bitwarden.data.auth.repository.model.LogoutReason
import com.x8bit.bitwarden.data.auth.repository.model.Organization
import com.x8bit.bitwarden.data.auth.repository.model.PolicyInformation
import com.x8bit.bitwarden.data.auth.repository.model.UserFingerprintResult
import com.x8bit.bitwarden.data.auth.repository.model.UserState
import com.x8bit.bitwarden.data.auth.repository.model.createMockOrganization
import com.x8bit.bitwarden.data.platform.error.NoActiveUserException
import com.x8bit.bitwarden.data.platform.manager.FirstTimeActionManager
import com.x8bit.bitwarden.data.platform.manager.PolicyManager
@ -914,41 +914,32 @@ private val DEFAULT_USER_STATE = UserState(
needsPasswordReset = false,
isBiometricsEnabled = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationUser",
name = "Organization User",
shouldUseKeyConnector = false,
shouldManageResetPassword = false,
role = OrganizationType.USER,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
Organization(
createMockOrganization(
number = 1,
id = "organizationAdmin",
name = "Organization Admin",
shouldUseKeyConnector = false,
shouldManageResetPassword = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
Organization(
createMockOrganization(
number = 1,
id = "organizationOwner",
name = "Organization Owner",
shouldUseKeyConnector = false,
shouldManageResetPassword = false,
role = OrganizationType.OWNER,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
Organization(
createMockOrganization(
number = 1,
id = "organizationCustom",
name = "Organization Owner",
shouldUseKeyConnector = false,
shouldManageResetPassword = false,
role = OrganizationType.CUSTOM,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
needsMasterPassword = false,

View File

@ -13,7 +13,6 @@ import com.bitwarden.core.data.manager.toast.ToastManager
import com.bitwarden.core.data.repository.model.DataState
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
import com.bitwarden.data.repository.model.Environment
import com.bitwarden.network.model.OrganizationType
import com.bitwarden.network.model.PolicyTypeJson
import com.bitwarden.network.model.createMockPolicy
import com.bitwarden.send.SendView
@ -33,11 +32,11 @@ import com.bitwarden.vault.UriMatchType
import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus
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.Organization
import com.x8bit.bitwarden.data.auth.repository.model.UserState
import com.x8bit.bitwarden.data.auth.repository.model.ValidatePasswordResult
import com.x8bit.bitwarden.data.auth.repository.model.ValidatePinResult
import com.x8bit.bitwarden.data.auth.repository.model.VaultUnlockType
import com.x8bit.bitwarden.data.auth.repository.model.createMockOrganization
import com.x8bit.bitwarden.data.autofill.model.AutofillSaveItem
import com.x8bit.bitwarden.data.autofill.model.AutofillSelectionData
import com.x8bit.bitwarden.data.credentials.manager.BitwardenCredentialManager
@ -5031,15 +5030,11 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
isVaultUnlocked = false,
needsPasswordReset = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
limitItemDeletion = false,
),
),
isBiometricsEnabled = true,

View File

@ -2,7 +2,6 @@ package com.x8bit.bitwarden.ui.vault.feature.addedit.util
import com.bitwarden.collections.CollectionType
import com.bitwarden.data.repository.model.Environment
import com.bitwarden.network.model.OrganizationType
import com.bitwarden.ui.platform.resource.BitwardenString
import com.bitwarden.ui.util.asText
import com.bitwarden.vault.CardView
@ -19,9 +18,9 @@ import com.bitwarden.vault.SecureNoteType
import com.bitwarden.vault.SecureNoteView
import com.bitwarden.vault.SshKeyView
import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus
import com.x8bit.bitwarden.data.auth.repository.model.Organization
import com.x8bit.bitwarden.data.auth.repository.model.UserState
import com.x8bit.bitwarden.data.auth.repository.model.VaultUnlockType
import com.x8bit.bitwarden.data.auth.repository.model.createMockOrganization
import com.x8bit.bitwarden.data.platform.manager.model.FirstTimeState
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCipherView
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCollectionView
@ -702,14 +701,11 @@ class CipherViewExtensionsTest {
isVaultUnlocked = false,
needsPasswordReset = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "mockOrganizationId-1",
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
isBiometricsEnabled = true,

View File

@ -4,7 +4,6 @@ import app.cash.turbine.test
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
import com.bitwarden.cxf.model.ImportCredentialsRequestData
import com.bitwarden.data.repository.model.Environment
import com.bitwarden.network.model.OrganizationType
import com.bitwarden.network.model.PolicyTypeJson
import com.bitwarden.network.model.SyncResponseJson
import com.bitwarden.network.model.createMockPolicy
@ -13,8 +12,8 @@ import com.bitwarden.ui.platform.resource.BitwardenString
import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
import com.x8bit.bitwarden.data.auth.repository.model.Organization
import com.x8bit.bitwarden.data.auth.repository.model.UserState
import com.x8bit.bitwarden.data.auth.repository.model.createMockOrganization
import com.x8bit.bitwarden.data.platform.manager.PolicyManager
import com.x8bit.bitwarden.data.platform.manager.SpecialCircumstanceManager
import com.x8bit.bitwarden.data.platform.manager.model.FirstTimeState
@ -166,14 +165,11 @@ class SelectAccountViewModelTest : BaseViewModelTest() {
val accountInOrg = DEFAULT_ACCOUNT.copy(
isExportable = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = organizationId,
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
)
@ -200,14 +196,11 @@ class SelectAccountViewModelTest : BaseViewModelTest() {
val organizationId = "mockOrganizationId-1"
val accountInOrg = DEFAULT_ACCOUNT.copy(
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = organizationId,
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
)

View File

@ -17,8 +17,8 @@ import com.bitwarden.vault.CipherListViewType
import com.bitwarden.vault.DecryptCipherListResult
import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
import com.x8bit.bitwarden.data.auth.repository.model.Organization
import com.x8bit.bitwarden.data.auth.repository.model.UserState
import com.x8bit.bitwarden.data.auth.repository.model.createMockOrganization
import com.x8bit.bitwarden.data.platform.manager.PolicyManager
import com.x8bit.bitwarden.data.platform.manager.SpecialCircumstanceManager
import com.x8bit.bitwarden.data.platform.manager.model.FirstTimeState
@ -443,14 +443,12 @@ private val DEFAULT_USER_STATE = UserState(
needsPasswordReset = false,
isBiometricsEnabled = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "mockOrganizationId-1",
name = "Organization User",
shouldUseKeyConnector = false,
shouldManageResetPassword = false,
role = OrganizationType.USER,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
needsMasterPassword = false,

View File

@ -17,8 +17,8 @@ import com.bitwarden.network.model.OrganizationType
import com.bitwarden.ui.platform.resource.BitwardenString
import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus
import com.x8bit.bitwarden.data.auth.repository.model.Organization
import com.x8bit.bitwarden.data.auth.repository.model.UserState
import com.x8bit.bitwarden.data.auth.repository.model.createMockOrganization
import com.x8bit.bitwarden.data.platform.manager.model.FirstTimeState
import com.x8bit.bitwarden.ui.platform.base.BitwardenComposeTest
import com.x8bit.bitwarden.ui.vault.feature.exportitems.model.AccountSelectionListItem
@ -246,14 +246,12 @@ private val DEFAULT_USER_STATE = UserState(
needsPasswordReset = false,
isBiometricsEnabled = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = DEFAULT_ORGANIZATION_ID,
name = "Organization User",
shouldUseKeyConnector = false,
shouldManageResetPassword = false,
role = OrganizationType.USER,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
needsMasterPassword = false,

View File

@ -11,12 +11,12 @@ import com.bitwarden.ui.platform.resource.BitwardenString
import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
import com.x8bit.bitwarden.data.auth.repository.model.Organization
import com.x8bit.bitwarden.data.auth.repository.model.RequestOtpResult
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.ValidatePasswordResult
import com.x8bit.bitwarden.data.auth.repository.model.VerifyOtpResult
import com.x8bit.bitwarden.data.auth.repository.model.createMockOrganization
import com.x8bit.bitwarden.data.platform.manager.PolicyManager
import com.x8bit.bitwarden.data.platform.manager.model.FirstTimeState
import com.x8bit.bitwarden.data.vault.repository.VaultRepository
@ -731,14 +731,12 @@ private val DEFAULT_USER_STATE = UserState(
needsPasswordReset = false,
isBiometricsEnabled = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = DEFAULT_ORGANIZATION_ID,
name = "Organization User",
shouldUseKeyConnector = false,
shouldManageResetPassword = false,
role = OrganizationType.USER,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
needsMasterPassword = false,
@ -762,14 +760,12 @@ private val DEFAULT_USER_STATE = UserState(
needsPasswordReset = false,
isBiometricsEnabled = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = DEFAULT_ORGANIZATION_ID,
name = "Organization User Two",
shouldUseKeyConnector = false,
shouldManageResetPassword = false,
role = OrganizationType.USER,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
needsMasterPassword = false,

View File

@ -27,8 +27,8 @@ import com.bitwarden.vault.FolderView
import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus
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.Organization
import com.x8bit.bitwarden.data.auth.repository.model.UserState
import com.x8bit.bitwarden.data.auth.repository.model.createMockOrganization
import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager
import com.x8bit.bitwarden.data.platform.manager.clipboard.BitwardenClipboardManager
import com.x8bit.bitwarden.data.platform.manager.event.OrganizationEventManager
@ -2403,11 +2403,10 @@ class VaultItemViewModelTest : BaseViewModelTest() {
accounts = listOf(
DEFAULT_USER_ACCOUNT.copy(
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "mockOrganizationId",
name = "mockOrganizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.OWNER,
keyConnectorUrl = null,
userIsClaimedByOrganization = true,
@ -2466,11 +2465,10 @@ class VaultItemViewModelTest : BaseViewModelTest() {
accounts = listOf(
DEFAULT_USER_ACCOUNT.copy(
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "mockOrganizationId",
name = "mockOrganizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.OWNER,
keyConnectorUrl = null,
userIsClaimedByOrganization = true,
@ -2528,14 +2526,12 @@ class VaultItemViewModelTest : BaseViewModelTest() {
accounts = listOf(
DEFAULT_USER_ACCOUNT.copy(
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "mockOrganizationId",
name = "mockOrganizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.OWNER,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
),
@ -2803,14 +2799,12 @@ class VaultItemViewModelTest : BaseViewModelTest() {
needsPasswordReset = false,
isBiometricsEnabled = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organiationId",
name = "Test Organization",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.USER,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
needsMasterPassword = false,

View File

@ -11,10 +11,10 @@ import com.bitwarden.ui.platform.resource.BitwardenString
import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
import com.x8bit.bitwarden.data.auth.repository.model.Organization
import com.x8bit.bitwarden.data.auth.repository.model.RevokeFromOrganizationResult
import com.x8bit.bitwarden.data.auth.repository.model.UserState
import com.x8bit.bitwarden.data.auth.repository.model.VaultUnlockType
import com.x8bit.bitwarden.data.auth.repository.model.createMockOrganization
import com.x8bit.bitwarden.data.platform.manager.event.OrganizationEventManager
import com.x8bit.bitwarden.data.platform.manager.model.FirstTimeState
import com.x8bit.bitwarden.data.platform.manager.model.OrganizationEvent
@ -267,15 +267,12 @@ class LeaveOrganizationViewModelTest : BaseViewModelTest() {
private const val ORGANIZATION_ID = "organization-id-1"
private const val ORGANIZATION_NAME = "Test Organization"
private val DEFAULT_ORGANIZATION = Organization(
private val DEFAULT_ORGANIZATION = createMockOrganization(
number = 1,
id = ORGANIZATION_ID,
name = ORGANIZATION_NAME,
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.USER,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
limitItemDeletion = false,
)
private val DEFAULT_USER_STATE = UserState(

View File

@ -5,7 +5,6 @@ import app.cash.turbine.test
import com.bitwarden.collections.CollectionView
import com.bitwarden.core.data.repository.model.DataState
import com.bitwarden.data.repository.model.Environment
import com.bitwarden.network.model.OrganizationType
import com.bitwarden.ui.platform.base.BaseViewModelTest
import com.bitwarden.ui.platform.components.snackbar.model.BitwardenSnackbarData
import com.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager
@ -15,8 +14,8 @@ import com.bitwarden.ui.util.concat
import com.bitwarden.vault.CipherView
import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
import com.x8bit.bitwarden.data.auth.repository.model.Organization
import com.x8bit.bitwarden.data.auth.repository.model.UserState
import com.x8bit.bitwarden.data.auth.repository.model.createMockOrganization
import com.x8bit.bitwarden.data.platform.manager.model.FirstTimeState
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCipherView
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCollectionView
@ -523,32 +522,23 @@ private val DEFAULT_USER_STATE = UserState(
isBiometricsEnabled = false,
needsMasterPassword = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "mockOrganizationId-1",
name = "mockOrganizationName-1",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
Organization(
createMockOrganization(
number = 1,
id = "mockOrganizationId-2",
name = "mockOrganizationName-2",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
Organization(
createMockOrganization(
number = 1,
id = "mockOrganizationId-3",
name = "mockOrganizationName-3",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
trustedDevice = null,

View File

@ -1,12 +1,11 @@
package com.x8bit.bitwarden.ui.vault.feature.movetoorganization.util
import com.bitwarden.data.repository.model.Environment
import com.bitwarden.network.model.OrganizationType
import com.bitwarden.ui.platform.resource.BitwardenString
import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus
import com.x8bit.bitwarden.data.auth.repository.model.Organization
import com.x8bit.bitwarden.data.auth.repository.model.UserState
import com.x8bit.bitwarden.data.auth.repository.model.createMockOrganization
import com.x8bit.bitwarden.data.platform.manager.model.FirstTimeState
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCipherView
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCollectionView
@ -102,32 +101,23 @@ private fun createMockUserState(hasOrganizations: Boolean = true): UserState =
needsMasterPassword = false,
organizations = if (hasOrganizations) {
listOf(
Organization(
createMockOrganization(
number = 1,
id = "mockOrganizationId-1",
name = "mockOrganizationName-1",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
Organization(
createMockOrganization(
number = 1,
id = "mockOrganizationId-2",
name = "mockOrganizationName-2",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
Organization(
createMockOrganization(
number = 1,
id = "mockOrganizationId-3",
name = "mockOrganizationName-3",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
)
} else {

View File

@ -7,7 +7,6 @@ import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
import com.bitwarden.data.datasource.disk.model.FlightRecorderDataSet
import com.bitwarden.data.repository.model.Environment
import com.bitwarden.data.repository.util.baseIconUrl
import com.bitwarden.network.model.OrganizationType
import com.bitwarden.network.model.PolicyTypeJson
import com.bitwarden.network.model.SyncResponseJson
import com.bitwarden.network.model.createMockPolicy
@ -23,11 +22,11 @@ import com.bitwarden.vault.CipherType
import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
import com.x8bit.bitwarden.data.auth.repository.model.LogoutReason
import com.x8bit.bitwarden.data.auth.repository.model.Organization
import com.x8bit.bitwarden.data.auth.repository.model.SwitchAccountResult
import com.x8bit.bitwarden.data.auth.repository.model.UpdateKdfMinimumsResult
import com.x8bit.bitwarden.data.auth.repository.model.UserState
import com.x8bit.bitwarden.data.auth.repository.model.ValidatePasswordResult
import com.x8bit.bitwarden.data.auth.repository.model.createMockOrganization
import com.x8bit.bitwarden.data.autofill.manager.browser.BrowserAutofillDialogManager
import com.x8bit.bitwarden.data.platform.manager.CredentialExchangeRegistryManager
import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager
@ -340,14 +339,11 @@ class VaultViewModelTest : BaseViewModelTest() {
isBiometricsEnabled = false,
needsMasterPassword = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organiationId",
name = "Test Organization",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
trustedDevice = null,
@ -429,14 +425,11 @@ class VaultViewModelTest : BaseViewModelTest() {
isBiometricsEnabled = false,
needsMasterPassword = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "Test Organization",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
trustedDevice = null,
@ -960,14 +953,11 @@ class VaultViewModelTest : BaseViewModelTest() {
accounts = listOf(
DEFAULT_USER_STATE.accounts[0].copy(
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "testOrganizationId",
name = "Test Organization",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
),

View File

@ -2,11 +2,10 @@ package com.x8bit.bitwarden.ui.vault.feature.vault.util
import com.bitwarden.data.datasource.disk.model.EnvironmentUrlDataJson
import com.bitwarden.data.repository.model.Environment
import com.bitwarden.network.model.OrganizationType
import com.bitwarden.ui.platform.components.account.model.AccountSummary
import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus
import com.x8bit.bitwarden.data.auth.repository.model.Organization
import com.x8bit.bitwarden.data.auth.repository.model.UserState
import com.x8bit.bitwarden.data.auth.repository.model.createMockOrganization
import com.x8bit.bitwarden.data.platform.manager.model.FirstTimeState
import com.x8bit.bitwarden.ui.vault.feature.vault.model.VaultFilterData
import com.x8bit.bitwarden.ui.vault.feature.vault.model.VaultFilterType
@ -76,14 +75,11 @@ class UserStateExtensionsTest {
isBiometricsEnabled = false,
needsMasterPassword = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
trustedDevice = null,
@ -106,14 +102,11 @@ class UserStateExtensionsTest {
isBiometricsEnabled = false,
needsMasterPassword = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
trustedDevice = null,
@ -140,14 +133,11 @@ class UserStateExtensionsTest {
isBiometricsEnabled = false,
needsMasterPassword = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
trustedDevice = null,
@ -174,14 +164,11 @@ class UserStateExtensionsTest {
isBiometricsEnabled = false,
needsMasterPassword = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
trustedDevice = null,
@ -223,14 +210,11 @@ class UserStateExtensionsTest {
isBiometricsEnabled = false,
needsMasterPassword = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
trustedDevice = null,
@ -270,14 +254,11 @@ class UserStateExtensionsTest {
isBiometricsEnabled = false,
needsMasterPassword = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
trustedDevice = null,
@ -321,14 +302,11 @@ class UserStateExtensionsTest {
isBiometricsEnabled = false,
needsMasterPassword = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId",
name = "organizationName",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
trustedDevice = null,
@ -403,23 +381,17 @@ class UserStateExtensionsTest {
isBiometricsEnabled = false,
needsMasterPassword = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId-B",
name = "Organization B",
shouldUseKeyConnector = false,
shouldManageResetPassword = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
Organization(
createMockOrganization(
number = 1,
id = "organizationId-A",
name = "Organization A",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
trustedDevice = null,
@ -466,23 +438,17 @@ class UserStateExtensionsTest {
isBiometricsEnabled = false,
needsMasterPassword = false,
organizations = listOf(
Organization(
createMockOrganization(
number = 1,
id = "organizationId-B",
name = "Organization B",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
Organization(
createMockOrganization(
number = 1,
id = "organizationId-A",
name = "Organization A",
shouldManageResetPassword = false,
shouldUseKeyConnector = false,
role = OrganizationType.ADMIN,
keyConnectorUrl = null,
userIsClaimedByOrganization = false,
),
),
trustedDevice = null,

View File

@ -10,7 +10,7 @@ import java.time.ZonedDateTime
fun createMockProfile(
number: Int,
providerOrganizations: List<SyncResponseJson.Profile.Organization>? = listOf(
createMockOrganization(number = number),
createMockOrganizationNetwork(number = number),
),
isPremiumFromOrganization: Boolean = false,
shouldForcePasswordReset: Boolean = false,
@ -23,7 +23,7 @@ fun createMockProfile(
culture: String? = "mockCulture-$number",
name: String? = "mockName-$number",
organizations: List<SyncResponseJson.Profile.Organization>? = listOf(
createMockOrganization(number = number),
createMockOrganizationNetwork(number = number),
),
shouldUseKeyConnector: Boolean = false,
id: String = "mockId-$number",
@ -62,7 +62,7 @@ fun createMockProfile(
/**
* Create a mock [SyncResponseJson.Profile.Organization] with a given [number].
*/
fun createMockOrganization(
fun createMockOrganizationNetwork(
number: Int,
shouldUsePolicies: Boolean = false,
shouldUseKeyConnector: Boolean = false,
@ -137,7 +137,9 @@ fun createMockOrganization(
*/
fun createMockOrganizationKeys(
number: Int,
organization: SyncResponseJson.Profile.Organization = createMockOrganization(number = number),
organization: SyncResponseJson.Profile.Organization = createMockOrganizationNetwork(
number = number,
),
): Map<String, String> =
mapOf(organization.id to requireNotNull(organization.key))