From ef6d9bc68c7b7934b4c83c993fc1728c07da02d4 Mon Sep 17 00:00:00 2001 From: David Perez Date: Thu, 27 Feb 2025 15:54:47 -0600 Subject: [PATCH] PM-18677: Policies for disabled organizations apply (#4801) --- .../platform/manager/PolicyManagerImpl.kt | 1 - .../ui/tools/feature/send/SendEmpty.kt | 1 + .../platform/manager/PolicyManagerTest.kt | 26 +++++++++++++++++++ .../network/model/SyncResponseProfileUtil.kt | 3 ++- 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/PolicyManagerImpl.kt b/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/PolicyManagerImpl.kt index bbfba21408..75b714fdac 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/PolicyManagerImpl.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/PolicyManagerImpl.kt @@ -70,7 +70,6 @@ class PolicyManagerImpl( .getOrganizations(userId) ?.filter { it.shouldUsePolicies && - it.isEnabled && it.status >= OrganizationStatusType.ACCEPTED && !isOrganizationExemptFromPolicies(it, type) } diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/send/SendEmpty.kt b/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/send/SendEmpty.kt index fa24a7f81e..6a7d210c11 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/send/SendEmpty.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/send/SendEmpty.kt @@ -41,6 +41,7 @@ fun SendEmpty( modifier = modifier.verticalScroll(rememberScrollState()), ) { if (policyDisablesSend) { + Spacer(modifier = Modifier.height(12.dp)) BitwardenInfoCalloutCard( text = stringResource(id = R.string.send_disabled_warning), modifier = Modifier diff --git a/app/src/test/java/com/x8bit/bitwarden/data/platform/manager/PolicyManagerTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/platform/manager/PolicyManagerTest.kt index 27e6ccc26a..e1be944806 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/platform/manager/PolicyManagerTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/platform/manager/PolicyManagerTest.kt @@ -3,6 +3,7 @@ package com.x8bit.bitwarden.data.platform.manager import app.cash.turbine.test import com.x8bit.bitwarden.data.auth.datasource.disk.AuthDiskSource import com.x8bit.bitwarden.data.auth.datasource.disk.model.UserStateJson +import com.x8bit.bitwarden.data.vault.datasource.network.model.OrganizationType import com.x8bit.bitwarden.data.vault.datasource.network.model.PolicyTypeJson import com.x8bit.bitwarden.data.vault.datasource.network.model.SyncResponseJson import com.x8bit.bitwarden.data.vault.datasource.network.model.createMockOrganization @@ -140,6 +141,31 @@ class PolicyManagerTest { assertTrue(policyManager.getActivePolicies(type = PolicyTypeJson.MASTER_PASSWORD).isEmpty()) } + @Test + fun `getActivePolicies returns active and applied policies for disabled organizations`() { + val userState: UserStateJson = mockk { + every { activeUserId } returns USER_ID + } + val policy = createMockPolicy(organizationId = "mockId-3", isEnabled = true) + every { authDiskSource.userState } returns userState + every { + authDiskSource.getOrganizations(USER_ID) + } returns listOf( + createMockOrganization( + number = 3, + isEnabled = false, + shouldUsePolicies = true, + type = OrganizationType.USER, + ), + ) + every { authDiskSource.getPolicies(USER_ID) } returns listOf(policy) + + assertEquals( + listOf(policy), + policyManager.getActivePolicies(type = PolicyTypeJson.MASTER_PASSWORD), + ) + } + @Test fun `getActivePolicies returns active and applied PasswordGenerator policies`() { val userState: UserStateJson = mockk { diff --git a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseProfileUtil.kt b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseProfileUtil.kt index d2971cbce2..d0972438b2 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseProfileUtil.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseProfileUtil.kt @@ -36,12 +36,13 @@ fun createMockOrganization( isEnabled: Boolean = false, shouldUsePolicies: Boolean = false, shouldManageResetPassword: Boolean = false, + type: OrganizationType = OrganizationType.ADMIN, ): SyncResponseJson.Profile.Organization = SyncResponseJson.Profile.Organization( shouldUsePolicies = shouldUsePolicies, shouldUseKeyConnector = false, keyConnectorUrl = "mockKeyConnectorUrl-$number", - type = OrganizationType.ADMIN, + type = type, seats = 1, isEnabled = isEnabled, providerType = 1,