diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepository.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepository.kt index f6d4386b03..c3dc076404 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepository.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepository.kt @@ -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 + val organizations: List /** * Whether or not the welcome carousel should be displayed, based on the feature flag and diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryImpl.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryImpl.kt index 0e98d159af..d83a0aed6c 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryImpl.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryImpl.kt @@ -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 - get() = activeUserId?.let { authDiskSource.getOrganizations(it) }.orEmpty() + override val organizations: List + 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( diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/model/Organization.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/model/Organization.kt index 244be1bfde..9103d3b116 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/model/Organization.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/model/Organization.kt @@ -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, ) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/util/SyncResponseJsonExtensions.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/util/SyncResponseJsonExtensions.kt index d889c26451..dddb46dffa 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/util/SyncResponseJsonExtensions.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/util/SyncResponseJsonExtensions.kt @@ -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.toOrganizations(): List = - this.map { it.toOrganization() } + this.mapNotNull { it.toOrganization() } /** * Convert the JSON data of the [SyncResponseJson.Policy] object into [PolicyInformation] data. diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/datasource/disk/AuthDiskSourceTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/datasource/disk/AuthDiskSourceTest.kt index 45209dc0ae..566017b24f 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/datasource/disk/AuthDiskSourceTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/datasource/disk/AuthDiskSourceTest.kt @@ -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( diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/UserStateManagerTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/UserStateManagerTest.kt index 11aa85d06a..b2c105c127 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/UserStateManagerTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/manager/UserStateManagerTest.kt @@ -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, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryTest.kt index e318aeedd2..7a1718e83d 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryTest.kt @@ -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(), repository.organizations) + assertEquals(emptyList(), 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 { - 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 { - 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 { - 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 { - 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 { - 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) diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/model/OrganizationUtil.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/model/OrganizationUtil.kt new file mode 100644 index 0000000000..6c72c80d16 --- /dev/null +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/model/OrganizationUtil.kt @@ -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, + ) diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/util/AuthDiskSourceExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/util/AuthDiskSourceExtensionsTest.kt index 2b9da93620..05c753620e 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/util/AuthDiskSourceExtensionsTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/util/AuthDiskSourceExtensionsTest.kt @@ -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( diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/util/SyncResponseJsonExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/util/SyncResponseJsonExtensionsTest.kt index b69546fb75..bdd6e2ff1e 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/util/SyncResponseJsonExtensionsTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/util/SyncResponseJsonExtensionsTest.kt @@ -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), diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/util/UserStateJsonExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/util/UserStateJsonExtensionsTest.kt index 573837bf18..ff8cf33ece 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/util/UserStateJsonExtensionsTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/util/UserStateJsonExtensionsTest.kt @@ -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, ), ), ), diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/PolicyManagerTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/PolicyManagerTest.kt index 46eaa767cd..12c686f309 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/PolicyManagerTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/PolicyManagerTest.kt @@ -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 { 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 diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/event/OrganizationEventManagerTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/event/OrganizationEventManagerTest.kt index e36798de80..65d1a0b0a9 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/event/OrganizationEventManagerTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/event/OrganizationEventManagerTest.kt @@ -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, ) diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/VaultSyncManagerTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/VaultSyncManagerTest.kt index 265fa64ce3..343e5849b7 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/VaultSyncManagerTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/VaultSyncManagerTest.kt @@ -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, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCollectionExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCollectionExtensionsTest.kt index 8a0f029b06..ed9df83b88 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCollectionExtensionsTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCollectionExtensionsTest.kt @@ -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), ), ), ) diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/removepassword/RemovePasswordViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/removepassword/RemovePasswordViewModelTest.kt index 4304d53945..1023a989a0 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/removepassword/RemovePasswordViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/removepassword/RemovePasswordViewModelTest.kt @@ -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, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavViewModelTest.kt index e5b608993a..3d88c55f84 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavViewModelTest.kt @@ -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, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityViewModelTest.kt index 94a2b60e84..511582b6ae 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityViewModelTest.kt @@ -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, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt index 9cce2b7e65..36e086a3c6 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt @@ -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, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/util/CipherViewExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/util/CipherViewExtensionsTest.kt index 97ef6ce07c..98a2ca4262 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/util/CipherViewExtensionsTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/util/CipherViewExtensionsTest.kt @@ -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, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/exportitems/SelectAccountViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/exportitems/SelectAccountViewModelTest.kt index d306f1c65b..98eb1318e6 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/exportitems/SelectAccountViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/exportitems/SelectAccountViewModelTest.kt @@ -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, ), ), ) diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/exportitems/reviewexport/ReviewExportViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/exportitems/reviewexport/ReviewExportViewModelTest.kt index 18ccbffbfa..2a3e1b686b 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/exportitems/reviewexport/ReviewExportViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/exportitems/reviewexport/ReviewExportViewModelTest.kt @@ -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, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/exportitems/verifypassword/VerifyPasswordScreenTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/exportitems/verifypassword/VerifyPasswordScreenTest.kt index 15bc240fc3..d3a003fe1a 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/exportitems/verifypassword/VerifyPasswordScreenTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/exportitems/verifypassword/VerifyPasswordScreenTest.kt @@ -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, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/exportitems/verifypassword/VerifyPasswordViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/exportitems/verifypassword/VerifyPasswordViewModelTest.kt index 18f2568145..b922b82ff8 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/exportitems/verifypassword/VerifyPasswordViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/exportitems/verifypassword/VerifyPasswordViewModelTest.kt @@ -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, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModelTest.kt index 88ff57fe9d..53db75d307 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModelTest.kt @@ -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, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/leaveorganization/LeaveOrganizationViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/leaveorganization/LeaveOrganizationViewModelTest.kt index 11fa013078..d631c6f0f0 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/leaveorganization/LeaveOrganizationViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/leaveorganization/LeaveOrganizationViewModelTest.kt @@ -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( diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationViewModelTest.kt index cacf58ad20..67bd86ba84 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationViewModelTest.kt @@ -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, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/util/VaultMoveToOrganizationExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/util/VaultMoveToOrganizationExtensionsTest.kt index 789da1bb88..9042848fa0 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/util/VaultMoveToOrganizationExtensionsTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/util/VaultMoveToOrganizationExtensionsTest.kt @@ -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 { diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModelTest.kt index e706f3a140..a4c3950703 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModelTest.kt @@ -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, ), ), ), diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/util/UserStateExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/util/UserStateExtensionsTest.kt index 3de647979b..c25bf36a8d 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/util/UserStateExtensionsTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/util/UserStateExtensionsTest.kt @@ -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, diff --git a/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseProfileUtil.kt b/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseProfileUtil.kt index dcb7fc75bb..f6c52e91e9 100644 --- a/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseProfileUtil.kt +++ b/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseProfileUtil.kt @@ -10,7 +10,7 @@ import java.time.ZonedDateTime fun createMockProfile( number: Int, providerOrganizations: List? = 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? = 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 = mapOf(organization.id to requireNotNull(organization.key))