[PM-28467] Add revisionDate to policy JSON model (#6228)

This commit is contained in:
Patrick Honkonen 2025-12-04 13:22:23 -05:00 committed by GitHub
parent 02733f785b
commit 4905358adb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 39 additions and 26 deletions

View File

@ -7,8 +7,8 @@ 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.SyncResponseJson
import com.bitwarden.network.model.createMockOrganization
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
import com.x8bit.bitwarden.data.auth.datasource.disk.util.FakeAuthDiskSource
@ -259,7 +259,7 @@ class UserStateManagerTest {
@Test
fun `userStateFlow should update isExportable when getUserPolicies returns policies`() =
runTest {
val policy = SyncResponseJson.Policy(
val policy = createMockPolicy(
id = "policyId",
organizationId = "mockId-1",
type = PolicyTypeJson.DISABLE_PERSONAL_VAULT_EXPORT,

View File

@ -9,6 +9,7 @@ import com.bitwarden.network.model.OrganizationType
import com.bitwarden.network.model.PolicyTypeJson
import com.bitwarden.network.model.SyncResponseJson
import com.bitwarden.network.model.TrustedDeviceUserDecryptionOptionsJson
import com.bitwarden.network.model.createMockPolicy
import com.bitwarden.network.model.UserDecryptionJson
import com.bitwarden.network.model.UserDecryptionOptionsJson
import com.x8bit.bitwarden.data.auth.datasource.disk.model.AccountJson
@ -1586,7 +1587,7 @@ class UserStateJsonExtensionsTest {
firstTimeState = FirstTimeState(showImportLoginsCard = true),
getUserPolicies = { _, _ ->
listOf(
SyncResponseJson.Policy(
createMockPolicy(
id = "policyId",
organizationId = "organizationId",
type = PolicyTypeJson.DISABLE_PERSONAL_VAULT_EXPORT,
@ -1710,7 +1711,7 @@ class UserStateJsonExtensionsTest {
firstTimeState = FirstTimeState(showImportLoginsCard = true),
getUserPolicies = { _, _ ->
listOf(
SyncResponseJson.Policy(
createMockPolicy(
id = "policyId",
organizationId = "organizationId",
type = PolicyTypeJson.DISABLE_PERSONAL_VAULT_EXPORT,

View File

@ -4,6 +4,7 @@ import app.cash.turbine.test
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
import com.bitwarden.network.model.PolicyTypeJson
import com.bitwarden.network.model.SyncResponseJson
import com.bitwarden.network.model.createMockPolicy
import com.x8bit.bitwarden.data.auth.repository.model.PolicyInformation
import com.x8bit.bitwarden.data.platform.manager.PolicyManager
import io.mockk.every
@ -81,7 +82,7 @@ class PolicyManagerExtensionsTest {
}
}
private val MASTER_PASSWORD_POLICY = SyncResponseJson.Policy(
private val MASTER_PASSWORD_POLICY = createMockPolicy(
organizationId = "organizationId",
id = "master_password_id",
type = PolicyTypeJson.MASTER_PASSWORD,
@ -109,7 +110,7 @@ private val MASTER_PASSWORD_POLICY_INFO = PolicyInformation.MasterPassword(
enforceOnLogin = true,
)
private val PASSWORD_GENERATOR_POLICY = SyncResponseJson.Policy(
private val PASSWORD_GENERATOR_POLICY = createMockPolicy(
organizationId = "organizationId",
id = "password_generator_id",
type = PolicyTypeJson.PASSWORD_GENERATOR,

View File

@ -10,7 +10,7 @@ import com.bitwarden.cxf.model.CredentialExchangeVersion
import com.bitwarden.network.model.ImportCiphersJsonRequest
import com.bitwarden.network.model.ImportCiphersResponseJson
import com.bitwarden.network.model.PolicyTypeJson
import com.bitwarden.network.model.SyncResponseJson
import com.bitwarden.network.model.createMockPolicy
import com.bitwarden.network.service.CiphersService
import com.bitwarden.network.util.base64UrlDecodeOrNull
import com.bitwarden.vault.Cipher
@ -358,7 +358,7 @@ class CredentialExchangeImportManagerTest {
every {
policyManager.getActivePolicies(PolicyTypeJson.RESTRICT_ITEM_TYPES)
} returns listOf(
SyncResponseJson.Policy(
createMockPolicy(
id = "mockId-1",
organizationId = "mockId-1",
type = PolicyTypeJson.RESTRICT_ITEM_TYPES,
@ -448,7 +448,7 @@ class CredentialExchangeImportManagerTest {
every {
policyManager.getActivePolicies(PolicyTypeJson.RESTRICT_ITEM_TYPES)
} returns listOf(
SyncResponseJson.Policy(
createMockPolicy(
id = "mockId-1",
organizationId = "mockId-1",
type = PolicyTypeJson.RESTRICT_ITEM_TYPES,
@ -497,7 +497,7 @@ class CredentialExchangeImportManagerTest {
every {
policyManager.getActivePolicies(PolicyTypeJson.RESTRICT_ITEM_TYPES)
} returns listOf(
SyncResponseJson.Policy(
createMockPolicy(
id = "mockId-1",
organizationId = "mockId-1",
type = PolicyTypeJson.RESTRICT_ITEM_TYPES,

View File

@ -10,6 +10,7 @@ import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
import com.bitwarden.data.repository.model.Environment
import com.bitwarden.network.model.PolicyTypeJson
import com.bitwarden.network.model.SyncResponseJson
import com.bitwarden.network.model.createMockPolicy
import com.bitwarden.send.SendType
import com.bitwarden.ui.platform.base.BaseViewModelTest
import com.bitwarden.ui.platform.components.snackbar.model.BitwardenSnackbarData
@ -189,7 +190,7 @@ class SearchViewModelTest : BaseViewModelTest() {
every {
policyManager.getActivePolicies(type = PolicyTypeJson.PERSONAL_OWNERSHIP)
} returns listOf(
SyncResponseJson.Policy(
createMockPolicy(
organizationId = "Test Org",
id = "testId",
type = PolicyTypeJson.PERSONAL_OWNERSHIP,
@ -1677,7 +1678,7 @@ class SearchViewModelTest : BaseViewModelTest() {
)
mutableActivePoliciesFlow.emit(
listOf(
SyncResponseJson.Policy(
createMockPolicy(
organizationId = "Test Organization",
id = "testId",
type = PolicyTypeJson.RESTRICT_ITEM_TYPES,

View File

@ -222,7 +222,7 @@ class GeneratorViewModelTest : BaseViewModelTest() {
"useLower" to JsonPrimitive(true),
)
val policies = listOf(
SyncResponseJson.Policy(
createMockPolicy(
organizationId = "organizationId",
id = "id",
type = PolicyTypeJson.PASSWORD_GENERATOR,

View File

@ -6,7 +6,7 @@ import app.cash.turbine.test
import com.bitwarden.core.data.repository.model.DataState
import com.bitwarden.data.repository.model.Environment
import com.bitwarden.network.model.PolicyTypeJson
import com.bitwarden.network.model.SyncResponseJson
import com.bitwarden.network.model.createMockPolicy
import com.bitwarden.send.SendView
import com.bitwarden.ui.platform.base.BaseViewModelTest
import com.bitwarden.ui.platform.components.snackbar.model.BitwardenSnackbarData
@ -127,7 +127,7 @@ class AddEditSendViewModelTest : BaseViewModelTest() {
every {
policyManager.getActivePolicies(type = PolicyTypeJson.SEND_OPTIONS)
} returns listOf(
SyncResponseJson.Policy(
createMockPolicy(
id = "123",
type = PolicyTypeJson.SEND_OPTIONS,
isEnabled = true,

View File

@ -15,7 +15,7 @@ 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.SyncResponseJson
import com.bitwarden.network.model.createMockPolicy
import com.bitwarden.send.SendView
import com.bitwarden.ui.platform.base.BaseViewModelTest
import com.bitwarden.ui.platform.components.snackbar.model.BitwardenSnackbarData
@ -304,7 +304,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
every {
policyManager.getActivePolicies(type = PolicyTypeJson.PERSONAL_OWNERSHIP)
} returns listOf(
SyncResponseJson.Policy(
createMockPolicy(
organizationId = "Test Org",
id = "testId",
type = PolicyTypeJson.PERSONAL_OWNERSHIP,
@ -3940,7 +3940,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() {
every {
policyManager.getActivePolicies(type = PolicyTypeJson.PERSONAL_OWNERSHIP)
} returns listOf(
SyncResponseJson.Policy(
createMockPolicy(
organizationId = "Test Org",
id = "testId",
type = PolicyTypeJson.PERSONAL_OWNERSHIP,

View File

@ -10,7 +10,7 @@ import com.bitwarden.ui.platform.components.snackbar.model.BitwardenSnackbarData
import com.bitwarden.ui.platform.resource.BitwardenPlurals
import com.bitwarden.ui.platform.resource.BitwardenString
import com.bitwarden.network.model.PolicyTypeJson
import com.bitwarden.network.model.SyncResponseJson
import com.bitwarden.network.model.createMockPolicy
import com.bitwarden.ui.util.asPluralsText
import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.data.platform.manager.PolicyManager
@ -100,7 +100,7 @@ class ImportItemsViewModelTest : BaseViewModelTest() {
every {
policyManager.getActivePolicies(PolicyTypeJson.RESTRICT_ITEM_TYPES)
} returns listOf(
SyncResponseJson.Policy(
createMockPolicy(
organizationId = "org-id",
id = "policy-id",
type = PolicyTypeJson.RESTRICT_ITEM_TYPES,

View File

@ -26,6 +26,7 @@ import com.bitwarden.data.repository.util.baseIconUrl
import com.bitwarden.data.repository.util.baseWebSendUrl
import com.bitwarden.network.model.PolicyTypeJson
import com.bitwarden.network.model.SyncResponseJson
import com.bitwarden.network.model.createMockPolicy
import com.bitwarden.send.SendType
import com.bitwarden.ui.platform.base.BaseViewModelTest
import com.bitwarden.ui.platform.components.account.model.AccountSummary
@ -378,7 +379,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
)
mutableActivePoliciesFlow.emit(
listOf(
SyncResponseJson.Policy(
createMockPolicy(
organizationId = "Test Organization",
id = "testId",
type = PolicyTypeJson.RESTRICT_ITEM_TYPES,
@ -1406,7 +1407,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
)
mutableActivePoliciesFlow.emit(
listOf(
SyncResponseJson.Policy(
createMockPolicy(
organizationId = "Test Organization",
id = "testId",
type = PolicyTypeJson.RESTRICT_ITEM_TYPES,
@ -1444,7 +1445,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
)
mutableActivePoliciesFlow.emit(
listOf(
SyncResponseJson.Policy(
createMockPolicy(
organizationId = "Test Organization",
id = "testId",
type = PolicyTypeJson.RESTRICT_ITEM_TYPES,

View File

@ -9,6 +9,7 @@ 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
import com.bitwarden.ui.platform.base.BaseViewModelTest
import com.bitwarden.ui.platform.components.account.model.AccountSummary
import com.bitwarden.ui.platform.components.snackbar.model.BitwardenSnackbarData
@ -353,7 +354,7 @@ class VaultViewModelTest : BaseViewModelTest() {
every {
policyManager.getActivePolicies(type = PolicyTypeJson.PERSONAL_OWNERSHIP)
} returns listOf(
SyncResponseJson.Policy(
createMockPolicy(
organizationId = "Test Organization",
id = "testId",
type = PolicyTypeJson.PERSONAL_OWNERSHIP,
@ -446,7 +447,7 @@ class VaultViewModelTest : BaseViewModelTest() {
)
mutableActivePoliciesFlow.emit(
listOf(
SyncResponseJson.Policy(
createMockPolicy(
organizationId = "Test Organization",
id = "testId",
type = PolicyTypeJson.RESTRICT_ITEM_TYPES,
@ -2801,7 +2802,7 @@ class VaultViewModelTest : BaseViewModelTest() {
val viewModel = createViewModel()
mutableActivePoliciesFlow.emit(
listOf(
SyncResponseJson.Policy(
createMockPolicy(
organizationId = "Test Organization",
id = "testId",
type = PolicyTypeJson.RESTRICT_ITEM_TYPES,

View File

@ -115,6 +115,7 @@ data class SyncResponseJson(
* @property type The type of policy.
* @property isEnabled If the policy is enabled or not.
* @property data Any extra data about the policy, in the form of a JSON string.
* @property revisionDate The revision date of the policy (nullable).
*/
@Serializable
data class Policy(
@ -132,6 +133,10 @@ data class SyncResponseJson(
@SerialName("data")
val data: JsonObject?,
@SerialName("revisionDate")
@Contextual
val revisionDate: ZonedDateTime?,
)
/**

View File

@ -1,6 +1,7 @@
package com.bitwarden.network.model
import kotlinx.serialization.json.JsonObject
import java.time.ZonedDateTime
/**
* Create a mock [SyncResponseJson.Policy] with the given [number], [type], and [data].
@ -13,6 +14,7 @@ fun createMockPolicy(
type: PolicyTypeJson = PolicyTypeJson.MASTER_PASSWORD,
isEnabled: Boolean = false,
data: JsonObject? = null,
revisionDate: ZonedDateTime? = null,
): SyncResponseJson.Policy =
SyncResponseJson.Policy(
organizationId = organizationId,
@ -20,4 +22,5 @@ fun createMockPolicy(
type = type,
isEnabled = isEnabled,
data = data,
revisionDate = revisionDate,
)