diff --git a/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCipherExtensions.kt b/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCipherExtensions.kt index b507d89cc9..b0b52d304c 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCipherExtensions.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCipherExtensions.kt @@ -226,7 +226,8 @@ private fun Login.toEncryptedNetworkLogin(): SyncResponseJson.Cipher.Login = ZonedDateTime.ofInstant(it, ZoneOffset.UTC) }, shouldAutofillOnPageLoad = autofillOnPageLoad, - uri = uris?.firstOrNull()?.uri, + // uri needs to be null to avoid duplicating the first url entry for a login item. + uri = null, username = username, ) diff --git a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/CipherJsonRequestUtil.kt b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/CipherJsonRequestUtil.kt index 71db01a16a..360612ffbd 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/CipherJsonRequestUtil.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/CipherJsonRequestUtil.kt @@ -5,14 +5,14 @@ import java.time.ZonedDateTime /** * Create a mock [CipherJsonRequest] with a given [number]. */ -fun createMockCipherJsonRequest(number: Int): CipherJsonRequest = +fun createMockCipherJsonRequest(number: Int, hasNullUri: Boolean = false): CipherJsonRequest = CipherJsonRequest( organizationId = "mockOrganizationId-$number", folderId = "mockFolderId-$number", name = "mockName-$number", notes = "mockNotes-$number", type = CipherTypeJson.LOGIN, - login = createMockLogin(number = number), + login = createMockLogin(number = number, hasNullUri = hasNullUri), card = createMockCard(number = number), fields = listOf(createMockField(number = number)), identity = createMockIdentity(number = number), diff --git a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseCipherUtil.kt b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseCipherUtil.kt index 5aad8e36fc..46a58b7ea7 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseCipherUtil.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/network/model/SyncResponseCipherUtil.kt @@ -5,7 +5,7 @@ import java.time.ZonedDateTime /** * Create a mock [SyncResponseJson.Cipher] with a given [number]. */ -fun createMockCipher(number: Int): SyncResponseJson.Cipher = +fun createMockCipher(number: Int, hasNullUri: Boolean = false): SyncResponseJson.Cipher = SyncResponseJson.Cipher( id = "mockId-$number", organizationId = "mockOrganizationId-$number", @@ -14,7 +14,7 @@ fun createMockCipher(number: Int): SyncResponseJson.Cipher = name = "mockName-$number", notes = "mockNotes-$number", type = CipherTypeJson.LOGIN, - login = createMockLogin(number = number), + login = createMockLogin(number = number, hasNullUri = hasNullUri), creationDate = ZonedDateTime.parse("2023-10-27T12:00:00Z"), deletedDate = ZonedDateTime.parse("2023-10-27T12:00:00Z"), revisionDate = ZonedDateTime.parse("2023-10-27T12:00:00Z"), @@ -114,13 +114,13 @@ fun createMockField(number: Int): SyncResponseJson.Cipher.Field = /** * Create a mock [SyncResponseJson.Cipher.Login] with a given [number]. */ -fun createMockLogin(number: Int): SyncResponseJson.Cipher.Login = +fun createMockLogin(number: Int, hasNullUri: Boolean = false): SyncResponseJson.Cipher.Login = SyncResponseJson.Cipher.Login( username = "mockUsername-$number", password = "mockPassword-$number", passwordRevisionDate = ZonedDateTime.parse("2023-10-27T12:00:00Z"), shouldAutofillOnPageLoad = false, - uri = "mockUri-$number", + uri = if (hasNullUri) { null } else "mockUri-$number", uris = listOf(createMockUri(number = number)), totp = "mockTotp-$number", ) diff --git a/app/src/test/java/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryTest.kt index 9eb3f4a6ed..fa88153d24 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryTest.kt @@ -1381,7 +1381,7 @@ class VaultRepositoryTest { } returns createMockSdkCipher(number = 1).asSuccess() coEvery { ciphersService.createCipher( - body = createMockCipherJsonRequest(number = 1), + body = createMockCipherJsonRequest(number = 1, hasNullUri = true), ) } returns IllegalStateException().asFailure() @@ -1409,7 +1409,7 @@ class VaultRepositoryTest { val mockCipher = createMockCipher(number = 1) coEvery { ciphersService.createCipher( - body = createMockCipherJsonRequest(number = 1), + body = createMockCipherJsonRequest(number = 1, hasNullUri = true), ) } returns mockCipher.asSuccess() coEvery { vaultDiskSource.saveCipher(userId, mockCipher) } just runs @@ -1461,7 +1461,7 @@ class VaultRepositoryTest { coEvery { ciphersService.updateCipher( cipherId = cipherId, - body = createMockCipherJsonRequest(number = 1), + body = createMockCipherJsonRequest(number = 1, hasNullUri = true), ) } returns IllegalStateException().asFailure() @@ -1490,7 +1490,7 @@ class VaultRepositoryTest { coEvery { ciphersService.updateCipher( cipherId = cipherId, - body = createMockCipherJsonRequest(number = 1), + body = createMockCipherJsonRequest(number = 1, hasNullUri = true), ) } returns UpdateCipherResponseJson .Invalid( @@ -1530,7 +1530,7 @@ class VaultRepositoryTest { coEvery { ciphersService.updateCipher( cipherId = cipherId, - body = createMockCipherJsonRequest(number = 1), + body = createMockCipherJsonRequest(number = 1, hasNullUri = true), ) } returns UpdateCipherResponseJson .Success(cipher = mockCipher) @@ -2085,7 +2085,7 @@ class VaultRepositoryTest { ciphersService.shareCipher( cipherId = "mockId-1", body = ShareCipherJsonRequest( - cipher = createMockCipherJsonRequest(number = 1), + cipher = createMockCipherJsonRequest(number = 1, hasNullUri = true), collectionIds = listOf("mockId-1"), ), ) @@ -2120,7 +2120,7 @@ class VaultRepositoryTest { ciphersService.shareCipher( cipherId = "mockId-1", body = ShareCipherJsonRequest( - cipher = createMockCipherJsonRequest(number = 1), + cipher = createMockCipherJsonRequest(number = 1, hasNullUri = true), collectionIds = listOf("mockId-1"), ), ) diff --git a/app/src/test/java/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCipherExtensionsTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCipherExtensionsTest.kt index 7f473bbfb0..dafc937bc0 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCipherExtensionsTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCipherExtensionsTest.kt @@ -39,7 +39,10 @@ class VaultSdkCipherExtensionsTest { val result = sdkCipher.toEncryptedNetworkCipherResponse() assertEquals( - createMockCipher(number = 1), + createMockCipher( + number = 1, + hasNullUri = true, + ), result, ) } @@ -49,7 +52,10 @@ class VaultSdkCipherExtensionsTest { val sdkCipher = createMockSdkCipher(number = 1) val syncCipher = sdkCipher.toEncryptedNetworkCipher() assertEquals( - createMockCipherJsonRequest(number = 1), + createMockCipherJsonRequest( + number = 1, + hasNullUri = true, + ), syncCipher, ) }