PM-21610: Update SearchScreen and VaultItemListingScreen for better Sends support (#5188)

This commit is contained in:
David Perez
2025-05-14 13:57:29 +00:00
committed by GitHub
parent 62cb962298
commit 456adf3158
14 changed files with 147 additions and 82 deletions
@@ -15,7 +15,6 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.bitwarden.vault.CipherType
import com.x8bit.bitwarden.R
import com.x8bit.bitwarden.ui.platform.base.util.standardHorizontalMargin
import com.x8bit.bitwarden.ui.platform.base.util.toListItemCardStyle
@@ -126,7 +125,7 @@ fun SearchContent(
} else if (it.autofillSelectionOptions.isNotEmpty()) {
autofillSelectionOptionsItem = it
} else {
searchHandlers.onItemClick(it.id, it.cipherType)
searchHandlers.onItemClick(it.id, it.itemType)
}
},
trailingLabelIcons = it.extraIconList,
@@ -184,7 +183,7 @@ private fun AutofillSelectionDialog(
displayItem: SearchState.DisplayItem,
onAutofillItemClick: (cipherId: String) -> Unit,
onAutofillAndSaveItemClick: (cipherId: String) -> Unit,
onViewItemClick: (cipherId: String, cipherType: CipherType?) -> Unit,
onViewItemClick: (id: String, type: SearchState.DisplayItem.ItemType) -> Unit,
onMasterPasswordRepromptRequest: (MasterPasswordRepromptData) -> Unit,
onDismissRequest: () -> Unit,
) {
@@ -238,7 +237,7 @@ private fun AutofillSelectionDialog(
text = stringResource(id = R.string.view),
onClick = {
onDismissRequest()
onViewItemClick(displayItem.id, displayItem.cipherType)
onViewItemClick(displayItem.id, displayItem.itemType)
},
)
}
@@ -8,6 +8,7 @@ import com.bitwarden.core.data.repository.model.DataState
import com.bitwarden.data.repository.util.baseIconUrl
import com.bitwarden.data.repository.util.baseWebSendUrl
import com.bitwarden.network.model.PolicyTypeJson
import com.bitwarden.send.SendType
import com.bitwarden.ui.platform.base.BaseViewModel
import com.bitwarden.ui.util.Text
import com.bitwarden.ui.util.asText
@@ -162,22 +163,22 @@ class SearchViewModel @Inject constructor(
}
private fun handleItemClick(action: SearchAction.ItemClick) {
val event = when (state.searchType) {
is SearchTypeData.Vault -> {
val event = when (val itemType = action.itemType) {
is SearchState.DisplayItem.ItemType.Vault -> {
if (state.isTotp) {
SearchEvent.NavigateToEditCipher(
cipherId = action.itemId,
cipherType = requireNotNull(action.cipherType).toVaultItemCipherType(),
cipherType = itemType.type.toVaultItemCipherType(),
)
} else {
SearchEvent.NavigateToViewCipher(
cipherId = action.itemId,
cipherType = requireNotNull(action.cipherType).toVaultItemCipherType(),
cipherType = itemType.type.toVaultItemCipherType(),
)
}
}
is SearchTypeData.Sends -> {
is SearchState.DisplayItem.ItemType.Sends -> {
SearchEvent.NavigateToEditSend(sendId = action.itemId)
}
}
@@ -627,7 +628,7 @@ class SearchViewModel @Inject constructor(
trySendAction(
action = SearchAction.ItemClick(
itemId = data.cipherId,
cipherType = CipherType.LOGIN,
itemType = SearchState.DisplayItem.ItemType.Vault(type = CipherType.LOGIN),
),
)
}
@@ -891,8 +892,25 @@ data class SearchState(
val autofillSelectionOptions: List<AutofillSelectionOption>,
val isTotp: Boolean,
val shouldDisplayMasterPasswordReprompt: Boolean,
val cipherType: CipherType?,
) : Parcelable
val itemType: ItemType,
) : Parcelable {
/**
* Indicates the item type as a send or vault item.
*/
sealed class ItemType : Parcelable {
/**
* Indicates the item type is a send.
*/
@Parcelize
data class Sends(val type: SendType) : ItemType()
/**
* Indicates the item type is a vault item.
*/
@Parcelize
data class Vault(val type: CipherType) : ItemType()
}
}
}
/**
@@ -1071,7 +1089,7 @@ sealed class SearchAction {
*/
data class ItemClick(
val itemId: String,
val cipherType: CipherType?,
val itemType: SearchState.DisplayItem.ItemType,
) : SearchAction()
/**
@@ -1,8 +1,8 @@
package com.x8bit.bitwarden.ui.platform.feature.search.handlers
import com.bitwarden.vault.CipherType
import com.x8bit.bitwarden.ui.platform.feature.search.MasterPasswordRepromptData
import com.x8bit.bitwarden.ui.platform.feature.search.SearchAction
import com.x8bit.bitwarden.ui.platform.feature.search.SearchState
import com.x8bit.bitwarden.ui.platform.feature.search.SearchViewModel
import com.x8bit.bitwarden.ui.vault.feature.itemlisting.model.ListingItemOverflowAction
import com.x8bit.bitwarden.ui.vault.feature.vault.model.VaultFilterType
@@ -13,7 +13,7 @@ import com.x8bit.bitwarden.ui.vault.feature.vault.model.VaultFilterType
data class SearchHandlers(
val onBackClick: () -> Unit,
val onDismissRequest: () -> Unit,
val onItemClick: (cipherId: String, cipherType: CipherType?) -> Unit,
val onItemClick: (id: String, type: SearchState.DisplayItem.ItemType) -> Unit,
val onAutofillItemClick: (String) -> Unit,
val onAutofillAndSaveItemClick: (String) -> Unit,
val onMasterPasswordRepromptSubmit: (password: String, MasterPasswordRepromptData) -> Unit,
@@ -31,13 +31,8 @@ data class SearchHandlers(
SearchHandlers(
onBackClick = { viewModel.trySendAction(SearchAction.BackClick) },
onDismissRequest = { viewModel.trySendAction(SearchAction.DismissDialogClick) },
onItemClick = { cipherId, cipherType ->
viewModel.trySendAction(
SearchAction.ItemClick(
itemId = cipherId,
cipherType = cipherType,
),
)
onItemClick = { id, type ->
viewModel.trySendAction(SearchAction.ItemClick(itemId = id, itemType = type))
},
onAutofillItemClick = {
viewModel.trySendAction(SearchAction.AutofillItemClick(it))
@@ -6,6 +6,7 @@ import androidx.annotation.DrawableRes
import com.bitwarden.core.data.repository.util.SpecialCharWithPrecedenceComparator
import com.bitwarden.send.SendType
import com.bitwarden.send.SendView
import com.bitwarden.ui.util.asText
import com.bitwarden.vault.CipherRepromptType
import com.bitwarden.vault.CipherType
import com.bitwarden.vault.CipherView
@@ -14,7 +15,6 @@ import com.bitwarden.vault.FolderView
import com.x8bit.bitwarden.R
import com.x8bit.bitwarden.data.autofill.util.isActiveWithFido2Credentials
import com.x8bit.bitwarden.data.platform.util.subtitle
import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.ui.platform.base.util.removeDiacritics
import com.x8bit.bitwarden.ui.platform.components.model.IconData
import com.x8bit.bitwarden.ui.platform.feature.search.SearchState
@@ -233,7 +233,7 @@ private fun CipherView.toDisplayItem(
},
isTotp = isTotp,
shouldDisplayMasterPasswordReprompt = reprompt == CipherRepromptType.PASSWORD,
cipherType = this.type,
itemType = SearchState.DisplayItem.ItemType.Vault(type = this.type),
)
private fun CipherView.toIconData(
@@ -375,7 +375,7 @@ private fun SendView.toDisplayItem(
autofillSelectionOptions = emptyList(),
isTotp = false,
shouldDisplayMasterPasswordReprompt = false,
cipherType = null,
itemType = SearchState.DisplayItem.ItemType.Sends(type = this.type),
)
/**
@@ -16,7 +16,6 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.bitwarden.vault.CipherType
import com.x8bit.bitwarden.R
import com.x8bit.bitwarden.ui.platform.base.util.standardHorizontalMargin
import com.x8bit.bitwarden.ui.platform.base.util.toListItemCardStyle
@@ -42,7 +41,7 @@ fun VaultItemListingContent(
showAddTotpBanner: Boolean,
collectionClick: (id: String) -> Unit,
folderClick: (id: String) -> Unit,
vaultItemClick: (id: String, cipherType: CipherType?) -> Unit,
vaultItemClick: (id: String, type: VaultItemListingState.DisplayItem.ItemType) -> Unit,
masterPasswordRepromptSubmit: (password: String, data: MasterPasswordRepromptData) -> Unit,
onOverflowItemClick: (action: ListingItemOverflowAction) -> Unit,
modifier: Modifier = Modifier,
@@ -222,7 +221,7 @@ fun VaultItemListingContent(
cipherId = it.id,
)
} else {
vaultItemClick(it.id, it.type)
vaultItemClick(it.id, it.itemType)
}
},
trailingLabelIcons = it.extraIconList,
@@ -14,6 +14,7 @@ import com.bitwarden.data.repository.util.baseIconUrl
import com.bitwarden.data.repository.util.baseWebSendUrl
import com.bitwarden.fido.Fido2CredentialAutofillView
import com.bitwarden.network.model.PolicyTypeJson
import com.bitwarden.send.SendType
import com.bitwarden.ui.platform.base.BackgroundEvent
import com.bitwarden.ui.platform.base.BaseViewModel
import com.bitwarden.ui.util.Text
@@ -701,7 +702,7 @@ class VaultItemListingViewModel @Inject constructor(
sendEvent(
event = VaultItemListingEvent.NavigateToEditCipher(
cipherId = action.id,
cipherType = requireNotNull(action.cipherType).toVaultItemCipherType(),
cipherType = VaultItemCipherType.LOGIN,
),
)
return
@@ -713,15 +714,15 @@ class VaultItemListingViewModel @Inject constructor(
return
}
val event = when (state.itemListingType) {
is VaultItemListingState.ItemListingType.Vault -> {
val event = when (val itemType = action.type) {
is VaultItemListingState.DisplayItem.ItemType.Vault -> {
VaultItemListingEvent.NavigateToVaultItem(
id = action.id,
type = requireNotNull(action.cipherType).toVaultItemCipherType(),
type = itemType.type.toVaultItemCipherType(),
)
}
is VaultItemListingState.ItemListingType.Send -> {
is VaultItemListingState.DisplayItem.ItemType.Sends -> {
VaultItemListingEvent.NavigateToEditSendItem(id = action.id)
}
}
@@ -2297,7 +2298,7 @@ data class VaultItemListingState(
* creation flow.
* @property shouldShowMasterPasswordReprompt whether or not a master password reprompt is
* required for various secure actions.
* @property type Indicates the type of cipher this is or null if it is not a cipher.
* @property itemType Indicates the type of item this is.
*/
data class DisplayItem(
val id: String,
@@ -2316,8 +2317,23 @@ data class VaultItemListingState(
val isCredentialCreation: Boolean,
val isTotp: Boolean,
val shouldShowMasterPasswordReprompt: Boolean,
val type: CipherType?,
)
val itemType: ItemType,
) {
/**
* Indicates the item type as a send or vault item.
*/
sealed class ItemType {
/**
* Indicates the item type is a send.
*/
data class Sends(val type: SendType) : ItemType()
/**
* Indicates the item type is a vault item.
*/
data class Vault(val type: CipherType) : ItemType()
}
}
/**
* The folder that is displayed to the user on the ItemListingScreen.
@@ -2745,7 +2761,7 @@ sealed class VaultItemListingsAction {
*/
data class ItemClick(
val id: String,
val cipherType: CipherType?,
val type: VaultItemListingState.DisplayItem.ItemType,
) : VaultItemListingsAction()
/**
@@ -1,8 +1,8 @@
package com.x8bit.bitwarden.ui.vault.feature.itemlisting.handlers
import com.bitwarden.vault.CipherType
import com.x8bit.bitwarden.ui.platform.components.model.AccountSummary
import com.x8bit.bitwarden.ui.vault.feature.itemlisting.MasterPasswordRepromptData
import com.x8bit.bitwarden.ui.vault.feature.itemlisting.VaultItemListingState
import com.x8bit.bitwarden.ui.vault.feature.itemlisting.VaultItemListingViewModel
import com.x8bit.bitwarden.ui.vault.feature.itemlisting.VaultItemListingsAction
import com.x8bit.bitwarden.ui.vault.feature.itemlisting.model.ListingItemOverflowAction
@@ -18,7 +18,7 @@ data class VaultItemListingHandlers(
val backClick: () -> Unit,
val searchIconClick: () -> Unit,
val addVaultItemClick: () -> Unit,
val itemClick: (id: String, cipherType: CipherType?) -> Unit,
val itemClick: (id: String, type: VaultItemListingState.DisplayItem.ItemType) -> Unit,
val folderClick: (id: String) -> Unit,
val collectionClick: (id: String) -> Unit,
val masterPasswordRepromptSubmit: (password: String, MasterPasswordRepromptData) -> Unit,
@@ -56,9 +56,9 @@ data class VaultItemListingHandlers(
collectionClick = {
viewModel.trySendAction(VaultItemListingsAction.CollectionClick(it))
},
itemClick = { cipherId, cipherType ->
itemClick = { id, type ->
viewModel.trySendAction(
VaultItemListingsAction.ItemClick(id = cipherId, cipherType = cipherType),
VaultItemListingsAction.ItemClick(id = id, type = type),
)
},
folderClick = { viewModel.trySendAction(VaultItemListingsAction.FolderClick(it)) },
@@ -410,7 +410,7 @@ private fun CipherView.toDisplayItem(
isTotp = isTotp,
shouldShowMasterPasswordReprompt = (reprompt == CipherRepromptType.PASSWORD) &&
hasMasterPassword,
type = this.type,
itemType = VaultItemListingState.DisplayItem.ItemType.Vault(type = this.type),
)
private fun CipherView.toSecondSubtitle(fido2CredentialRpId: String?): String? =
@@ -482,7 +482,7 @@ private fun SendView.toDisplayItem(
shouldShowMasterPasswordReprompt = false,
isCredentialCreation = false,
isTotp = false,
type = null,
itemType = VaultItemListingState.DisplayItem.ItemType.Sends(type = this.type),
)
@get:DrawableRes
@@ -237,7 +237,12 @@ class SearchScreenTest : BaseComposeTest() {
.assertIsDisplayed()
.performClick()
verify {
viewModel.trySendAction(SearchAction.ItemClick("mockId-1", CipherType.LOGIN))
viewModel.trySendAction(
SearchAction.ItemClick(
itemId = "mockId-1",
itemType = SearchState.DisplayItem.ItemType.Vault(type = CipherType.LOGIN),
),
)
}
}
@@ -381,7 +386,7 @@ class SearchScreenTest : BaseComposeTest() {
viewModel.trySendAction(
SearchAction.ItemClick(
itemId = "mockId-1",
cipherType = CipherType.LOGIN,
itemType = SearchState.DisplayItem.ItemType.Vault(type = CipherType.LOGIN),
),
)
}
@@ -9,6 +9,7 @@ import com.bitwarden.data.datasource.disk.base.FakeDispatcherManager
import com.bitwarden.data.repository.model.Environment
import com.bitwarden.network.model.PolicyTypeJson
import com.bitwarden.network.model.SyncResponseJson
import com.bitwarden.send.SendType
import com.bitwarden.ui.platform.base.BaseViewModelTest
import com.bitwarden.ui.util.Text
import com.bitwarden.ui.util.asText
@@ -204,7 +205,7 @@ class SearchViewModelTest : BaseViewModelTest() {
viewModel.trySendAction(
SearchAction.ItemClick(
itemId = "mock",
cipherType = CipherType.LOGIN,
itemType = SearchState.DisplayItem.ItemType.Vault(type = CipherType.LOGIN),
),
)
assertEquals(
@@ -224,7 +225,10 @@ class SearchViewModelTest : BaseViewModelTest() {
val viewModel = createViewModel()
viewModel.eventFlow.test {
viewModel.trySendAction(
SearchAction.ItemClick(itemId = "mock", cipherType = CipherType.LOGIN),
SearchAction.ItemClick(
itemId = "mock",
itemType = SearchState.DisplayItem.ItemType.Vault(type = CipherType.LOGIN),
),
)
assertEquals(
SearchEvent.NavigateToEditCipher(
@@ -240,7 +244,12 @@ class SearchViewModelTest : BaseViewModelTest() {
fun `ItemClick for send item should emit NavigateToEditSend`() = runTest {
val viewModel = createViewModel(DEFAULT_STATE.copy(searchType = SearchTypeData.Sends.All))
viewModel.eventFlow.test {
viewModel.trySendAction(SearchAction.ItemClick(itemId = "mock", cipherType = null))
viewModel.trySendAction(
SearchAction.ItemClick(
itemId = "mock",
itemType = SearchState.DisplayItem.ItemType.Sends(type = SendType.TEXT),
),
)
assertEquals(SearchEvent.NavigateToEditSend(sendId = "mock"), awaitItem())
}
}
@@ -73,7 +73,7 @@ fun createMockDisplayItemForCipher(
autofillSelectionOptions = emptyList(),
shouldDisplayMasterPasswordReprompt = false,
isTotp = isTotp,
cipherType = CipherType.LOGIN,
itemType = SearchState.DisplayItem.ItemType.Vault(type = cipherType),
)
}
@@ -116,7 +116,7 @@ fun createMockDisplayItemForCipher(
autofillSelectionOptions = emptyList(),
shouldDisplayMasterPasswordReprompt = false,
isTotp = false,
cipherType = CipherType.SECURE_NOTE,
itemType = SearchState.DisplayItem.ItemType.Vault(type = cipherType),
)
}
@@ -165,7 +165,7 @@ fun createMockDisplayItemForCipher(
autofillSelectionOptions = emptyList(),
shouldDisplayMasterPasswordReprompt = false,
isTotp = false,
cipherType = CipherType.CARD,
itemType = SearchState.DisplayItem.ItemType.Vault(type = cipherType),
)
}
@@ -205,7 +205,7 @@ fun createMockDisplayItemForCipher(
autofillSelectionOptions = emptyList(),
shouldDisplayMasterPasswordReprompt = false,
isTotp = false,
cipherType = CipherType.IDENTITY,
itemType = SearchState.DisplayItem.ItemType.Vault(type = cipherType),
)
}
@@ -240,7 +240,7 @@ fun createMockDisplayItemForCipher(
autofillSelectionOptions = emptyList(),
shouldDisplayMasterPasswordReprompt = false,
isTotp = false,
cipherType = CipherType.SSH_KEY,
itemType = SearchState.DisplayItem.ItemType.Vault(type = cipherType),
)
}
}
@@ -290,7 +290,7 @@ fun createMockDisplayItemForSend(
autofillSelectionOptions = emptyList(),
shouldDisplayMasterPasswordReprompt = false,
isTotp = false,
cipherType = null,
itemType = SearchState.DisplayItem.ItemType.Sends(type = sendType),
)
}
@@ -330,7 +330,7 @@ fun createMockDisplayItemForSend(
autofillSelectionOptions = emptyList(),
shouldDisplayMasterPasswordReprompt = false,
isTotp = false,
cipherType = null,
itemType = SearchState.DisplayItem.ItemType.Sends(type = sendType),
)
}
}
@@ -19,6 +19,7 @@ import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
import com.bitwarden.data.repository.model.Environment
import com.bitwarden.data.repository.util.baseIconUrl
import com.bitwarden.data.repository.util.baseWebSendUrl
import com.bitwarden.send.SendType
import com.bitwarden.ui.util.asText
import com.bitwarden.vault.CipherType
import com.x8bit.bitwarden.R
@@ -1043,7 +1044,7 @@ class VaultItemListingScreenTest : BaseComposeTest() {
viewModel.trySendAction(
VaultItemListingsAction.ItemClick(
id = "mockId-1",
cipherType = null,
type = VaultItemListingState.DisplayItem.ItemType.Sends(type = SendType.TEXT),
),
)
}
@@ -2337,7 +2338,7 @@ private fun createDisplayItem(number: Int): VaultItemListingState.DisplayItem =
shouldShowMasterPasswordReprompt = false,
iconTestTag = null,
isTotp = false,
type = null,
itemType = VaultItemListingState.DisplayItem.ItemType.Sends(type = SendType.TEXT),
)
private fun createCipherDisplayItem(number: Int): VaultItemListingState.DisplayItem =
@@ -2364,5 +2365,5 @@ private fun createCipherDisplayItem(number: Int): VaultItemListingState.DisplayI
shouldShowMasterPasswordReprompt = false,
iconTestTag = null,
isTotp = true,
type = CipherType.LOGIN,
itemType = VaultItemListingState.DisplayItem.ItemType.Vault(type = CipherType.LOGIN),
)
@@ -20,6 +20,7 @@ import com.bitwarden.data.repository.model.Environment
import com.bitwarden.data.repository.util.baseIconUrl
import com.bitwarden.data.repository.util.baseWebSendUrl
import com.bitwarden.network.model.PolicyTypeJson
import com.bitwarden.send.SendType
import com.bitwarden.ui.platform.base.BaseViewModelTest
import com.bitwarden.ui.util.Text
import com.bitwarden.ui.util.asText
@@ -527,7 +528,9 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
viewModel.trySendAction(
VaultItemListingsAction.ItemClick(
id = "mockId-1",
cipherType = CipherType.LOGIN,
type = VaultItemListingState.DisplayItem.ItemType.Vault(
type = CipherType.LOGIN,
),
),
)
assertEquals(cipherView, awaitItem())
@@ -575,7 +578,9 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
viewModel.trySendAction(
VaultItemListingsAction.ItemClick(
id = "mockId-1",
cipherType = CipherType.LOGIN,
type = VaultItemListingState.DisplayItem.ItemType.Vault(
type = CipherType.LOGIN,
),
),
)
assertEquals(
@@ -610,7 +615,9 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
viewModel.trySendAction(
VaultItemListingsAction.ItemClick(
id = cipherView.id.orEmpty(),
cipherType = CipherType.LOGIN,
type = VaultItemListingState.DisplayItem.ItemType.Vault(
type = CipherType.LOGIN,
),
),
)
@@ -660,10 +667,10 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
)
coEvery {
bitwardenCredentialManager.registerFido2Credential(
any(),
any(),
any(),
any(),
userId = any(),
callingAppInfo = any(),
createPublicKeyCredentialRequest = any(),
selectedCipherView = any(),
)
} returns Fido2RegisterCredentialResult.Success("mockResponse")
@@ -671,7 +678,9 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
viewModel.trySendAction(
VaultItemListingsAction.ItemClick(
id = cipherView.id.orEmpty(),
cipherType = CipherType.LOGIN,
type = VaultItemListingState.DisplayItem.ItemType.Vault(
type = CipherType.LOGIN,
),
),
)
@@ -722,10 +731,10 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
)
coEvery {
bitwardenCredentialManager.registerFido2Credential(
any(),
any(),
any(),
any(),
userId = any(),
callingAppInfo = any(),
createPublicKeyCredentialRequest = any(),
selectedCipherView = any(),
)
} returns Fido2RegisterCredentialResult.Success("mockResponse")
@@ -733,7 +742,9 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
viewModel.trySendAction(
VaultItemListingsAction.ItemClick(
id = cipherView.id.orEmpty(),
cipherType = CipherType.LOGIN,
type = VaultItemListingState.DisplayItem.ItemType.Vault(
type = CipherType.LOGIN,
),
),
)
@@ -802,7 +813,9 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
viewModel.trySendAction(
VaultItemListingsAction.ItemClick(
id = cipherView.id.orEmpty(),
cipherType = CipherType.LOGIN,
type = VaultItemListingState.DisplayItem.ItemType.Vault(
type = CipherType.LOGIN,
),
),
)
@@ -861,7 +874,9 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
viewModel.trySendAction(
VaultItemListingsAction.ItemClick(
id = cipherView.id.orEmpty(),
cipherType = CipherType.LOGIN,
type = VaultItemListingState.DisplayItem.ItemType.Vault(
type = CipherType.LOGIN,
),
),
)
@@ -881,7 +896,12 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
val viewModel = createVaultItemListingViewModel()
viewModel.eventFlow.test {
viewModel.trySendAction(
VaultItemListingsAction.ItemClick(id = "mock", cipherType = CipherType.LOGIN),
VaultItemListingsAction.ItemClick(
id = "mock",
type = VaultItemListingState.DisplayItem.ItemType.Vault(
type = CipherType.LOGIN,
),
),
)
assertEquals(
VaultItemListingEvent.NavigateToVaultItem(
@@ -900,7 +920,10 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
)
viewModel.eventFlow.test {
viewModel.trySendAction(
VaultItemListingsAction.ItemClick(id = "mock", cipherType = null),
VaultItemListingsAction.ItemClick(
id = "mock",
type = VaultItemListingState.DisplayItem.ItemType.Sends(type = SendType.FILE),
),
)
assertEquals(VaultItemListingEvent.NavigateToEditSendItem(id = "mock"), awaitItem())
}
@@ -78,7 +78,7 @@ fun createMockDisplayItemForCipher(
shouldShowMasterPasswordReprompt = false,
iconTestTag = "LoginCipherIcon",
isTotp = isTotp,
type = cipherType,
itemType = VaultItemListingState.DisplayItem.ItemType.Vault(type = cipherType),
)
}
@@ -124,7 +124,7 @@ fun createMockDisplayItemForCipher(
shouldShowMasterPasswordReprompt = false,
iconTestTag = "SecureNoteCipherIcon",
isTotp = false,
type = cipherType,
itemType = VaultItemListingState.DisplayItem.ItemType.Vault(type = cipherType),
)
}
@@ -176,7 +176,7 @@ fun createMockDisplayItemForCipher(
shouldShowMasterPasswordReprompt = false,
iconTestTag = "CardCipherIcon",
isTotp = false,
type = cipherType,
itemType = VaultItemListingState.DisplayItem.ItemType.Vault(type = cipherType),
)
}
@@ -219,7 +219,7 @@ fun createMockDisplayItemForCipher(
shouldShowMasterPasswordReprompt = false,
iconTestTag = "IdentityCipherIcon",
isTotp = false,
type = cipherType,
itemType = VaultItemListingState.DisplayItem.ItemType.Vault(type = cipherType),
)
}
@@ -262,7 +262,7 @@ fun createMockDisplayItemForCipher(
shouldShowMasterPasswordReprompt = false,
iconTestTag = "SshKeyCipherIcon",
isTotp = false,
type = cipherType,
itemType = VaultItemListingState.DisplayItem.ItemType.Vault(type = cipherType),
)
}
}
@@ -315,7 +315,7 @@ fun createMockDisplayItemForSend(
shouldShowMasterPasswordReprompt = false,
iconTestTag = null,
isTotp = false,
type = null,
itemType = VaultItemListingState.DisplayItem.ItemType.Sends(type = sendType),
)
}
@@ -358,7 +358,7 @@ fun createMockDisplayItemForSend(
shouldShowMasterPasswordReprompt = false,
iconTestTag = null,
isTotp = false,
type = null,
itemType = VaultItemListingState.DisplayItem.ItemType.Sends(type = sendType),
)
}
}