From 514e9a79fda53d85bf55872c6aeffd644b4fa206 Mon Sep 17 00:00:00 2001 From: Joshua Queen <139182194+joshua-livefront@users.noreply.github.com> Date: Wed, 17 Jan 2024 22:35:29 -0500 Subject: [PATCH] BIT-1177: Added test tags for password history (#656) --- .../components/BitwardenOverflowActionItem.kt | 9 +++++++++ .../passwordhistory/PasswordHistoryScreen.kt | 11 +++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/BitwardenOverflowActionItem.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/BitwardenOverflowActionItem.kt index fdfe3721d7..b3818f542d 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/BitwardenOverflowActionItem.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/BitwardenOverflowActionItem.kt @@ -18,6 +18,8 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.semantics +import androidx.compose.ui.semantics.testTag import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.dp @@ -63,6 +65,11 @@ fun BitwardenOverflowActionItem( content = { menuItemDataList.forEach { dropdownMenuItemData -> DropdownMenuItem( + modifier = Modifier.semantics { + dropdownMenuItemData.testTag?.let { + testTag = it + } + }, text = { Text( text = dropdownMenuItemData.text, @@ -100,8 +107,10 @@ private fun BitwardenOverflowActionItem_preview() { * * @param text The text displayed for the item in the menu. * @param onClick A callback for when the menu item is clicked. + * @param testTag Optional test tag for the menu item. */ data class OverflowMenuItemData( val text: String, val onClick: () -> Unit, + val testTag: String? = null, ) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/generator/passwordhistory/PasswordHistoryScreen.kt b/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/generator/passwordhistory/PasswordHistoryScreen.kt index 41ff57ee82..e3f6e5b0e8 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/generator/passwordhistory/PasswordHistoryScreen.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/generator/passwordhistory/PasswordHistoryScreen.kt @@ -23,11 +23,15 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Alignment +import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.semantics +import androidx.compose.ui.semantics.testTag +import androidx.compose.ui.semantics.testTagsAsResourceId import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle @@ -43,7 +47,7 @@ import kotlinx.collections.immutable.persistentListOf * Displays the password history screen */ @Suppress("LongMethod") -@OptIn(ExperimentalMaterial3Api::class) +@OptIn(ExperimentalMaterial3Api::class, ExperimentalComposeUiApi::class) @Composable fun PasswordHistoryScreen( onNavigateBack: () -> Unit, @@ -66,6 +70,7 @@ fun PasswordHistoryScreen( BitwardenScaffold( modifier = Modifier .fillMaxSize() + .semantics { testTagsAsResourceId = true } .nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { BitwardenTopAppBar( @@ -80,6 +85,7 @@ fun PasswordHistoryScreen( BitwardenOverflowActionItem( menuItemDataList = persistentListOf( OverflowMenuItemData( + testTag = "ClearPasswordList", text = stringResource(id = R.string.clear), onClick = remember(viewModel) { { @@ -158,7 +164,7 @@ private fun PasswordHistoryContent( modifier: Modifier = Modifier, onPasswordCopyClick: (PasswordHistoryState.GeneratedPassword) -> Unit, ) { - LazyColumn(modifier = modifier) { + LazyColumn(modifier = modifier.semantics { testTag = "GeneratedPasswordRow" }) { items(state.passwords) { password -> PasswordHistoryListItem( label = password.password, @@ -204,6 +210,7 @@ private fun PasswordHistoryEmpty(modifier: Modifier = Modifier) { contentAlignment = Alignment.Center, ) { Text( + modifier = Modifier.semantics { testTag = "NoPasswordsDisplayedLabel" }, text = stringResource(id = R.string.no_passwords_to_list), style = MaterialTheme.typography.bodyMedium, )