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 f2ac2e765d..11aa85d06a 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,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, 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 2e8bbc5c0d..6a54aa1a26 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 @@ -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, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/util/PolicyManagerExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/util/PolicyManagerExtensionsTest.kt index bf75bf43bb..c7d2dc0451 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/util/PolicyManagerExtensionsTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/util/PolicyManagerExtensionsTest.kt @@ -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, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/CredentialExchangeImportManagerTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/CredentialExchangeImportManagerTest.kt index bb0e1e4344..4939a7badb 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/CredentialExchangeImportManagerTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/CredentialExchangeImportManagerTest.kt @@ -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, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/SearchViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/SearchViewModelTest.kt index 8441687afd..625f764e63 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/SearchViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/SearchViewModelTest.kt @@ -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, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorViewModelTest.kt index ebb6a618e1..c049b34205 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorViewModelTest.kt @@ -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, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendViewModelTest.kt index 8381f0e523..9ee6f26246 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendViewModelTest.kt @@ -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, 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 fc482df9ec..5b97c14dff 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 @@ -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, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/importitems/ImportItemsViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/importitems/ImportItemsViewModelTest.kt index f1b3c0aca7..cd9e4988dc 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/importitems/ImportItemsViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/importitems/ImportItemsViewModelTest.kt @@ -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, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModelTest.kt index cf30dcb113..0ae28df249 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModelTest.kt @@ -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, 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 7e67176959..6f5327d3ef 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 @@ -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, diff --git a/network/src/main/kotlin/com/bitwarden/network/model/SyncResponseJson.kt b/network/src/main/kotlin/com/bitwarden/network/model/SyncResponseJson.kt index 51d66d3592..12505132f4 100644 --- a/network/src/main/kotlin/com/bitwarden/network/model/SyncResponseJson.kt +++ b/network/src/main/kotlin/com/bitwarden/network/model/SyncResponseJson.kt @@ -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?, ) /** diff --git a/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponsePolicyUtil.kt b/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponsePolicyUtil.kt index 9e6f440d73..9e595bfdf3 100644 --- a/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponsePolicyUtil.kt +++ b/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponsePolicyUtil.kt @@ -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, )