PM-21634: Update loading Dialog to be a real dialog (#5191)

This commit is contained in:
David Perez 2025-05-14 12:51:06 -05:00 committed by GitHub
parent 119812507a
commit db956b9b91
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
23 changed files with 83 additions and 103 deletions

View File

@ -8,8 +8,8 @@ import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.semantics.testTag import androidx.compose.ui.semantics.testTag
import androidx.compose.ui.semantics.testTagsAsResourceId import androidx.compose.ui.semantics.testTagsAsResourceId
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.window.Popup import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.PopupProperties import androidx.compose.ui.window.DialogProperties
import com.x8bit.bitwarden.ui.platform.components.content.BitwardenLoadingContent import com.x8bit.bitwarden.ui.platform.components.content.BitwardenLoadingContent
import com.x8bit.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.ui.platform.theme.BitwardenTheme
@ -31,12 +31,14 @@ import com.x8bit.bitwarden.ui.platform.theme.BitwardenTheme
fun BitwardenLoadingDialog( fun BitwardenLoadingDialog(
text: String, text: String,
) { ) {
Popup( Dialog(
properties = PopupProperties( properties = DialogProperties(
dismissOnBackPress = false, dismissOnBackPress = false,
dismissOnClickOutside = false, dismissOnClickOutside = false,
clippingEnabled = false, usePlatformDefaultWidth = false,
decorFitsSystemWindows = false,
), ),
onDismissRequest = {},
) { ) {
BitwardenLoadingContent( BitwardenLoadingContent(
text = text, text = text,

View File

@ -8,7 +8,6 @@ import androidx.compose.ui.test.assertIsOn
import androidx.compose.ui.test.filterToOne import androidx.compose.ui.test.filterToOne
import androidx.compose.ui.test.hasAnyAncestor import androidx.compose.ui.test.hasAnyAncestor
import androidx.compose.ui.test.isDialog import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onAllNodesWithText import androidx.compose.ui.test.onAllNodesWithText
import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.onNodeWithContentDescription
import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.onNodeWithText
@ -22,7 +21,6 @@ import com.x8bit.bitwarden.ui.platform.components.toggle.UnlockWithPinState
import com.x8bit.bitwarden.ui.platform.manager.biometrics.BiometricSupportStatus import com.x8bit.bitwarden.ui.platform.manager.biometrics.BiometricSupportStatus
import com.x8bit.bitwarden.ui.platform.manager.biometrics.BiometricsManager import com.x8bit.bitwarden.ui.platform.manager.biometrics.BiometricsManager
import com.x8bit.bitwarden.ui.util.assertNoDialogExists import com.x8bit.bitwarden.ui.util.assertNoDialogExists
import com.x8bit.bitwarden.ui.util.assertNoPopupExists
import io.mockk.every import io.mockk.every
import io.mockk.just import io.mockk.just
import io.mockk.mockk import io.mockk.mockk
@ -573,14 +571,14 @@ class SetupUnlockScreenTest : BaseComposeTest() {
@Test @Test
fun `Loading Dialog should be displayed according to state`() { fun `Loading Dialog should be displayed according to state`() {
val title = "title" val title = "title"
composeTestRule.assertNoPopupExists() composeTestRule.assertNoDialogExists()
mutableStateFlow.update { mutableStateFlow.update {
it.copy(dialogState = SetupUnlockState.DialogState.Loading(title = title.asText())) it.copy(dialogState = SetupUnlockState.DialogState.Loading(title = title.asText()))
} }
composeTestRule composeTestRule
.onAllNodesWithText(text = title) .onAllNodesWithText(text = title)
.filterToOne(hasAnyAncestor(isPopup())) .filterToOne(hasAnyAncestor(isDialog()))
.assertIsDisplayed() .assertIsDisplayed()
mutableStateFlow.update { it.copy(dialogState = null) } mutableStateFlow.update { it.copy(dialogState = null) }

View File

@ -7,7 +7,6 @@ import androidx.compose.ui.test.assertTextEquals
import androidx.compose.ui.test.filterToOne import androidx.compose.ui.test.filterToOne
import androidx.compose.ui.test.hasAnyAncestor import androidx.compose.ui.test.hasAnyAncestor
import androidx.compose.ui.test.isDialog import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onAllNodesWithText import androidx.compose.ui.test.onAllNodesWithText
import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.onNodeWithContentDescription
import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.onNodeWithText
@ -17,7 +16,7 @@ import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
import com.bitwarden.ui.util.asText import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager
import com.x8bit.bitwarden.ui.util.assertNoPopupExists import com.x8bit.bitwarden.ui.util.assertNoDialogExists
import io.mockk.every import io.mockk.every
import io.mockk.just import io.mockk.just
import io.mockk.mockk import io.mockk.mockk
@ -168,7 +167,7 @@ class EnterpriseSignOnScreenTest : BaseComposeTest() {
@Test @Test
fun `loading dialog should be displayed according to state`() { fun `loading dialog should be displayed according to state`() {
composeTestRule.assertNoPopupExists() composeTestRule.assertNoDialogExists()
composeTestRule.onNodeWithText("Loading").assertDoesNotExist() composeTestRule.onNodeWithText("Loading").assertDoesNotExist()
mutableStateFlow.update { mutableStateFlow.update {
@ -182,7 +181,7 @@ class EnterpriseSignOnScreenTest : BaseComposeTest() {
composeTestRule composeTestRule
.onNodeWithText("Loading") .onNodeWithText("Loading")
.assertIsDisplayed() .assertIsDisplayed()
.assert(hasAnyAncestor(isPopup())) .assert(hasAnyAncestor(isDialog()))
} }
@Test @Test

View File

@ -6,7 +6,6 @@ import androidx.compose.ui.test.assertCountEquals
import androidx.compose.ui.test.assertIsDisplayed import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.hasAnyAncestor import androidx.compose.ui.test.hasAnyAncestor
import androidx.compose.ui.test.isDialog import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.onNodeWithContentDescription
import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performClick
@ -17,7 +16,7 @@ import com.x8bit.bitwarden.R
import com.x8bit.bitwarden.ui.auth.feature.loginwithdevice.model.LoginWithDeviceType import com.x8bit.bitwarden.ui.auth.feature.loginwithdevice.model.LoginWithDeviceType
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager
import com.x8bit.bitwarden.ui.util.assertNoPopupExists import com.x8bit.bitwarden.ui.util.assertNoDialogExists
import com.x8bit.bitwarden.ui.util.isProgressBar import com.x8bit.bitwarden.ui.util.isProgressBar
import io.mockk.every import io.mockk.every
import io.mockk.just import io.mockk.just
@ -148,11 +147,11 @@ class LoginWithDeviceScreenTest : BaseComposeTest() {
} }
composeTestRule composeTestRule
.onNodeWithText(loadingMessage) .onNodeWithText(loadingMessage)
.assert(hasAnyAncestor(isPopup())) .assert(hasAnyAncestor(isDialog()))
.assertIsDisplayed() .assertIsDisplayed()
mutableStateFlow.update { it.copy(dialogState = null) } mutableStateFlow.update { it.copy(dialogState = null) }
composeTestRule.assertNoPopupExists() composeTestRule.assertNoDialogExists()
} }
@Test @Test

View File

@ -8,7 +8,6 @@ import androidx.compose.ui.test.filterToOne
import androidx.compose.ui.test.hasAnyAncestor import androidx.compose.ui.test.hasAnyAncestor
import androidx.compose.ui.test.isDialog import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isDisplayed import androidx.compose.ui.test.isDisplayed
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onAllNodesWithText import androidx.compose.ui.test.onAllNodesWithText
import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performClick
@ -18,7 +17,6 @@ import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.R import com.x8bit.bitwarden.R
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
import com.x8bit.bitwarden.ui.util.assertNoDialogExists import com.x8bit.bitwarden.ui.util.assertNoDialogExists
import com.x8bit.bitwarden.ui.util.assertNoPopupExists
import io.mockk.every import io.mockk.every
import io.mockk.just import io.mockk.just
import io.mockk.mockk import io.mockk.mockk
@ -83,12 +81,12 @@ class RemovePasswordScreenTest : BaseComposeTest() {
composeTestRule composeTestRule
.onNodeWithText(text = loadingMessage) .onNodeWithText(text = loadingMessage)
.assert(hasAnyAncestor(isPopup())) .assert(hasAnyAncestor(isDialog()))
.isDisplayed() .isDisplayed()
mutableStateFlow.update { it.copy(dialogState = null) } mutableStateFlow.update { it.copy(dialogState = null) }
composeTestRule.assertNoPopupExists() composeTestRule.assertNoDialogExists()
} }
@Test @Test

View File

@ -6,7 +6,6 @@ import androidx.compose.ui.test.assertIsOff
import androidx.compose.ui.test.assertIsOn import androidx.compose.ui.test.assertIsOn
import androidx.compose.ui.test.hasAnyAncestor import androidx.compose.ui.test.hasAnyAncestor
import androidx.compose.ui.test.isDialog import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.onNodeWithContentDescription
import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performClick
@ -14,7 +13,7 @@ import androidx.compose.ui.test.performScrollTo
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
import com.bitwarden.ui.util.asText import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
import com.x8bit.bitwarden.ui.util.assertNoPopupExists import com.x8bit.bitwarden.ui.util.assertNoDialogExists
import io.mockk.every import io.mockk.every
import io.mockk.mockk import io.mockk.mockk
import io.mockk.verify import io.mockk.verify
@ -247,17 +246,17 @@ class TrustedDeviceScreenTest : BaseComposeTest() {
@Test @Test
fun `dialog should update according to state`() { fun `dialog should update according to state`() {
composeTestRule.assertNoPopupExists() composeTestRule.assertNoDialogExists()
mutableStateFlow.update { mutableStateFlow.update {
it.copy( it.copy(
dialogState = TrustedDeviceState.DialogState.Loading(message = "Loading".asText()), dialogState = TrustedDeviceState.DialogState.Loading(message = "Loading".asText()),
) )
} }
composeTestRule.onNode(isPopup()).assertIsDisplayed() composeTestRule.onNode(isDialog()).assertIsDisplayed()
composeTestRule composeTestRule
.onNodeWithText(text = "Loading") .onNodeWithText(text = "Loading")
.assert(hasAnyAncestor(isPopup())) .assert(hasAnyAncestor(isDialog()))
.assertIsDisplayed() .assertIsDisplayed()
mutableStateFlow.update { mutableStateFlow.update {
@ -280,7 +279,7 @@ class TrustedDeviceScreenTest : BaseComposeTest() {
.assertIsDisplayed() .assertIsDisplayed()
mutableStateFlow.update { it.copy(dialogState = null) } mutableStateFlow.update { it.copy(dialogState = null) }
composeTestRule.assertNoPopupExists() composeTestRule.assertNoDialogExists()
} }
} }

View File

@ -9,7 +9,6 @@ import androidx.compose.ui.test.hasAnyAncestor
import androidx.compose.ui.test.hasScrollToNodeAction import androidx.compose.ui.test.hasScrollToNodeAction
import androidx.compose.ui.test.hasText import androidx.compose.ui.test.hasText
import androidx.compose.ui.test.isDialog import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onAllNodesWithText import androidx.compose.ui.test.onAllNodesWithText
import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.onNodeWithContentDescription
import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.onNodeWithText
@ -31,7 +30,6 @@ import com.x8bit.bitwarden.ui.tools.feature.send.model.SendItemType
import com.x8bit.bitwarden.ui.tools.feature.send.viewsend.ViewSendRoute import com.x8bit.bitwarden.ui.tools.feature.send.viewsend.ViewSendRoute
import com.x8bit.bitwarden.ui.util.assertMasterPasswordDialogDisplayed import com.x8bit.bitwarden.ui.util.assertMasterPasswordDialogDisplayed
import com.x8bit.bitwarden.ui.util.assertNoDialogExists import com.x8bit.bitwarden.ui.util.assertNoDialogExists
import com.x8bit.bitwarden.ui.util.assertNoPopupExists
import com.x8bit.bitwarden.ui.util.isProgressBar import com.x8bit.bitwarden.ui.util.isProgressBar
import com.x8bit.bitwarden.ui.vault.feature.addedit.VaultAddEditArgs import com.x8bit.bitwarden.ui.vault.feature.addedit.VaultAddEditArgs
import com.x8bit.bitwarden.ui.vault.feature.item.VaultItemArgs import com.x8bit.bitwarden.ui.vault.feature.item.VaultItemArgs
@ -962,7 +960,7 @@ class SearchScreenTest : BaseComposeTest() {
@Test @Test
fun `loading dialog should be displayed according to state`() { fun `loading dialog should be displayed according to state`() {
val loadingMessage = "syncing" val loadingMessage = "syncing"
composeTestRule.assertNoPopupExists() composeTestRule.assertNoDialogExists()
composeTestRule.onNodeWithText(loadingMessage).assertDoesNotExist() composeTestRule.onNodeWithText(loadingMessage).assertDoesNotExist()
mutableStateFlow.update { mutableStateFlow.update {
@ -972,7 +970,7 @@ class SearchScreenTest : BaseComposeTest() {
composeTestRule composeTestRule
.onNodeWithText(loadingMessage) .onNodeWithText(loadingMessage)
.assertIsDisplayed() .assertIsDisplayed()
.assert(hasAnyAncestor(isPopup())) .assert(hasAnyAncestor(isDialog()))
} }
} }

View File

@ -11,7 +11,6 @@ import androidx.compose.ui.test.hasAnyAncestor
import androidx.compose.ui.test.hasTextExactly import androidx.compose.ui.test.hasTextExactly
import androidx.compose.ui.test.isDialog import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isDisplayed import androidx.compose.ui.test.isDisplayed
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.isToggleable import androidx.compose.ui.test.isToggleable
import androidx.compose.ui.test.onAllNodesWithText import androidx.compose.ui.test.onAllNodesWithText
import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.onNodeWithContentDescription
@ -21,16 +20,15 @@ import androidx.compose.ui.test.performScrollTo
import androidx.compose.ui.test.performTextInput import androidx.compose.ui.test.performTextInput
import androidx.core.net.toUri import androidx.core.net.toUri
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.data.platform.repository.model.VaultTimeout import com.x8bit.bitwarden.data.platform.repository.model.VaultTimeout
import com.x8bit.bitwarden.data.platform.repository.model.VaultTimeoutAction import com.x8bit.bitwarden.data.platform.repository.model.VaultTimeoutAction
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.ui.platform.components.toggle.UnlockWithPinState import com.x8bit.bitwarden.ui.platform.components.toggle.UnlockWithPinState
import com.x8bit.bitwarden.ui.platform.manager.biometrics.BiometricSupportStatus import com.x8bit.bitwarden.ui.platform.manager.biometrics.BiometricSupportStatus
import com.x8bit.bitwarden.ui.platform.manager.biometrics.BiometricsManager import com.x8bit.bitwarden.ui.platform.manager.biometrics.BiometricsManager
import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager
import com.x8bit.bitwarden.ui.util.assertNoDialogExists import com.x8bit.bitwarden.ui.util.assertNoDialogExists
import com.x8bit.bitwarden.ui.util.assertNoPopupExists
import io.mockk.coEvery import io.mockk.coEvery
import io.mockk.every import io.mockk.every
import io.mockk.just import io.mockk.just
@ -1450,7 +1448,7 @@ class AccountSecurityScreenTest : BaseComposeTest() {
@Test @Test
fun `loading dialog should be displayed according to state`() { fun `loading dialog should be displayed according to state`() {
val loadingMessage = "Loading" val loadingMessage = "Loading"
composeTestRule.assertNoPopupExists() composeTestRule.assertNoDialogExists()
composeTestRule.onNodeWithText(loadingMessage).assertDoesNotExist() composeTestRule.onNodeWithText(loadingMessage).assertDoesNotExist()
mutableStateFlow.update { mutableStateFlow.update {
@ -1460,7 +1458,7 @@ class AccountSecurityScreenTest : BaseComposeTest() {
composeTestRule composeTestRule
.onNodeWithText("Loading") .onNodeWithText("Loading")
.assertIsDisplayed() .assertIsDisplayed()
.assert(hasAnyAncestor(isPopup())) .assert(hasAnyAncestor(isDialog()))
} }
@Test @Test

View File

@ -6,15 +6,14 @@ import androidx.compose.ui.test.filterToOne
import androidx.compose.ui.test.hasAnyAncestor import androidx.compose.ui.test.hasAnyAncestor
import androidx.compose.ui.test.hasClickAction import androidx.compose.ui.test.hasClickAction
import androidx.compose.ui.test.isDialog import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onAllNodesWithText import androidx.compose.ui.test.onAllNodesWithText
import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.performScrollTo import androidx.compose.ui.test.performScrollTo
import androidx.compose.ui.test.performTextInput import androidx.compose.ui.test.performTextInput
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
import com.bitwarden.ui.util.asText import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
import io.mockk.every import io.mockk.every
import io.mockk.mockk import io.mockk.mockk
import io.mockk.verify import io.mockk.verify
@ -72,7 +71,7 @@ class DeleteAccountScreenTest : BaseComposeTest() {
fun `loading dialog presence should update with dialog state`() { fun `loading dialog presence should update with dialog state`() {
composeTestRule composeTestRule
.onAllNodesWithText("Loading") .onAllNodesWithText("Loading")
.filterToOne(hasAnyAncestor(isPopup())) .filterToOne(hasAnyAncestor(isDialog()))
.assertDoesNotExist() .assertDoesNotExist()
mutableStateFlow.update { mutableStateFlow.update {
@ -81,7 +80,7 @@ class DeleteAccountScreenTest : BaseComposeTest() {
composeTestRule composeTestRule
.onAllNodesWithText("Loading") .onAllNodesWithText("Loading")
.filterToOne(hasAnyAncestor(isPopup())) .filterToOne(hasAnyAncestor(isDialog()))
.assertExists() .assertExists()
} }
@ -223,9 +222,11 @@ class DeleteAccountScreenTest : BaseComposeTest() {
.assertDoesNotExist() .assertDoesNotExist()
composeTestRule composeTestRule
.onNodeWithText("This action cannot be completed because your account " + .onNodeWithText(
"is owned by an organization. " + text = "This action cannot be completed because your account " +
"Contact your organization administrator for additional details.") "is owned by an organization. " +
"Contact your organization administrator for additional details.",
)
.assertDoesNotExist() .assertDoesNotExist()
composeTestRule composeTestRule
@ -242,9 +243,11 @@ class DeleteAccountScreenTest : BaseComposeTest() {
.assertExists() .assertExists()
composeTestRule composeTestRule
.onNodeWithText("This action cannot be completed because your account " + .onNodeWithText(
"is owned by an organization. " + text = "This action cannot be completed because your account " +
"Contact your organization administrator for additional details.") "is owned by an organization. " +
"Contact your organization administrator for additional details.",
)
.assertExists() .assertExists()
composeTestRule composeTestRule

View File

@ -3,15 +3,14 @@ package com.x8bit.bitwarden.ui.platform.feature.settings.accountsecurity.deletea
import androidx.compose.ui.test.filterToOne import androidx.compose.ui.test.filterToOne
import androidx.compose.ui.test.hasAnyAncestor import androidx.compose.ui.test.hasAnyAncestor
import androidx.compose.ui.test.isDialog import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onAllNodesWithText import androidx.compose.ui.test.onAllNodesWithText
import androidx.compose.ui.test.onFirst import androidx.compose.ui.test.onFirst
import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.performTextInput import androidx.compose.ui.test.performTextInput
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
import com.bitwarden.ui.util.asText import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
import io.mockk.every import io.mockk.every
import io.mockk.mockk import io.mockk.mockk
import io.mockk.verify import io.mockk.verify
@ -51,7 +50,7 @@ class DeleteAccountConfirmationScreenTest : BaseComposeTest() {
fun `loading dialog presence should update with dialog state`() { fun `loading dialog presence should update with dialog state`() {
composeTestRule composeTestRule
.onAllNodesWithText("Loading") .onAllNodesWithText("Loading")
.filterToOne(hasAnyAncestor(isPopup())) .filterToOne(hasAnyAncestor(isDialog()))
.assertDoesNotExist() .assertDoesNotExist()
mutableStateFlow.update { mutableStateFlow.update {
@ -62,7 +61,7 @@ class DeleteAccountConfirmationScreenTest : BaseComposeTest() {
composeTestRule composeTestRule
.onAllNodesWithText("Loading") .onAllNodesWithText("Loading")
.filterToOne(hasAnyAncestor(isPopup())) .filterToOne(hasAnyAncestor(isDialog()))
.assertExists() .assertExists()
} }
@ -99,7 +98,7 @@ class DeleteAccountConfirmationScreenTest : BaseComposeTest() {
mutableStateFlow.update { mutableStateFlow.update {
DEFAULT_STATE.copy( DEFAULT_STATE.copy(
dialog = dialog =
DeleteAccountConfirmationState.DeleteAccountConfirmationDialog.DeleteSuccess(), DeleteAccountConfirmationState.DeleteAccountConfirmationDialog.DeleteSuccess(),
) )
} }
@ -114,7 +113,7 @@ class DeleteAccountConfirmationScreenTest : BaseComposeTest() {
mutableStateFlow.update { mutableStateFlow.update {
DEFAULT_STATE.copy( DEFAULT_STATE.copy(
dialog = dialog =
DeleteAccountConfirmationState.DeleteAccountConfirmationDialog.DeleteSuccess(), DeleteAccountConfirmationState.DeleteAccountConfirmationDialog.DeleteSuccess(),
) )
} }

View File

@ -7,7 +7,6 @@ import androidx.compose.ui.test.filterToOne
import androidx.compose.ui.test.hasAnyAncestor import androidx.compose.ui.test.hasAnyAncestor
import androidx.compose.ui.test.isDialog import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isDisplayed import androidx.compose.ui.test.isDisplayed
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onAllNodesWithText import androidx.compose.ui.test.onAllNodesWithText
import androidx.compose.ui.test.onFirst import androidx.compose.ui.test.onFirst
import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.onNodeWithContentDescription
@ -16,13 +15,12 @@ import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.performScrollTo import androidx.compose.ui.test.performScrollTo
import androidx.compose.ui.test.performTextInput import androidx.compose.ui.test.performTextInput
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.ui.auth.feature.completeregistration.PasswordStrengthState import com.x8bit.bitwarden.ui.auth.feature.completeregistration.PasswordStrengthState
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.ui.platform.feature.settings.exportvault.model.ExportVaultFormat import com.x8bit.bitwarden.ui.platform.feature.settings.exportvault.model.ExportVaultFormat
import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager
import com.x8bit.bitwarden.ui.util.assertNoDialogExists import com.x8bit.bitwarden.ui.util.assertNoDialogExists
import com.x8bit.bitwarden.ui.util.assertNoPopupExists
import io.mockk.every import io.mockk.every
import io.mockk.mockk import io.mockk.mockk
import io.mockk.verify import io.mockk.verify
@ -90,11 +88,11 @@ class ExportVaultScreenTest : BaseComposeTest() {
} }
composeTestRule composeTestRule
.onNodeWithText(loadingMessage) .onNodeWithText(loadingMessage)
.assert(hasAnyAncestor(isPopup())) .assert(hasAnyAncestor(isDialog()))
.assertIsDisplayed() .assertIsDisplayed()
mutableStateFlow.update { it.copy(dialogState = null) } mutableStateFlow.update { it.copy(dialogState = null) }
composeTestRule.assertNoPopupExists() composeTestRule.assertNoDialogExists()
} }
@Test @Test

View File

@ -12,10 +12,10 @@ import androidx.compose.ui.test.onNodeWithContentDescription
import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performClick
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
import com.bitwarden.ui.util.asText import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
import com.x8bit.bitwarden.ui.platform.feature.settings.folders.model.FolderAddEditType import com.x8bit.bitwarden.ui.platform.feature.settings.folders.model.FolderAddEditType
import com.x8bit.bitwarden.ui.util.assertNoPopupExists import com.x8bit.bitwarden.ui.util.assertNoDialogExists
import io.mockk.every import io.mockk.every
import io.mockk.mockk import io.mockk.mockk
import io.mockk.verify import io.mockk.verify
@ -204,7 +204,7 @@ class FolderAddEditScreenTest : BaseComposeTest() {
@Test @Test
fun `loading dialog should display according to state`() { fun `loading dialog should display according to state`() {
composeTestRule.assertNoPopupExists() composeTestRule.assertNoDialogExists()
mutableStateFlow.update { mutableStateFlow.update {
it.copy( it.copy(
@ -216,10 +216,10 @@ class FolderAddEditScreenTest : BaseComposeTest() {
composeTestRule composeTestRule
.onNodeWithText("Loading") .onNodeWithText("Loading")
.assert(hasAnyAncestor(isPopup())) .assert(hasAnyAncestor(isDialog()))
.assertIsDisplayed() .assertIsDisplayed()
composeTestRule.onNode(isPopup()).assertIsDisplayed() composeTestRule.onNode(isDialog()).assertIsDisplayed()
} }
@Test @Test

View File

@ -5,7 +5,6 @@ import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.filterToOne import androidx.compose.ui.test.filterToOne
import androidx.compose.ui.test.hasAnyAncestor import androidx.compose.ui.test.hasAnyAncestor
import androidx.compose.ui.test.isDialog import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onAllNodesWithText import androidx.compose.ui.test.onAllNodesWithText
import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.onNodeWithContentDescription
import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.onNodeWithText
@ -16,7 +15,6 @@ import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.data.platform.repository.model.ClearClipboardFrequency import com.x8bit.bitwarden.data.platform.repository.model.ClearClipboardFrequency
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
import com.x8bit.bitwarden.ui.util.assertNoDialogExists import com.x8bit.bitwarden.ui.util.assertNoDialogExists
import com.x8bit.bitwarden.ui.util.assertNoPopupExists
import io.mockk.every import io.mockk.every
import io.mockk.mockk import io.mockk.mockk
import io.mockk.verify import io.mockk.verify
@ -153,7 +151,7 @@ class OtherScreenTest : BaseComposeTest() {
@Test @Test
fun `loading dialog should be displayed according to state`() { fun `loading dialog should be displayed according to state`() {
val loadingMessage = "syncing" val loadingMessage = "syncing"
composeTestRule.assertNoPopupExists() composeTestRule.assertNoDialogExists()
composeTestRule.onNodeWithText(loadingMessage).assertDoesNotExist() composeTestRule.onNodeWithText(loadingMessage).assertDoesNotExist()
mutableStateFlow.update { mutableStateFlow.update {
@ -163,7 +161,7 @@ class OtherScreenTest : BaseComposeTest() {
composeTestRule composeTestRule
.onNodeWithText(loadingMessage) .onNodeWithText(loadingMessage)
.assertIsDisplayed() .assertIsDisplayed()
.assert(hasAnyAncestor(isPopup())) .assert(hasAnyAncestor(isDialog()))
} }
@Test @Test

View File

@ -30,7 +30,6 @@ import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager
import com.x8bit.bitwarden.ui.tools.feature.send.model.SendItemType import com.x8bit.bitwarden.ui.tools.feature.send.model.SendItemType
import com.x8bit.bitwarden.ui.tools.feature.send.viewsend.ViewSendRoute import com.x8bit.bitwarden.ui.tools.feature.send.viewsend.ViewSendRoute
import com.x8bit.bitwarden.ui.util.assertNoDialogExists import com.x8bit.bitwarden.ui.util.assertNoDialogExists
import com.x8bit.bitwarden.ui.util.assertNoPopupExists
import com.x8bit.bitwarden.ui.util.isProgressBar import com.x8bit.bitwarden.ui.util.isProgressBar
import io.mockk.every import io.mockk.every
import io.mockk.just import io.mockk.just
@ -767,7 +766,7 @@ class SendScreenTest : BaseComposeTest() {
@Test @Test
fun `loading dialog should be displayed according to state`() { fun `loading dialog should be displayed according to state`() {
val loadingMessage = "syncing" val loadingMessage = "syncing"
composeTestRule.assertNoPopupExists() composeTestRule.assertNoDialogExists()
composeTestRule.onNodeWithText(loadingMessage).assertDoesNotExist() composeTestRule.onNodeWithText(loadingMessage).assertDoesNotExist()
mutableStateFlow.update { mutableStateFlow.update {
@ -777,7 +776,7 @@ class SendScreenTest : BaseComposeTest() {
composeTestRule composeTestRule
.onNodeWithText(loadingMessage) .onNodeWithText(loadingMessage)
.assertIsDisplayed() .assertIsDisplayed()
.assert(hasAnyAncestor(isPopup())) .assert(hasAnyAncestor(isDialog()))
} }
} }

View File

@ -24,13 +24,13 @@ import androidx.compose.ui.test.performScrollTo
import androidx.compose.ui.test.performSemanticsAction import androidx.compose.ui.test.performSemanticsAction
import androidx.compose.ui.test.performTextInput import androidx.compose.ui.test.performTextInput
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
import com.bitwarden.ui.util.asText import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
import com.x8bit.bitwarden.ui.platform.manager.exit.ExitManager import com.x8bit.bitwarden.ui.platform.manager.exit.ExitManager
import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager
import com.x8bit.bitwarden.ui.platform.manager.permissions.FakePermissionManager import com.x8bit.bitwarden.ui.platform.manager.permissions.FakePermissionManager
import com.x8bit.bitwarden.ui.tools.feature.send.addsend.model.AddSendType import com.x8bit.bitwarden.ui.tools.feature.send.addsend.model.AddSendType
import com.x8bit.bitwarden.ui.util.assertNoPopupExists import com.x8bit.bitwarden.ui.util.assertNoDialogExists
import com.x8bit.bitwarden.ui.util.isEditableText import com.x8bit.bitwarden.ui.util.isEditableText
import com.x8bit.bitwarden.ui.util.isProgressBar import com.x8bit.bitwarden.ui.util.isProgressBar
import io.mockk.every import io.mockk.every
@ -842,7 +842,7 @@ class AddSendScreenTest : BaseComposeTest() {
@Test @Test
fun `loading dialog should be displayed according to state`() { fun `loading dialog should be displayed according to state`() {
val loadingMessage = "syncing" val loadingMessage = "syncing"
composeTestRule.assertNoPopupExists() composeTestRule.assertNoDialogExists()
composeTestRule.onNodeWithText(loadingMessage).assertDoesNotExist() composeTestRule.onNodeWithText(loadingMessage).assertDoesNotExist()
mutableStateFlow.update { mutableStateFlow.update {
@ -852,7 +852,7 @@ class AddSendScreenTest : BaseComposeTest() {
composeTestRule composeTestRule
.onNodeWithText(loadingMessage) .onNodeWithText(loadingMessage)
.assertIsDisplayed() .assertIsDisplayed()
.assert(hasAnyAncestor(isPopup())) .assert(hasAnyAncestor(isDialog()))
} }
@Test @Test

View File

@ -7,7 +7,6 @@ import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.assertIsNotDisplayed import androidx.compose.ui.test.assertIsNotDisplayed
import androidx.compose.ui.test.hasAnyAncestor import androidx.compose.ui.test.hasAnyAncestor
import androidx.compose.ui.test.isDialog import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.onNodeWithContentDescription
import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performClick
@ -307,7 +306,7 @@ class ViewSendScreenTest : BaseComposeTest() {
} }
composeTestRule composeTestRule
.onNodeWithText(text = loadingMessage) .onNodeWithText(text = loadingMessage)
.assert(hasAnyAncestor(isPopup())) .assert(hasAnyAncestor(isDialog()))
.assertIsDisplayed() .assertIsDisplayed()
mutableStateFlow.update { it.copy(dialogState = null) } mutableStateFlow.update { it.copy(dialogState = null) }

View File

@ -7,17 +7,16 @@ import androidx.compose.ui.test.filterToOne
import androidx.compose.ui.test.hasAnyAncestor import androidx.compose.ui.test.hasAnyAncestor
import androidx.compose.ui.test.hasClickAction import androidx.compose.ui.test.hasClickAction
import androidx.compose.ui.test.isDialog import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onAllNodesWithText import androidx.compose.ui.test.onAllNodesWithText
import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.onNodeWithContentDescription
import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performClick
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCipherView import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCipherView
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager
import com.x8bit.bitwarden.ui.util.assertNoPopupExists import com.x8bit.bitwarden.ui.util.assertNoDialogExists
import com.x8bit.bitwarden.ui.util.isProgressBar import com.x8bit.bitwarden.ui.util.isProgressBar
import com.x8bit.bitwarden.ui.util.onNodeWithContentDescriptionAfterScroll import com.x8bit.bitwarden.ui.util.onNodeWithContentDescriptionAfterScroll
import com.x8bit.bitwarden.ui.util.onNodeWithTextAfterScroll import com.x8bit.bitwarden.ui.util.onNodeWithTextAfterScroll
@ -231,7 +230,7 @@ class AttachmentsScreenTest : BaseComposeTest() {
@Test @Test
fun `loading dialog should be displayed according to state`() { fun `loading dialog should be displayed according to state`() {
val loadingMessage = "deleting" val loadingMessage = "deleting"
composeTestRule.assertNoPopupExists() composeTestRule.assertNoDialogExists()
composeTestRule.onNodeWithText(loadingMessage).assertDoesNotExist() composeTestRule.onNodeWithText(loadingMessage).assertDoesNotExist()
mutableStateFlow.update { mutableStateFlow.update {
@ -241,7 +240,7 @@ class AttachmentsScreenTest : BaseComposeTest() {
composeTestRule composeTestRule
.onNodeWithText(loadingMessage) .onNodeWithText(loadingMessage)
.assertIsDisplayed() .assertIsDisplayed()
.assert(hasAnyAncestor(isPopup())) .assert(hasAnyAncestor(isDialog()))
} }
} }

View File

@ -8,7 +8,6 @@ import androidx.compose.ui.test.hasAnyAncestor
import androidx.compose.ui.test.hasAnySibling import androidx.compose.ui.test.hasAnySibling
import androidx.compose.ui.test.hasText import androidx.compose.ui.test.hasText
import androidx.compose.ui.test.isDialog import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onAllNodesWithContentDescription import androidx.compose.ui.test.onAllNodesWithContentDescription
import androidx.compose.ui.test.onAllNodesWithText import androidx.compose.ui.test.onAllNodesWithText
import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.onNodeWithContentDescription
@ -18,14 +17,13 @@ import androidx.compose.ui.test.performScrollTo
import androidx.compose.ui.test.performSemanticsAction import androidx.compose.ui.test.performSemanticsAction
import androidx.core.net.toUri import androidx.core.net.toUri
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.R import com.x8bit.bitwarden.R
import com.x8bit.bitwarden.data.util.advanceTimeByAndRunCurrent import com.x8bit.bitwarden.data.util.advanceTimeByAndRunCurrent
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager
import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay
import com.x8bit.bitwarden.ui.util.assertNoDialogExists import com.x8bit.bitwarden.ui.util.assertNoDialogExists
import com.x8bit.bitwarden.ui.util.assertNoPopupExists
import io.mockk.every import io.mockk.every
import io.mockk.just import io.mockk.just
import io.mockk.mockk import io.mockk.mockk
@ -352,14 +350,14 @@ class ImportLoginsScreenTest : BaseComposeTest() {
@Test @Test
fun `Loading content is displayed when dialog state is syncing`() { fun `Loading content is displayed when dialog state is syncing`() {
composeTestRule.assertNoPopupExists() composeTestRule.assertNoDialogExists()
mutableImportLoginsStateFlow.update { mutableImportLoginsStateFlow.update {
it.copy(dialogState = ImportLoginsState.DialogState.Syncing) it.copy(dialogState = ImportLoginsState.DialogState.Syncing)
} }
composeTestRule composeTestRule
.onNodeWithText(text = "Syncing logins...") .onNodeWithText(text = "Syncing logins...")
.assertIsDisplayed() .assertIsDisplayed()
.assert(hasAnyAncestor(isPopup())) .assert(hasAnyAncestor(isDialog()))
} }
@Test @Test

View File

@ -35,7 +35,6 @@ import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
import com.x8bit.bitwarden.ui.platform.components.model.IconData import com.x8bit.bitwarden.ui.platform.components.model.IconData
import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager
import com.x8bit.bitwarden.ui.util.assertNoDialogExists import com.x8bit.bitwarden.ui.util.assertNoDialogExists
import com.x8bit.bitwarden.ui.util.assertNoPopupExists
import com.x8bit.bitwarden.ui.util.assertScrollableNodeDoesNotExist import com.x8bit.bitwarden.ui.util.assertScrollableNodeDoesNotExist
import com.x8bit.bitwarden.ui.util.isProgressBar import com.x8bit.bitwarden.ui.util.isProgressBar
import com.x8bit.bitwarden.ui.util.onFirstNodeWithTextAfterScroll import com.x8bit.bitwarden.ui.util.onFirstNodeWithTextAfterScroll
@ -210,7 +209,7 @@ class VaultItemScreenTest : BaseComposeTest() {
@Test @Test
fun `loading dialog should be displayed according to state`() { fun `loading dialog should be displayed according to state`() {
composeTestRule.assertNoPopupExists() composeTestRule.assertNoDialogExists()
composeTestRule.onNodeWithText("Loading").assertDoesNotExist() composeTestRule.onNodeWithText("Loading").assertDoesNotExist()
mutableStateFlow.update { mutableStateFlow.update {
@ -220,7 +219,7 @@ class VaultItemScreenTest : BaseComposeTest() {
composeTestRule composeTestRule
.onNodeWithText("Loading") .onNodeWithText("Loading")
.assertIsDisplayed() .assertIsDisplayed()
.assert(hasAnyAncestor(isPopup())) .assert(hasAnyAncestor(isDialog()))
} }
@Test @Test

View File

@ -43,7 +43,6 @@ import com.x8bit.bitwarden.ui.util.assertLockOrLogoutDialogIsDisplayed
import com.x8bit.bitwarden.ui.util.assertLogoutConfirmationDialogIsDisplayed import com.x8bit.bitwarden.ui.util.assertLogoutConfirmationDialogIsDisplayed
import com.x8bit.bitwarden.ui.util.assertMasterPasswordDialogDisplayed import com.x8bit.bitwarden.ui.util.assertMasterPasswordDialogDisplayed
import com.x8bit.bitwarden.ui.util.assertNoDialogExists import com.x8bit.bitwarden.ui.util.assertNoDialogExists
import com.x8bit.bitwarden.ui.util.assertNoPopupExists
import com.x8bit.bitwarden.ui.util.assertRemovalConfirmationDialogIsDisplayed import com.x8bit.bitwarden.ui.util.assertRemovalConfirmationDialogIsDisplayed
import com.x8bit.bitwarden.ui.util.assertSwitcherIsDisplayed import com.x8bit.bitwarden.ui.util.assertSwitcherIsDisplayed
import com.x8bit.bitwarden.ui.util.assertSwitcherIsNotDisplayed import com.x8bit.bitwarden.ui.util.assertSwitcherIsNotDisplayed
@ -1613,7 +1612,7 @@ class VaultItemListingScreenTest : BaseComposeTest() {
@Test @Test
fun `loading dialog should be displayed according to state`() { fun `loading dialog should be displayed according to state`() {
val loadingMessage = "syncing" val loadingMessage = "syncing"
composeTestRule.assertNoPopupExists() composeTestRule.assertNoDialogExists()
composeTestRule.onNodeWithText(loadingMessage).assertDoesNotExist() composeTestRule.onNodeWithText(loadingMessage).assertDoesNotExist()
mutableStateFlow.update { mutableStateFlow.update {
@ -1627,7 +1626,7 @@ class VaultItemListingScreenTest : BaseComposeTest() {
composeTestRule composeTestRule
.onNodeWithText(loadingMessage) .onNodeWithText(loadingMessage)
.assertIsDisplayed() .assertIsDisplayed()
.assert(hasAnyAncestor(isPopup())) .assert(hasAnyAncestor(isDialog()))
} }
@Suppress("MaxLineLength") @Suppress("MaxLineLength")

View File

@ -7,7 +7,6 @@ import androidx.compose.ui.test.assertIsOn
import androidx.compose.ui.test.filterToOne import androidx.compose.ui.test.filterToOne
import androidx.compose.ui.test.hasAnyAncestor import androidx.compose.ui.test.hasAnyAncestor
import androidx.compose.ui.test.isDialog import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onAllNodesWithText import androidx.compose.ui.test.onAllNodesWithText
import androidx.compose.ui.test.onLast import androidx.compose.ui.test.onLast
import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.onNodeWithContentDescription
@ -15,8 +14,8 @@ import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.performScrollTo import androidx.compose.ui.test.performScrollTo
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
import com.bitwarden.ui.util.asText import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
import com.x8bit.bitwarden.ui.util.onNodeWithContentDescriptionAfterScroll import com.x8bit.bitwarden.ui.util.onNodeWithContentDescriptionAfterScroll
import com.x8bit.bitwarden.ui.vault.feature.movetoorganization.util.createMockOrganizationList import com.x8bit.bitwarden.ui.vault.feature.movetoorganization.util.createMockOrganizationList
import com.x8bit.bitwarden.ui.vault.model.VaultCollection import com.x8bit.bitwarden.ui.vault.model.VaultCollection
@ -264,8 +263,7 @@ class VaultMoveToOrganizationScreenTest : BaseComposeTest() {
organizations = createMockOrganizationList() organizations = createMockOrganizationList()
.map { organization -> .map { organization ->
organization.copy( organization.copy(
collections = collections = if (organization.id == "mockOrganizationId-1") {
if (organization.id == "mockOrganizationId-1") {
organization organization
.collections .collections
.map { collection -> .map { collection ->
@ -292,7 +290,7 @@ class VaultMoveToOrganizationScreenTest : BaseComposeTest() {
fun `loading dialog should display according to state`() { fun `loading dialog should display according to state`() {
composeTestRule composeTestRule
.onAllNodesWithText("loading") .onAllNodesWithText("loading")
.filterToOne(hasAnyAncestor(isPopup())) .filterToOne(hasAnyAncestor(isDialog()))
.assertIsNotDisplayed() .assertIsNotDisplayed()
mutableStateFlow.update { mutableStateFlow.update {
@ -303,7 +301,7 @@ class VaultMoveToOrganizationScreenTest : BaseComposeTest() {
composeTestRule composeTestRule
.onAllNodesWithText("loading") .onAllNodesWithText("loading")
.filterToOne(hasAnyAncestor(isPopup())) .filterToOne(hasAnyAncestor(isDialog()))
.assertIsDisplayed() .assertIsDisplayed()
} }

View File

@ -35,7 +35,6 @@ import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay
import com.x8bit.bitwarden.ui.util.assertLockOrLogoutDialogIsDisplayed import com.x8bit.bitwarden.ui.util.assertLockOrLogoutDialogIsDisplayed
import com.x8bit.bitwarden.ui.util.assertLogoutConfirmationDialogIsDisplayed import com.x8bit.bitwarden.ui.util.assertLogoutConfirmationDialogIsDisplayed
import com.x8bit.bitwarden.ui.util.assertNoDialogExists import com.x8bit.bitwarden.ui.util.assertNoDialogExists
import com.x8bit.bitwarden.ui.util.assertNoPopupExists
import com.x8bit.bitwarden.ui.util.assertRemovalConfirmationDialogIsDisplayed import com.x8bit.bitwarden.ui.util.assertRemovalConfirmationDialogIsDisplayed
import com.x8bit.bitwarden.ui.util.assertScrollableNodeDoesNotExist import com.x8bit.bitwarden.ui.util.assertScrollableNodeDoesNotExist
import com.x8bit.bitwarden.ui.util.assertSwitcherIsDisplayed import com.x8bit.bitwarden.ui.util.assertSwitcherIsDisplayed
@ -581,7 +580,7 @@ class VaultScreenTest : BaseComposeTest() {
@Test @Test
fun `syncing dialog should be displayed according to state`() { fun `syncing dialog should be displayed according to state`() {
composeTestRule.assertNoPopupExists() composeTestRule.assertNoDialogExists()
composeTestRule.onNodeWithText("Loading").assertDoesNotExist() composeTestRule.onNodeWithText("Loading").assertDoesNotExist()
mutableStateFlow.update { mutableStateFlow.update {
@ -591,7 +590,7 @@ class VaultScreenTest : BaseComposeTest() {
composeTestRule composeTestRule
.onNodeWithText("Syncing...") .onNodeWithText("Syncing...")
.assertIsDisplayed() .assertIsDisplayed()
.assert(hasAnyAncestor(isPopup())) .assert(hasAnyAncestor(isDialog()))
} }
@Test @Test

View File

@ -5,6 +5,7 @@ import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.assertIsNotDisplayed import androidx.compose.ui.test.assertIsNotDisplayed
import androidx.compose.ui.test.filterToOne import androidx.compose.ui.test.filterToOne
import androidx.compose.ui.test.hasAnyAncestor import androidx.compose.ui.test.hasAnyAncestor
import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isDisplayed import androidx.compose.ui.test.isDisplayed
import androidx.compose.ui.test.isPopup import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onAllNodesWithText import androidx.compose.ui.test.onAllNodesWithText
@ -18,7 +19,7 @@ import com.bitwarden.data.repository.util.baseIconUrl
import com.bitwarden.ui.util.asText import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.data.platform.manager.util.AppResumeStateManager import com.x8bit.bitwarden.data.platform.manager.util.AppResumeStateManager
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
import com.x8bit.bitwarden.ui.util.assertNoPopupExists import com.x8bit.bitwarden.ui.util.assertNoDialogExists
import com.x8bit.bitwarden.ui.vault.feature.item.VaultItemArgs import com.x8bit.bitwarden.ui.vault.feature.item.VaultItemArgs
import com.x8bit.bitwarden.ui.vault.feature.vault.model.VaultFilterType import com.x8bit.bitwarden.ui.vault.feature.vault.model.VaultFilterType
import com.x8bit.bitwarden.ui.vault.model.VaultItemCipherType import com.x8bit.bitwarden.ui.vault.model.VaultItemCipherType
@ -357,7 +358,7 @@ class VerificationCodeScreenTest : BaseComposeTest() {
@Test @Test
fun `loading dialog should be displayed according to state`() { fun `loading dialog should be displayed according to state`() {
val loadingMessage = "syncing" val loadingMessage = "syncing"
composeTestRule.assertNoPopupExists() composeTestRule.assertNoDialogExists()
composeTestRule.onNodeWithText(loadingMessage).assertDoesNotExist() composeTestRule.onNodeWithText(loadingMessage).assertDoesNotExist()
mutableStateFlow.update { mutableStateFlow.update {
@ -371,7 +372,7 @@ class VerificationCodeScreenTest : BaseComposeTest() {
composeTestRule composeTestRule
.onNodeWithText(loadingMessage) .onNodeWithText(loadingMessage)
.assertIsDisplayed() .assertIsDisplayed()
.assert(hasAnyAncestor(isPopup())) .assert(hasAnyAncestor(isDialog()))
} }
} }