From 2a057bb1fb2f368dd43042bc7f2179668893d9d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Gon=C3=A7alves?= Date: Thu, 29 Aug 2024 16:40:01 +0100 Subject: [PATCH] [PM-10762] Remove Passkey button should be hidden when I have Can View permission (#3829) --- .../feature/addedit/VaultAddEditLoginItems.kt | 2 +- .../feature/addedit/VaultAddEditViewModel.kt | 7 ++++++ .../addedit/util/CipherViewExtensions.kt | 1 + .../datasource/sdk/model/CipherViewUtil.kt | 2 +- .../feature/addedit/VaultAddEditScreenTest.kt | 24 +++++++++++++++++++ .../addedit/util/CipherViewExtensionsTest.kt | 2 +- 6 files changed, 35 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditLoginItems.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditLoginItems.kt index f510d36e9..97c8f2cfd 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditLoginItems.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditLoginItems.kt @@ -92,7 +92,7 @@ fun LazyListScope.vaultAddEditLoginItems( modifier = Modifier .fillMaxWidth() .padding(horizontal = 16.dp), - canRemovePasskey = loginState.canViewPassword, + canRemovePasskey = loginState.canRemovePasskey, loginItemTypeHandlers = loginItemTypeHandlers, ) } diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt index a0486fb9d..9b9a6db77 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt @@ -2054,6 +2054,7 @@ data class VaultAddEditState( * @property totp The current TOTP (if applicable). * @property canViewPassword Indicates whether the current user can view and copy * passwords associated with the login item. + * @property canEditItem Indicates whether the current user can edit the login item. * @property fido2CredentialCreationDateTime Date and time the FIDO 2 credential was * created. */ @@ -2063,6 +2064,7 @@ data class VaultAddEditState( val password: String = "", val totp: String? = null, val canViewPassword: Boolean = true, + val canEditItem: Boolean = true, val uriList: List = listOf( UriItem( id = UUID.randomUUID().toString(), @@ -2074,6 +2076,11 @@ data class VaultAddEditState( val fido2CredentialCreationDateTime: Text? = null, ) : ItemType() { override val itemTypeOption: ItemTypeOption get() = ItemTypeOption.LOGIN + + /** + * Indicates whether the passkey can or cannot be removed. + */ + val canRemovePasskey: Boolean get() = this.canEditItem && this.canViewPassword } /** diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/util/CipherViewExtensions.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/util/CipherViewExtensions.kt index da54b613c..49251729d 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/util/CipherViewExtensions.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/util/CipherViewExtensions.kt @@ -48,6 +48,7 @@ fun CipherView.toViewState( password = login?.password.orEmpty(), totp = login?.totp, canViewPassword = this.viewPassword, + canEditItem = this.edit, uriList = login?.uris.toUriItems(), fido2CredentialCreationDateTime = login ?.fido2Credentials diff --git a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherViewUtil.kt b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherViewUtil.kt index 3a67c5a8c..936e98fcd 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherViewUtil.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherViewUtil.kt @@ -81,7 +81,7 @@ fun createMockCipherView( passwordHistory = listOf(createMockPasswordHistoryView(number = number, clock)), reprompt = repromptType, secureNote = createMockSecureNoteView().takeIf { cipherType == CipherType.SECURE_NOTE }, - edit = false, + edit = true, organizationUseTotp = false, viewPassword = true, localData = null, diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt index d8b8be651..5b2aa727e 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt @@ -925,6 +925,29 @@ class VaultAddEditScreenTest : BaseComposeTest() { type = VaultAddEditState.ViewState.Content.ItemType.Login( fido2CredentialCreationDateTime = "fido2Credentials".asText(), canViewPassword = false, + canEditItem = false, + ), + isIndividualVaultDisabled = false, + ), + ) + } + + composeTestRule + .onNodeWithTextAfterScroll("Passkey") + .assertTextEquals("Passkey", "fido2Credentials") + .assertIsEnabled() + composeTestRule + .onNodeWithContentDescription("Remove passkey") + .assertDoesNotExist() + + mutableStateFlow.update { + it.copy( + viewState = VaultAddEditState.ViewState.Content( + common = VaultAddEditState.ViewState.Content.Common(), + type = VaultAddEditState.ViewState.Content.ItemType.Login( + fido2CredentialCreationDateTime = "fido2Credentials".asText(), + canViewPassword = false, + canEditItem = true, ), isIndividualVaultDisabled = false, ), @@ -946,6 +969,7 @@ class VaultAddEditScreenTest : BaseComposeTest() { type = VaultAddEditState.ViewState.Content.ItemType.Login( fido2CredentialCreationDateTime = "fido2Credentials".asText(), canViewPassword = true, + canEditItem = true, ), isIndividualVaultDisabled = false, ), diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/util/CipherViewExtensionsTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/util/CipherViewExtensionsTest.kt index f00bd5a8d..4ab3d46b9 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/util/CipherViewExtensionsTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/util/CipherViewExtensionsTest.kt @@ -470,7 +470,7 @@ private val DEFAULT_BASE_CIPHER_VIEW: CipherView = CipherView( favorite = false, reprompt = CipherRepromptType.PASSWORD, organizationUseTotp = false, - edit = false, + edit = true, viewPassword = false, localData = null, attachments = null,