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.testTagsAsResourceId
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.window.Popup
import androidx.compose.ui.window.PopupProperties
import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.DialogProperties
import com.x8bit.bitwarden.ui.platform.components.content.BitwardenLoadingContent
import com.x8bit.bitwarden.ui.platform.theme.BitwardenTheme
@ -31,12 +31,14 @@ import com.x8bit.bitwarden.ui.platform.theme.BitwardenTheme
fun BitwardenLoadingDialog(
text: String,
) {
Popup(
properties = PopupProperties(
Dialog(
properties = DialogProperties(
dismissOnBackPress = false,
dismissOnClickOutside = false,
clippingEnabled = false,
usePlatformDefaultWidth = false,
decorFitsSystemWindows = false,
),
onDismissRequest = {},
) {
BitwardenLoadingContent(
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.hasAnyAncestor
import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onAllNodesWithText
import androidx.compose.ui.test.onNodeWithContentDescription
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.BiometricsManager
import com.x8bit.bitwarden.ui.util.assertNoDialogExists
import com.x8bit.bitwarden.ui.util.assertNoPopupExists
import io.mockk.every
import io.mockk.just
import io.mockk.mockk
@ -573,14 +571,14 @@ class SetupUnlockScreenTest : BaseComposeTest() {
@Test
fun `Loading Dialog should be displayed according to state`() {
val title = "title"
composeTestRule.assertNoPopupExists()
composeTestRule.assertNoDialogExists()
mutableStateFlow.update {
it.copy(dialogState = SetupUnlockState.DialogState.Loading(title = title.asText()))
}
composeTestRule
.onAllNodesWithText(text = title)
.filterToOne(hasAnyAncestor(isPopup()))
.filterToOne(hasAnyAncestor(isDialog()))
.assertIsDisplayed()
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.hasAnyAncestor
import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onAllNodesWithText
import androidx.compose.ui.test.onNodeWithContentDescription
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.x8bit.bitwarden.ui.platform.base.BaseComposeTest
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.just
import io.mockk.mockk
@ -168,7 +167,7 @@ class EnterpriseSignOnScreenTest : BaseComposeTest() {
@Test
fun `loading dialog should be displayed according to state`() {
composeTestRule.assertNoPopupExists()
composeTestRule.assertNoDialogExists()
composeTestRule.onNodeWithText("Loading").assertDoesNotExist()
mutableStateFlow.update {
@ -182,7 +181,7 @@ class EnterpriseSignOnScreenTest : BaseComposeTest() {
composeTestRule
.onNodeWithText("Loading")
.assertIsDisplayed()
.assert(hasAnyAncestor(isPopup()))
.assert(hasAnyAncestor(isDialog()))
}
@Test

View File

@ -6,7 +6,6 @@ import androidx.compose.ui.test.assertCountEquals
import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.hasAnyAncestor
import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onNodeWithContentDescription
import androidx.compose.ui.test.onNodeWithText
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.platform.base.BaseComposeTest
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 io.mockk.every
import io.mockk.just
@ -148,11 +147,11 @@ class LoginWithDeviceScreenTest : BaseComposeTest() {
}
composeTestRule
.onNodeWithText(loadingMessage)
.assert(hasAnyAncestor(isPopup()))
.assert(hasAnyAncestor(isDialog()))
.assertIsDisplayed()
mutableStateFlow.update { it.copy(dialogState = null) }
composeTestRule.assertNoPopupExists()
composeTestRule.assertNoDialogExists()
}
@Test

View File

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

View File

@ -6,7 +6,6 @@ import androidx.compose.ui.test.assertIsOff
import androidx.compose.ui.test.assertIsOn
import androidx.compose.ui.test.hasAnyAncestor
import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onNodeWithContentDescription
import androidx.compose.ui.test.onNodeWithText
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.ui.util.asText
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.mockk
import io.mockk.verify
@ -247,17 +246,17 @@ class TrustedDeviceScreenTest : BaseComposeTest() {
@Test
fun `dialog should update according to state`() {
composeTestRule.assertNoPopupExists()
composeTestRule.assertNoDialogExists()
mutableStateFlow.update {
it.copy(
dialogState = TrustedDeviceState.DialogState.Loading(message = "Loading".asText()),
)
}
composeTestRule.onNode(isPopup()).assertIsDisplayed()
composeTestRule.onNode(isDialog()).assertIsDisplayed()
composeTestRule
.onNodeWithText(text = "Loading")
.assert(hasAnyAncestor(isPopup()))
.assert(hasAnyAncestor(isDialog()))
.assertIsDisplayed()
mutableStateFlow.update {
@ -280,7 +279,7 @@ class TrustedDeviceScreenTest : BaseComposeTest() {
.assertIsDisplayed()
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.hasText
import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onAllNodesWithText
import androidx.compose.ui.test.onNodeWithContentDescription
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.util.assertMasterPasswordDialogDisplayed
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.vault.feature.addedit.VaultAddEditArgs
import com.x8bit.bitwarden.ui.vault.feature.item.VaultItemArgs
@ -962,7 +960,7 @@ class SearchScreenTest : BaseComposeTest() {
@Test
fun `loading dialog should be displayed according to state`() {
val loadingMessage = "syncing"
composeTestRule.assertNoPopupExists()
composeTestRule.assertNoDialogExists()
composeTestRule.onNodeWithText(loadingMessage).assertDoesNotExist()
mutableStateFlow.update {
@ -972,7 +970,7 @@ class SearchScreenTest : BaseComposeTest() {
composeTestRule
.onNodeWithText(loadingMessage)
.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.isDialog
import androidx.compose.ui.test.isDisplayed
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.isToggleable
import androidx.compose.ui.test.onAllNodesWithText
import androidx.compose.ui.test.onNodeWithContentDescription
@ -21,16 +20,15 @@ import androidx.compose.ui.test.performScrollTo
import androidx.compose.ui.test.performTextInput
import androidx.core.net.toUri
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.VaultTimeoutAction
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.manager.biometrics.BiometricSupportStatus
import com.x8bit.bitwarden.ui.platform.manager.biometrics.BiometricsManager
import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager
import com.x8bit.bitwarden.ui.util.assertNoDialogExists
import com.x8bit.bitwarden.ui.util.assertNoPopupExists
import io.mockk.coEvery
import io.mockk.every
import io.mockk.just
@ -1450,7 +1448,7 @@ class AccountSecurityScreenTest : BaseComposeTest() {
@Test
fun `loading dialog should be displayed according to state`() {
val loadingMessage = "Loading"
composeTestRule.assertNoPopupExists()
composeTestRule.assertNoDialogExists()
composeTestRule.onNodeWithText(loadingMessage).assertDoesNotExist()
mutableStateFlow.update {
@ -1460,7 +1458,7 @@ class AccountSecurityScreenTest : BaseComposeTest() {
composeTestRule
.onNodeWithText("Loading")
.assertIsDisplayed()
.assert(hasAnyAncestor(isPopup()))
.assert(hasAnyAncestor(isDialog()))
}
@Test

View File

@ -6,15 +6,14 @@ import androidx.compose.ui.test.filterToOne
import androidx.compose.ui.test.hasAnyAncestor
import androidx.compose.ui.test.hasClickAction
import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onAllNodesWithText
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.performScrollTo
import androidx.compose.ui.test.performTextInput
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
import io.mockk.every
import io.mockk.mockk
import io.mockk.verify
@ -72,7 +71,7 @@ class DeleteAccountScreenTest : BaseComposeTest() {
fun `loading dialog presence should update with dialog state`() {
composeTestRule
.onAllNodesWithText("Loading")
.filterToOne(hasAnyAncestor(isPopup()))
.filterToOne(hasAnyAncestor(isDialog()))
.assertDoesNotExist()
mutableStateFlow.update {
@ -81,7 +80,7 @@ class DeleteAccountScreenTest : BaseComposeTest() {
composeTestRule
.onAllNodesWithText("Loading")
.filterToOne(hasAnyAncestor(isPopup()))
.filterToOne(hasAnyAncestor(isDialog()))
.assertExists()
}
@ -223,9 +222,11 @@ class DeleteAccountScreenTest : BaseComposeTest() {
.assertDoesNotExist()
composeTestRule
.onNodeWithText("This action cannot be completed because your account " +
"is owned by an organization. " +
"Contact your organization administrator for additional details.")
.onNodeWithText(
text = "This action cannot be completed because your account " +
"is owned by an organization. " +
"Contact your organization administrator for additional details.",
)
.assertDoesNotExist()
composeTestRule
@ -242,9 +243,11 @@ class DeleteAccountScreenTest : BaseComposeTest() {
.assertExists()
composeTestRule
.onNodeWithText("This action cannot be completed because your account " +
"is owned by an organization. " +
"Contact your organization administrator for additional details.")
.onNodeWithText(
text = "This action cannot be completed because your account " +
"is owned by an organization. " +
"Contact your organization administrator for additional details.",
)
.assertExists()
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.hasAnyAncestor
import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onAllNodesWithText
import androidx.compose.ui.test.onFirst
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.performTextInput
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
import io.mockk.every
import io.mockk.mockk
import io.mockk.verify
@ -51,7 +50,7 @@ class DeleteAccountConfirmationScreenTest : BaseComposeTest() {
fun `loading dialog presence should update with dialog state`() {
composeTestRule
.onAllNodesWithText("Loading")
.filterToOne(hasAnyAncestor(isPopup()))
.filterToOne(hasAnyAncestor(isDialog()))
.assertDoesNotExist()
mutableStateFlow.update {
@ -62,7 +61,7 @@ class DeleteAccountConfirmationScreenTest : BaseComposeTest() {
composeTestRule
.onAllNodesWithText("Loading")
.filterToOne(hasAnyAncestor(isPopup()))
.filterToOne(hasAnyAncestor(isDialog()))
.assertExists()
}
@ -99,7 +98,7 @@ class DeleteAccountConfirmationScreenTest : BaseComposeTest() {
mutableStateFlow.update {
DEFAULT_STATE.copy(
dialog =
DeleteAccountConfirmationState.DeleteAccountConfirmationDialog.DeleteSuccess(),
DeleteAccountConfirmationState.DeleteAccountConfirmationDialog.DeleteSuccess(),
)
}
@ -114,7 +113,7 @@ class DeleteAccountConfirmationScreenTest : BaseComposeTest() {
mutableStateFlow.update {
DEFAULT_STATE.copy(
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.isDialog
import androidx.compose.ui.test.isDisplayed
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onAllNodesWithText
import androidx.compose.ui.test.onFirst
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.performTextInput
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.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.manager.intent.IntentManager
import com.x8bit.bitwarden.ui.util.assertNoDialogExists
import com.x8bit.bitwarden.ui.util.assertNoPopupExists
import io.mockk.every
import io.mockk.mockk
import io.mockk.verify
@ -90,11 +88,11 @@ class ExportVaultScreenTest : BaseComposeTest() {
}
composeTestRule
.onNodeWithText(loadingMessage)
.assert(hasAnyAncestor(isPopup()))
.assert(hasAnyAncestor(isDialog()))
.assertIsDisplayed()
mutableStateFlow.update { it.copy(dialogState = null) }
composeTestRule.assertNoPopupExists()
composeTestRule.assertNoDialogExists()
}
@Test

View File

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

View File

@ -5,7 +5,6 @@ import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.filterToOne
import androidx.compose.ui.test.hasAnyAncestor
import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onAllNodesWithText
import androidx.compose.ui.test.onNodeWithContentDescription
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.ui.platform.base.BaseComposeTest
import com.x8bit.bitwarden.ui.util.assertNoDialogExists
import com.x8bit.bitwarden.ui.util.assertNoPopupExists
import io.mockk.every
import io.mockk.mockk
import io.mockk.verify
@ -153,7 +151,7 @@ class OtherScreenTest : BaseComposeTest() {
@Test
fun `loading dialog should be displayed according to state`() {
val loadingMessage = "syncing"
composeTestRule.assertNoPopupExists()
composeTestRule.assertNoDialogExists()
composeTestRule.onNodeWithText(loadingMessage).assertDoesNotExist()
mutableStateFlow.update {
@ -163,7 +161,7 @@ class OtherScreenTest : BaseComposeTest() {
composeTestRule
.onNodeWithText(loadingMessage)
.assertIsDisplayed()
.assert(hasAnyAncestor(isPopup()))
.assert(hasAnyAncestor(isDialog()))
}
@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.viewsend.ViewSendRoute
import com.x8bit.bitwarden.ui.util.assertNoDialogExists
import com.x8bit.bitwarden.ui.util.assertNoPopupExists
import com.x8bit.bitwarden.ui.util.isProgressBar
import io.mockk.every
import io.mockk.just
@ -767,7 +766,7 @@ class SendScreenTest : BaseComposeTest() {
@Test
fun `loading dialog should be displayed according to state`() {
val loadingMessage = "syncing"
composeTestRule.assertNoPopupExists()
composeTestRule.assertNoDialogExists()
composeTestRule.onNodeWithText(loadingMessage).assertDoesNotExist()
mutableStateFlow.update {
@ -777,7 +776,7 @@ class SendScreenTest : BaseComposeTest() {
composeTestRule
.onNodeWithText(loadingMessage)
.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.performTextInput
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
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.intent.IntentManager
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.util.assertNoPopupExists
import com.x8bit.bitwarden.ui.util.assertNoDialogExists
import com.x8bit.bitwarden.ui.util.isEditableText
import com.x8bit.bitwarden.ui.util.isProgressBar
import io.mockk.every
@ -842,7 +842,7 @@ class AddSendScreenTest : BaseComposeTest() {
@Test
fun `loading dialog should be displayed according to state`() {
val loadingMessage = "syncing"
composeTestRule.assertNoPopupExists()
composeTestRule.assertNoDialogExists()
composeTestRule.onNodeWithText(loadingMessage).assertDoesNotExist()
mutableStateFlow.update {
@ -852,7 +852,7 @@ class AddSendScreenTest : BaseComposeTest() {
composeTestRule
.onNodeWithText(loadingMessage)
.assertIsDisplayed()
.assert(hasAnyAncestor(isPopup()))
.assert(hasAnyAncestor(isDialog()))
}
@Test

View File

@ -7,7 +7,6 @@ import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.assertIsNotDisplayed
import androidx.compose.ui.test.hasAnyAncestor
import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onNodeWithContentDescription
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
@ -307,7 +306,7 @@ class ViewSendScreenTest : BaseComposeTest() {
}
composeTestRule
.onNodeWithText(text = loadingMessage)
.assert(hasAnyAncestor(isPopup()))
.assert(hasAnyAncestor(isDialog()))
.assertIsDisplayed()
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.hasClickAction
import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onAllNodesWithText
import androidx.compose.ui.test.onNodeWithContentDescription
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
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.ui.platform.base.BaseComposeTest
import com.bitwarden.ui.util.asText
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.onNodeWithContentDescriptionAfterScroll
import com.x8bit.bitwarden.ui.util.onNodeWithTextAfterScroll
@ -231,7 +230,7 @@ class AttachmentsScreenTest : BaseComposeTest() {
@Test
fun `loading dialog should be displayed according to state`() {
val loadingMessage = "deleting"
composeTestRule.assertNoPopupExists()
composeTestRule.assertNoDialogExists()
composeTestRule.onNodeWithText(loadingMessage).assertDoesNotExist()
mutableStateFlow.update {
@ -241,7 +240,7 @@ class AttachmentsScreenTest : BaseComposeTest() {
composeTestRule
.onNodeWithText(loadingMessage)
.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.hasText
import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onAllNodesWithContentDescription
import androidx.compose.ui.test.onAllNodesWithText
import androidx.compose.ui.test.onNodeWithContentDescription
@ -18,14 +17,13 @@ import androidx.compose.ui.test.performScrollTo
import androidx.compose.ui.test.performSemanticsAction
import androidx.core.net.toUri
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.R
import com.x8bit.bitwarden.data.util.advanceTimeByAndRunCurrent
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.snackbar.SnackbarRelay
import com.x8bit.bitwarden.ui.util.assertNoDialogExists
import com.x8bit.bitwarden.ui.util.assertNoPopupExists
import io.mockk.every
import io.mockk.just
import io.mockk.mockk
@ -352,14 +350,14 @@ class ImportLoginsScreenTest : BaseComposeTest() {
@Test
fun `Loading content is displayed when dialog state is syncing`() {
composeTestRule.assertNoPopupExists()
composeTestRule.assertNoDialogExists()
mutableImportLoginsStateFlow.update {
it.copy(dialogState = ImportLoginsState.DialogState.Syncing)
}
composeTestRule
.onNodeWithText(text = "Syncing logins...")
.assertIsDisplayed()
.assert(hasAnyAncestor(isPopup()))
.assert(hasAnyAncestor(isDialog()))
}
@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.manager.intent.IntentManager
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.isProgressBar
import com.x8bit.bitwarden.ui.util.onFirstNodeWithTextAfterScroll
@ -210,7 +209,7 @@ class VaultItemScreenTest : BaseComposeTest() {
@Test
fun `loading dialog should be displayed according to state`() {
composeTestRule.assertNoPopupExists()
composeTestRule.assertNoDialogExists()
composeTestRule.onNodeWithText("Loading").assertDoesNotExist()
mutableStateFlow.update {
@ -220,7 +219,7 @@ class VaultItemScreenTest : BaseComposeTest() {
composeTestRule
.onNodeWithText("Loading")
.assertIsDisplayed()
.assert(hasAnyAncestor(isPopup()))
.assert(hasAnyAncestor(isDialog()))
}
@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.assertMasterPasswordDialogDisplayed
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.assertSwitcherIsDisplayed
import com.x8bit.bitwarden.ui.util.assertSwitcherIsNotDisplayed
@ -1613,7 +1612,7 @@ class VaultItemListingScreenTest : BaseComposeTest() {
@Test
fun `loading dialog should be displayed according to state`() {
val loadingMessage = "syncing"
composeTestRule.assertNoPopupExists()
composeTestRule.assertNoDialogExists()
composeTestRule.onNodeWithText(loadingMessage).assertDoesNotExist()
mutableStateFlow.update {
@ -1627,7 +1626,7 @@ class VaultItemListingScreenTest : BaseComposeTest() {
composeTestRule
.onNodeWithText(loadingMessage)
.assertIsDisplayed()
.assert(hasAnyAncestor(isPopup()))
.assert(hasAnyAncestor(isDialog()))
}
@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.hasAnyAncestor
import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.isPopup
import androidx.compose.ui.test.onAllNodesWithText
import androidx.compose.ui.test.onLast
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.performScrollTo
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
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.vault.feature.movetoorganization.util.createMockOrganizationList
import com.x8bit.bitwarden.ui.vault.model.VaultCollection
@ -264,8 +263,7 @@ class VaultMoveToOrganizationScreenTest : BaseComposeTest() {
organizations = createMockOrganizationList()
.map { organization ->
organization.copy(
collections =
if (organization.id == "mockOrganizationId-1") {
collections = if (organization.id == "mockOrganizationId-1") {
organization
.collections
.map { collection ->
@ -292,7 +290,7 @@ class VaultMoveToOrganizationScreenTest : BaseComposeTest() {
fun `loading dialog should display according to state`() {
composeTestRule
.onAllNodesWithText("loading")
.filterToOne(hasAnyAncestor(isPopup()))
.filterToOne(hasAnyAncestor(isDialog()))
.assertIsNotDisplayed()
mutableStateFlow.update {
@ -303,7 +301,7 @@ class VaultMoveToOrganizationScreenTest : BaseComposeTest() {
composeTestRule
.onAllNodesWithText("loading")
.filterToOne(hasAnyAncestor(isPopup()))
.filterToOne(hasAnyAncestor(isDialog()))
.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.assertLogoutConfirmationDialogIsDisplayed
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.assertScrollableNodeDoesNotExist
import com.x8bit.bitwarden.ui.util.assertSwitcherIsDisplayed
@ -581,7 +580,7 @@ class VaultScreenTest : BaseComposeTest() {
@Test
fun `syncing dialog should be displayed according to state`() {
composeTestRule.assertNoPopupExists()
composeTestRule.assertNoDialogExists()
composeTestRule.onNodeWithText("Loading").assertDoesNotExist()
mutableStateFlow.update {
@ -591,7 +590,7 @@ class VaultScreenTest : BaseComposeTest() {
composeTestRule
.onNodeWithText("Syncing...")
.assertIsDisplayed()
.assert(hasAnyAncestor(isPopup()))
.assert(hasAnyAncestor(isDialog()))
}
@Test

View File

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