diff --git a/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSource.kt b/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSource.kt index be3965df25..1b87afdf60 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSource.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSource.kt @@ -120,6 +120,18 @@ interface VaultSdkSource { collectionList: List, ): Result> + /** + * Encrypts a [SendView] for the user with the given [userId], returning a [Send] wrapped + * in a [Result]. + * + * This should only be called after a successful call to [initializeCrypto] for the associated + * user. + */ + suspend fun encryptSend( + userId: String, + sendView: SendView, + ): Result + /** * Decrypts a [Send] for the user with the given [userId], returning a [SendView] wrapped in a * [Result]. diff --git a/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSourceImpl.kt b/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSourceImpl.kt index a5034cf3e3..9d7634ee7c 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSourceImpl.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSourceImpl.kt @@ -63,6 +63,17 @@ class VaultSdkSourceImpl( } } + override suspend fun encryptSend( + userId: String, + sendView: SendView, + ): Result = + runCatching { + getClient(userId = userId) + .vault() + .sends() + .encrypt(sendView) + } + override suspend fun encryptCipher( userId: String, cipherView: CipherView, diff --git a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSourceTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSourceTest.kt index 845a16237e..a97e73bbec 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSourceTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSourceTest.kt @@ -403,6 +403,24 @@ class VaultSdkSourceTest { verify { sdkClientManager.getOrCreateClient(userId = userId) } } + @Test + fun `encryptSend should call SDK and return correct data wrapped in a Result`() = runBlocking { + val userId = "userId" + val expectedResult = mockk() + val mockSendView = mockk() + coEvery { clientVault.sends().encrypt(send = mockSendView) } returns expectedResult + + val result = vaultSdkSource.encryptSend( + userId = userId, + sendView = mockSendView, + ) + + assertEquals(expectedResult.asSuccess(), result) + coVerify { + clientVault.sends().encrypt(send = mockSendView) + } + } + @Test fun `decryptSend should call SDK and return correct data wrapped in a Result`() = runBlocking {