From 49da3972b5cc02b9d285dfeebfac43ffbecc1c3b Mon Sep 17 00:00:00 2001 From: Caleb Derosier <125901828+caleb-livefront@users.noreply.github.com> Date: Thu, 4 Jan 2024 19:25:29 -0700 Subject: [PATCH] Rename AppearanceAction properties & add dialog tests (#498) --- .../appearance/AppearanceViewModel.kt | 14 +++---- .../appearance/AppearanceScreenTest.kt | 37 +++++++++++++++++-- 2 files changed, 40 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/appearance/AppearanceViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/appearance/AppearanceViewModel.kt index b28e9408d5..5008632424 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/appearance/AppearanceViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/appearance/AppearanceViewModel.kt @@ -40,17 +40,17 @@ class AppearanceViewModel @Inject constructor( private fun handleLanguageChanged(action: AppearanceAction.LanguageChange) { // TODO: BIT-1328 implement language selection support - mutableStateFlow.update { it.copy(language = action.newLanguage) } + mutableStateFlow.update { it.copy(language = action.language) } } private fun handleShowWebsiteIconsToggled(action: AppearanceAction.ShowWebsiteIconsToggle) { // TODO: BIT-541 add website icon support - mutableStateFlow.update { it.copy(showWebsiteIcons = action.newValue) } + mutableStateFlow.update { it.copy(showWebsiteIcons = action.showWebsiteIcons) } } private fun handleThemeChanged(action: AppearanceAction.ThemeChange) { // TODO: BIT-1327 add theme support - mutableStateFlow.update { it.copy(theme = action.newTheme) } + mutableStateFlow.update { it.copy(theme = action.theme) } } } @@ -106,20 +106,20 @@ sealed class AppearanceAction { * Indicates that the user changed the Language. */ data class LanguageChange( - val newLanguage: AppearanceState.Language, + val language: AppearanceState.Language, ) : AppearanceAction() /** - * Indicates that the user toggled the Show Website Icons switch to [newValue]. + * Indicates that the user toggled the Show Website Icons switch to [showWebsiteIcons]. */ data class ShowWebsiteIconsToggle( - val newValue: Boolean, + val showWebsiteIcons: Boolean, ) : AppearanceAction() /** * Indicates that the user selected a new theme. */ data class ThemeChange( - val newTheme: AppearanceState.Theme, + val theme: AppearanceState.Theme, ) : AppearanceAction() } diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/appearance/AppearanceScreenTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/appearance/AppearanceScreenTest.kt index e02d400158..073f8331ad 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/appearance/AppearanceScreenTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/appearance/AppearanceScreenTest.kt @@ -10,6 +10,7 @@ import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick import com.x8bit.bitwarden.data.platform.repository.util.bufferedMutableSharedFlow import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest +import com.x8bit.bitwarden.ui.util.assertNoDialogExists import io.mockk.every import io.mockk.mockk import io.mockk.verify @@ -56,17 +57,31 @@ class AppearanceScreenTest : BaseComposeTest() { @Test fun `on language selection dialog item click should send LanguageChange`() { composeTestRule.onNodeWithText("Language").performClick() - composeTestRule.onNodeWithText("English").performClick() + composeTestRule + .onAllNodesWithText("English") + .filterToOne(hasAnyAncestor(isDialog())) + .performClick() + composeTestRule.assertNoDialogExists() verify { viewModel.trySendAction( AppearanceAction.LanguageChange( - newLanguage = AppearanceState.Language.ENGLISH, + language = AppearanceState.Language.ENGLISH, ), ) } } + @Test + fun `on language selection dialog cancel click should dismiss dialog`() { + composeTestRule.onNodeWithText("Language").performClick() + composeTestRule + .onAllNodesWithText("Cancel") + .filterToOne(hasAnyAncestor(isDialog())) + .performClick() + composeTestRule.assertNoDialogExists() + } + @Test fun `on theme row click should display theme selection dialog`() { composeTestRule.onNodeWithText("Theme").performClick() @@ -79,17 +94,31 @@ class AppearanceScreenTest : BaseComposeTest() { @Test fun `on theme selection dialog item click should send ThemeChange`() { composeTestRule.onNodeWithText("Theme").performClick() - composeTestRule.onNodeWithText("Dark").performClick() + composeTestRule + .onAllNodesWithText("Dark") + .filterToOne(hasAnyAncestor(isDialog())) + .performClick() + composeTestRule.assertNoDialogExists() verify { viewModel.trySendAction( AppearanceAction.ThemeChange( - newTheme = AppearanceState.Theme.DARK, + theme = AppearanceState.Theme.DARK, ), ) } } + @Test + fun `on theme selection dialog cancel click should dismiss dialog`() { + composeTestRule.onNodeWithText("Theme").performClick() + composeTestRule + .onAllNodesWithText("Cancel") + .filterToOne(hasAnyAncestor(isDialog())) + .performClick() + composeTestRule.assertNoDialogExists() + } + @Test fun `on show website icons row click should send ShowWebsiteIconsToggled`() { composeTestRule.onNodeWithText("Show website icons").performClick()