From 4fb96cb7824866adccb27d5ed29ae9cf9d7eca06 Mon Sep 17 00:00:00 2001 From: Patrick Honkonen <1883101+SaintPatrck@users.noreply.github.com> Date: Fri, 15 Aug 2025 16:12:01 -0400 Subject: [PATCH] [PM-24598] Map AutofillSaveItem to VaultItemCipherType (#5714) --- .../platform/feature/rootnav/RootNavScreen.kt | 4 +-- .../util/AutofillSaveItemExtensions.kt | 9 ++++++ .../feature/rootnav/RootNavScreenTest.kt | 28 +++++++++++++++++-- .../util/AutofillSaveItemExtensionsTest.kt | 15 ++++++++++ 4 files changed, 52 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavScreen.kt index e626f35a82..e82bcead20 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavScreen.kt @@ -61,9 +61,9 @@ import com.x8bit.bitwarden.ui.tools.feature.send.addedit.ModeType import com.x8bit.bitwarden.ui.tools.feature.send.addedit.navigateToAddEditSend import com.x8bit.bitwarden.ui.vault.feature.addedit.VaultAddEditArgs import com.x8bit.bitwarden.ui.vault.feature.addedit.navigateToVaultAddEdit +import com.x8bit.bitwarden.ui.vault.feature.addedit.util.toVaultItemCipherType import com.x8bit.bitwarden.ui.vault.feature.itemlisting.navigateToVaultItemListingAsRoot import com.x8bit.bitwarden.ui.vault.model.VaultAddEditType -import com.x8bit.bitwarden.ui.vault.model.VaultItemCipherType import com.x8bit.bitwarden.ui.vault.model.VaultItemListingType import java.util.concurrent.atomic.AtomicReference @@ -225,7 +225,7 @@ fun RootNavScreen( navController.navigateToVaultAddEdit( args = VaultAddEditArgs( vaultAddEditType = VaultAddEditType.AddItem, - vaultItemCipherType = VaultItemCipherType.LOGIN, + vaultItemCipherType = currentState.autofillSaveItem.toVaultItemCipherType(), ), navOptions = rootNavOptions, ) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/util/AutofillSaveItemExtensions.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/util/AutofillSaveItemExtensions.kt index b7e0ddf3f7..472889cdf6 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/util/AutofillSaveItemExtensions.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/util/AutofillSaveItemExtensions.kt @@ -5,6 +5,7 @@ import com.x8bit.bitwarden.data.autofill.model.AutofillSaveItem import com.x8bit.bitwarden.ui.vault.feature.addedit.VaultAddEditState import com.x8bit.bitwarden.ui.vault.feature.addedit.model.UriItem import com.x8bit.bitwarden.ui.vault.model.VaultCardExpirationMonth +import com.x8bit.bitwarden.ui.vault.model.VaultItemCipherType import java.util.UUID /** @@ -54,3 +55,11 @@ fun AutofillSaveItem.toDefaultAddTypeContent( ) } } + +/** + * Converts an [AutofillSaveItem] to a [VaultItemCipherType]. + */ +fun AutofillSaveItem.toVaultItemCipherType(): VaultItemCipherType = when (this) { + is AutofillSaveItem.Card -> VaultItemCipherType.CARD + is AutofillSaveItem.Login -> VaultItemCipherType.LOGIN +} diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavScreenTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavScreenTest.kt index 65bdf0239e..6c1e7480da 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavScreenTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavScreenTest.kt @@ -2,6 +2,7 @@ package com.x8bit.bitwarden.ui.platform.feature.rootnav import androidx.navigation.navOptions import com.bitwarden.ui.platform.base.createMockNavHostController +import com.x8bit.bitwarden.data.autofill.model.AutofillSaveItem import com.x8bit.bitwarden.data.autofill.model.AutofillSelectionData import com.x8bit.bitwarden.ui.auth.feature.accountsetup.SetupAutofillRoute import com.x8bit.bitwarden.ui.auth.feature.accountsetup.SetupCompleteRoute @@ -242,9 +243,9 @@ class RootNavScreenTest : BitwardenComposeTest() { } } - // Make sure navigating to vault unlocked for autofill save works as expected: + // Make sure navigating to vault unlocked for autofill save for login works as expected: rootNavStateFlow.value = RootNavState.VaultUnlockedForAutofillSave( - autofillSaveItem = mockk(), + autofillSaveItem = mockk(), ) composeTestRule.runOnIdle { verify { @@ -265,6 +266,29 @@ class RootNavScreenTest : BitwardenComposeTest() { } } + // Make sure navigating to vault unlocked for autofill save for card works as expected: + rootNavStateFlow.value = RootNavState.VaultUnlockedForAutofillSave( + autofillSaveItem = mockk(), + ) + composeTestRule.runOnIdle { + verify { + mockNavHostController.navigate( + route = VaultUnlockedGraphRoute, + navOptions = expectedNavOptions, + ) + mockNavHostController.navigate( + route = VaultAddEditRoute( + vaultAddEditMode = VaultAddEditMode.ADD, + vaultItemId = null, + vaultItemCipherType = VaultItemCipherType.CARD, + selectedFolderId = null, + selectedCollectionId = null, + ), + navOptions = expectedNavOptions, + ) + } + } + // Make sure navigating to vault unlocked for autofill works as expected: rootNavStateFlow.value = RootNavState.VaultUnlockedForAutofillSelection( activeUserId = "userId", diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/util/AutofillSaveItemExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/util/AutofillSaveItemExtensionsTest.kt index 099cefc750..789fc27587 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/util/AutofillSaveItemExtensionsTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/util/AutofillSaveItemExtensionsTest.kt @@ -4,7 +4,9 @@ import com.x8bit.bitwarden.data.autofill.model.AutofillSaveItem import com.x8bit.bitwarden.ui.vault.feature.addedit.VaultAddEditState import com.x8bit.bitwarden.ui.vault.feature.addedit.model.UriItem import com.x8bit.bitwarden.ui.vault.model.VaultCardExpirationMonth +import com.x8bit.bitwarden.ui.vault.model.VaultItemCipherType import io.mockk.every +import io.mockk.mockk import io.mockk.mockkStatic import io.mockk.unmockkStatic import org.junit.jupiter.api.Assertions.assertEquals @@ -76,4 +78,17 @@ class AutofillSaveItemExtensionsTest { .toDefaultAddTypeContent(isIndividualVaultDisabled = true), ) } + + @Test + fun `toVaultItemCipherType should return the correct VaultItemCipherType`() { + assertEquals( + VaultItemCipherType.CARD, + mockk().toVaultItemCipherType(), + ) + + assertEquals( + VaultItemCipherType.LOGIN, + mockk().toVaultItemCipherType(), + ) + } }