From 469df4495a803cddb889b0962210642743595a06 Mon Sep 17 00:00:00 2001 From: aj-rosado <109146700+aj-rosado@users.noreply.github.com> Date: Fri, 13 Jun 2025 17:32:12 +0100 Subject: [PATCH] [PM-22568] Change totp seed field to a password field (#5350) --- .../feature/addedit/VaultAddEditLoginItems.kt | 4 +- .../feature/addedit/VaultAddEditScreenTest.kt | 49 +++++++++++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditLoginItems.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditLoginItems.kt index 33f34c82e7..b569421d5e 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditLoginItems.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditLoginItems.kt @@ -361,7 +361,7 @@ private fun TotpRow( onTotpSetupClick: () -> Unit, modifier: Modifier = Modifier, ) { - BitwardenTextField( + BitwardenPasswordField( label = stringResource(id = R.string.authenticator_key), value = totpKey.orEmpty(), onValueChange = {}, @@ -400,7 +400,7 @@ private fun TotpRow( .testTag("SetupTotpButton"), ) }, - textFieldTestTag = "LoginTotpEntry", + passwordFieldTestTag = "LoginTotpEntry", cardStyle = CardStyle.Full, modifier = modifier .fillMaxWidth() diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt index 08030c1d3a..79eb1ee448 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt @@ -985,7 +985,20 @@ class VaultAddEditScreenTest : BitwardenComposeTest() { composeTestRule .onNodeWithTextAfterScroll("Authenticator key") + .assertTextEquals("Authenticator key", "••••••••") + + composeTestRule + .onNodeWithTextAfterScroll("Authenticator key") + .assertExists() + .onChildren() + .filterToOne(hasContentDescription(value = "Show")) + .assertExists() + .performClick() + + composeTestRule + .onNodeWithText("Authenticator key") .assertTextEquals("Authenticator key", "TestCode") + .assertIsEnabled() mutableStateFlow.update { currentState -> updateLoginType(currentState) { copy(totp = "NewTestCode") } @@ -1000,6 +1013,42 @@ class VaultAddEditScreenTest : BitwardenComposeTest() { } } + @Test + fun `in ItemType_Login state totp control should display the text provided by the state`() { + mutableStateFlow.update { currentState -> + updateLoginType(currentState) { copy(totp = "TestCode") } + } + + composeTestRule + .onNodeWithTextAfterScroll("Authenticator key") + .assertTextEquals("Authenticator key", "••••••••") + + composeTestRule + .onNodeWithTextAfterScroll("Authenticator key") + .assertExists() + .onChildren() + .filterToOne(hasContentDescription(value = "Show")) + .assertExists() + .performClick() + + composeTestRule + .onNodeWithText("Authenticator key") + .assertTextEquals("Authenticator key", "TestCode") + .assertIsEnabled() + + composeTestRule + .onNodeWithText("Authenticator key") + .assertExists() + .onChildren() + .filterToOne(hasContentDescription(value = "Hide")) + .assertExists() + .performClick() + + composeTestRule + .onNodeWithTextAfterScroll("Authenticator key") + .assertTextEquals("Authenticator key", "••••••••") + } + @Suppress("MaxLineLength") @Test fun `in ItemType_Login state the totp text field click on trailing icon should call ClearTotpKeyClick`() {