From 99ab2245f63bcc93fa54a1d233f01f8a9d2c7d33 Mon Sep 17 00:00:00 2001 From: "bw-ghapp[bot]" <178206702+bw-ghapp[bot]@users.noreply.github.com> Date: Fri, 22 Aug 2025 19:57:39 +0100 Subject: [PATCH] Update SDK to 1.0.0-2681-1a956d45 (#5756) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: bw-ghapp[bot] <178206702+bw-ghapp[bot]@users.noreply.github.com> Co-authored-by: Carlos Gonçalves --- .../8.json | 264 ++++++++++++++++++ .../datasource/disk/VaultDiskSourceImpl.kt | 6 + .../datasource/disk/database/VaultDatabase.kt | 3 +- .../disk/entity/CollectionEntity.kt | 7 + .../util/VaultSdkCollectionExtensions.kt | 14 + .../datasource/disk/VaultDiskSourceTest.kt | 3 + .../sdk/model/CollectionViewUtil.kt | 4 + .../sdk/model/VaultSdkCollectionUtil.kt | 3 + .../util/VaultSdkCollectionExtensionsTest.kt | 24 ++ gradle/libs.versions.toml | 2 +- .../network/model/CollectionTypeJson.kt | 31 ++ .../network/model/SyncResponseJson.kt | 9 + .../network/service/SyncServiceTest.kt | 4 +- .../model/SyncResponseCollectionUtil.kt | 4 + 14 files changed, 375 insertions(+), 3 deletions(-) create mode 100644 app/schemas/com.x8bit.bitwarden.data.vault.datasource.disk.database.VaultDatabase/8.json create mode 100644 network/src/main/kotlin/com/bitwarden/network/model/CollectionTypeJson.kt diff --git a/app/schemas/com.x8bit.bitwarden.data.vault.datasource.disk.database.VaultDatabase/8.json b/app/schemas/com.x8bit.bitwarden.data.vault.datasource.disk.database.VaultDatabase/8.json new file mode 100644 index 0000000000..59a72f2e31 --- /dev/null +++ b/app/schemas/com.x8bit.bitwarden.data.vault.datasource.disk.database.VaultDatabase/8.json @@ -0,0 +1,264 @@ +{ + "formatVersion": 1, + "database": { + "version": 8, + "identityHash": "11387825dab701f9d2dd2e940ffbd794", + "entities": [ + { + "tableName": "ciphers", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `user_id` TEXT NOT NULL, `has_totp` INTEGER NOT NULL DEFAULT 1, `cipher_type` TEXT NOT NULL, `cipher_json` TEXT NOT NULL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "userId", + "columnName": "user_id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "hasTotp", + "columnName": "has_totp", + "affinity": "INTEGER", + "notNull": true, + "defaultValue": "1" + }, + { + "fieldPath": "cipherType", + "columnName": "cipher_type", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "cipherJson", + "columnName": "cipher_json", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_ciphers_user_id", + "unique": false, + "columnNames": [ + "user_id" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_ciphers_user_id` ON `${TABLE_NAME}` (`user_id`)" + } + ] + }, + { + "tableName": "collections", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `user_id` TEXT NOT NULL, `organization_id` TEXT NOT NULL, `should_hide_passwords` INTEGER NOT NULL, `name` TEXT NOT NULL, `external_id` TEXT, `read_only` INTEGER NOT NULL, `manage` INTEGER, `default_user_collection_email` TEXT, `type` TEXT NOT NULL DEFAULT '0', PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "userId", + "columnName": "user_id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "organizationId", + "columnName": "organization_id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "shouldHidePasswords", + "columnName": "should_hide_passwords", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "externalId", + "columnName": "external_id", + "affinity": "TEXT" + }, + { + "fieldPath": "isReadOnly", + "columnName": "read_only", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "canManage", + "columnName": "manage", + "affinity": "INTEGER" + }, + { + "fieldPath": "defaultUserCollectionEmail", + "columnName": "default_user_collection_email", + "affinity": "TEXT" + }, + { + "fieldPath": "type", + "columnName": "type", + "affinity": "TEXT", + "notNull": true, + "defaultValue": "'0'" + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_collections_user_id", + "unique": false, + "columnNames": [ + "user_id" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_collections_user_id` ON `${TABLE_NAME}` (`user_id`)" + } + ] + }, + { + "tableName": "domains", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`user_id` TEXT NOT NULL, `domains_json` TEXT, PRIMARY KEY(`user_id`))", + "fields": [ + { + "fieldPath": "userId", + "columnName": "user_id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "domainsJson", + "columnName": "domains_json", + "affinity": "TEXT" + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "user_id" + ] + } + }, + { + "tableName": "folders", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `user_id` TEXT NOT NULL, `name` TEXT, `revision_date` INTEGER NOT NULL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "userId", + "columnName": "user_id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT" + }, + { + "fieldPath": "revisionDate", + "columnName": "revision_date", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_folders_user_id", + "unique": false, + "columnNames": [ + "user_id" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_folders_user_id` ON `${TABLE_NAME}` (`user_id`)" + } + ] + }, + { + "tableName": "sends", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `user_id` TEXT NOT NULL, `send_type` TEXT NOT NULL, `send_json` TEXT NOT NULL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "userId", + "columnName": "user_id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "sendType", + "columnName": "send_type", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "sendJson", + "columnName": "send_json", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_sends_user_id", + "unique": false, + "columnNames": [ + "user_id" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_sends_user_id` ON `${TABLE_NAME}` (`user_id`)" + } + ] + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '11387825dab701f9d2dd2e940ffbd794')" + ] + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceImpl.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceImpl.kt index 12680cc838..260cb62421 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceImpl.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceImpl.kt @@ -146,6 +146,8 @@ class VaultDiskSourceImpl( externalId = collection.externalId, isReadOnly = collection.isReadOnly, canManage = collection.canManage, + defaultUserCollectionEmail = collection.defaultUserCollectionEmail, + type = collection.type, ), ) } @@ -167,6 +169,8 @@ class VaultDiskSourceImpl( externalId = entity.externalId, isReadOnly = entity.isReadOnly, canManage = entity.canManage, + defaultUserCollectionEmail = entity.defaultUserCollectionEmail, + type = entity.type, ) } }, @@ -290,6 +294,8 @@ class VaultDiskSourceImpl( externalId = collection.externalId, isReadOnly = collection.isReadOnly, canManage = collection.canManage, + defaultUserCollectionEmail = collection.defaultUserCollectionEmail, + type = collection.type, ) }, ) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/database/VaultDatabase.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/database/VaultDatabase.kt index 67681820c9..5985fac005 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/database/VaultDatabase.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/database/VaultDatabase.kt @@ -27,10 +27,11 @@ import com.x8bit.bitwarden.data.vault.datasource.disk.entity.SendEntity FolderEntity::class, SendEntity::class, ], - version = 7, + version = 8, exportSchema = true, autoMigrations = [ AutoMigration(from = 6, to = 7), + AutoMigration(from = 7, to = 8), ], ) @TypeConverters(ZonedDateTimeTypeConverter::class) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/entity/CollectionEntity.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/entity/CollectionEntity.kt index 15aaf69ddf..a42b778fed 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/entity/CollectionEntity.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/entity/CollectionEntity.kt @@ -3,6 +3,7 @@ package com.x8bit.bitwarden.data.vault.datasource.disk.entity import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.PrimaryKey +import com.bitwarden.network.model.CollectionTypeJson /** * Entity representing a collection in the database. @@ -33,4 +34,10 @@ data class CollectionEntity( @ColumnInfo(name = "manage") val canManage: Boolean?, + + @ColumnInfo(name = "default_user_collection_email") + val defaultUserCollectionEmail: String?, + + @ColumnInfo(name = "type", defaultValue = "0") + val type: CollectionTypeJson, ) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCollectionExtensions.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCollectionExtensions.kt index 69eeae2f11..827d86543e 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCollectionExtensions.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCollectionExtensions.kt @@ -1,8 +1,10 @@ package com.x8bit.bitwarden.data.vault.repository.util import com.bitwarden.collections.Collection +import com.bitwarden.collections.CollectionType import com.bitwarden.collections.CollectionView import com.bitwarden.core.data.repository.util.SpecialCharWithPrecedenceComparator +import com.bitwarden.network.model.CollectionTypeJson import com.bitwarden.network.model.SyncResponseJson /** @@ -18,6 +20,8 @@ fun SyncResponseJson.Collection.toEncryptedSdkCollection(): Collection = hidePasswords = this.shouldHidePasswords, readOnly = this.isReadOnly, manage = this.canManage ?: !this.isReadOnly, + defaultUserCollectionEmail = this.defaultUserCollectionEmail, + type = this.type.toCollectionType(), ) /** @@ -38,3 +42,13 @@ fun List.sortAlphabetically(): List { }, ) } + +/** + * Converts a [CollectionType] object to a corresponding + * Bitwarden SDK [CollectionTypeJson] object. + */ +fun CollectionTypeJson.toCollectionType(): CollectionType = + when (this) { + CollectionTypeJson.SHARED_COLLECTION -> CollectionType.SHARED_COLLECTION + CollectionTypeJson.DEFAULT_USER_COLLECTION -> CollectionType.DEFAULT_USER_COLLECTION + } diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceTest.kt index 778ea3fadf..a3da5fd6ba 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceTest.kt @@ -3,6 +3,7 @@ package com.x8bit.bitwarden.data.vault.datasource.disk import app.cash.turbine.test import com.bitwarden.core.di.CoreModule import com.bitwarden.data.datasource.disk.base.FakeDispatcherManager +import com.bitwarden.network.model.CollectionTypeJson import com.bitwarden.network.model.SyncResponseJson import com.bitwarden.network.model.createMockCipher import com.bitwarden.network.model.createMockCollection @@ -479,6 +480,8 @@ private val COLLECTION_ENTITY = CollectionEntity( externalId = "mockExternalId-3", isReadOnly = false, canManage = true, + defaultUserCollectionEmail = "mockOffboardedUserEmail-3", + type = CollectionTypeJson.SHARED_COLLECTION, ) private const val DOMAINS_JSON = """ diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CollectionViewUtil.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CollectionViewUtil.kt index 87186bf9df..dffce31317 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CollectionViewUtil.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CollectionViewUtil.kt @@ -1,16 +1,19 @@ package com.x8bit.bitwarden.data.vault.datasource.sdk.model +import com.bitwarden.collections.CollectionType import com.bitwarden.collections.CollectionView /** * Create a mock [CollectionView] with a given [number]. */ +@Suppress("LongParameterList") fun createMockCollectionView( number: Int, name: String? = null, readOnly: Boolean = false, manage: Boolean = true, hidePasswords: Boolean = false, + type: CollectionType = CollectionType.SHARED_COLLECTION, ): CollectionView = CollectionView( id = "mockId-$number", @@ -20,6 +23,7 @@ fun createMockCollectionView( externalId = "mockExternalId-$number", readOnly = readOnly, manage = manage, + type = type, ) /** diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkCollectionUtil.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkCollectionUtil.kt index a4bc2174c1..2d0fb8ebc2 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkCollectionUtil.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkCollectionUtil.kt @@ -1,6 +1,7 @@ package com.x8bit.bitwarden.data.vault.datasource.sdk.model import com.bitwarden.collections.Collection +import com.bitwarden.collections.CollectionType /** * Create a mock [Collection] with a given [number]. @@ -14,4 +15,6 @@ fun createMockSdkCollection(number: Int): Collection = externalId = "mockExternalId-$number", readOnly = false, manage = true, + defaultUserCollectionEmail = "mockOffboardedUserEmail-$number", + type = CollectionType.SHARED_COLLECTION, ) 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 2eddcf658c..27bfcc461c 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 @@ -1,6 +1,8 @@ package com.x8bit.bitwarden.data.vault.repository.util import com.bitwarden.collections.Collection +import com.bitwarden.collections.CollectionType +import com.bitwarden.network.model.CollectionTypeJson import com.bitwarden.network.model.SyncResponseJson import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCollectionView import org.junit.Test @@ -18,6 +20,8 @@ class VaultSdkCollectionExtensionsTest { readOnly = true, id = "id", manage = true, + defaultUserCollectionEmail = null, + type = CollectionType.SHARED_COLLECTION, ), SyncResponseJson.Collection( organizationId = "organizationId", @@ -27,6 +31,8 @@ class VaultSdkCollectionExtensionsTest { isReadOnly = true, id = "id", canManage = true, + defaultUserCollectionEmail = null, + type = CollectionTypeJson.SHARED_COLLECTION, ) .toEncryptedSdkCollection(), ) @@ -43,6 +49,8 @@ class VaultSdkCollectionExtensionsTest { readOnly = false, id = "id", manage = true, + defaultUserCollectionEmail = null, + type = CollectionType.SHARED_COLLECTION, ), SyncResponseJson.Collection( organizationId = "organizationId", @@ -52,6 +60,8 @@ class VaultSdkCollectionExtensionsTest { isReadOnly = false, id = "id", canManage = null, + defaultUserCollectionEmail = null, + type = CollectionTypeJson.SHARED_COLLECTION, ) .toEncryptedSdkCollection(), ) @@ -70,6 +80,8 @@ class VaultSdkCollectionExtensionsTest { readOnly = true, id = "id", manage = true, + defaultUserCollectionEmail = null, + type = CollectionType.SHARED_COLLECTION, ), ), listOf( @@ -81,6 +93,8 @@ class VaultSdkCollectionExtensionsTest { isReadOnly = true, id = "id", canManage = true, + defaultUserCollectionEmail = null, + type = CollectionTypeJson.SHARED_COLLECTION, ) .toEncryptedSdkCollection(), ), @@ -115,4 +129,14 @@ class VaultSdkCollectionExtensionsTest { list.sortAlphabetically(), ) } + + @Test + fun `toCollectionType should convert CollectionTypeJson to CollectionType`() { + val collectionType = CollectionTypeJson.SHARED_COLLECTION + val sdkCollectionType = collectionType.toCollectionType() + assertEquals( + CollectionType.SHARED_COLLECTION, + sdkCollectionType, + ) + } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 96a8010a9e..9ab97a3607 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -29,7 +29,7 @@ androidxRoom = "2.7.2" androidxSecurityCrypto = "1.1.0" androidxSplash = "1.1.0-rc01" androidxWork = "2.10.3" -bitwardenSdk = "1.0.0-2450-9fe3aeda" +bitwardenSdk = "1.0.0-2681-1a956d45" crashlytics = "3.0.6" detekt = "1.23.8" firebaseBom = "34.1.0" diff --git a/network/src/main/kotlin/com/bitwarden/network/model/CollectionTypeJson.kt b/network/src/main/kotlin/com/bitwarden/network/model/CollectionTypeJson.kt new file mode 100644 index 0000000000..adfc228684 --- /dev/null +++ b/network/src/main/kotlin/com/bitwarden/network/model/CollectionTypeJson.kt @@ -0,0 +1,31 @@ +package com.bitwarden.network.model + +import androidx.annotation.Keep +import com.bitwarden.core.data.serializer.BaseEnumeratedIntSerializer +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +/** + * Represents the type of collection assigned to user(s) or group(s). + */ +@Serializable(CollectionTypeSerializer::class) +enum class CollectionTypeJson { + /** + * Default collection type. Can be assigned by an organization to user(s) or group(s). + */ + @SerialName("0") + SHARED_COLLECTION, + + /** + * Default collection assigned to a user for an organization that has + * OrganizationDataOwnership (formerly PersonalOwnership) policy enabled. + */ + @SerialName("1") + DEFAULT_USER_COLLECTION, +} + +@Keep +private class CollectionTypeSerializer : BaseEnumeratedIntSerializer( + className = "CollectionTypeJson", + values = CollectionTypeJson.entries.toTypedArray(), +) 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 2ebca7df6b..15227543ac 100644 --- a/network/src/main/kotlin/com/bitwarden/network/model/SyncResponseJson.kt +++ b/network/src/main/kotlin/com/bitwarden/network/model/SyncResponseJson.kt @@ -998,6 +998,9 @@ data class SyncResponseJson( * @property externalId The external ID of the collection (nullable). * @property isReadOnly If the collection is marked as read only. * @property id The ID of the collection. + * @property defaultUserCollectionEmail The offboarded user's email address to be used as name + * for the collection. + * @property type The collection's type. */ @Serializable data class Collection( @@ -1021,5 +1024,11 @@ data class SyncResponseJson( @SerialName("manage") val canManage: Boolean?, + + @SerialName("defaultUserCollectionEmail") + val defaultUserCollectionEmail: String?, + + @SerialName("type") + val type: CollectionTypeJson = CollectionTypeJson.SHARED_COLLECTION, ) } diff --git a/network/src/test/kotlin/com/bitwarden/network/service/SyncServiceTest.kt b/network/src/test/kotlin/com/bitwarden/network/service/SyncServiceTest.kt index 577df5ab8f..fdeded4129 100644 --- a/network/src/test/kotlin/com/bitwarden/network/service/SyncServiceTest.kt +++ b/network/src/test/kotlin/com/bitwarden/network/service/SyncServiceTest.kt @@ -214,7 +214,9 @@ private const val SYNC_SUCCESS_JSON = """ "externalId": "mockExternalId-1", "readOnly": false, "id": "mockId-1", - "manage": true + "manage": true, + "defaultUserCollectionEmail": "mockOffboardedUserEmail-1", + "type": 0 } ], "ciphers": [ diff --git a/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseCollectionUtil.kt b/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseCollectionUtil.kt index ad70f8ea7e..c5d830c83d 100644 --- a/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseCollectionUtil.kt +++ b/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseCollectionUtil.kt @@ -13,6 +13,8 @@ fun createMockCollection( isReadOnly: Boolean = false, id: String = "mockId-$number", canManage: Boolean? = true, + defaultUserCollectionEmail: String? = "mockOffboardedUserEmail-$number", + type: CollectionTypeJson = CollectionTypeJson.SHARED_COLLECTION, ): SyncResponseJson.Collection = SyncResponseJson.Collection( organizationId = organizationId, @@ -22,4 +24,6 @@ fun createMockCollection( isReadOnly = isReadOnly, id = id, canManage = canManage, + defaultUserCollectionEmail = defaultUserCollectionEmail, + type = type, )