1
0
Fork 0
mirror of https://github.com/bitwarden/android.git synced 2025-02-23 00:59:16 +03:00

[PM-13349] Hide edit button unless item is in at least one non-readOnly collection ()

This commit is contained in:
mpbw2 2025-01-06 12:59:30 -05:00 committed by GitHub
parent 484faedcc5
commit b958734946
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 162 additions and 22 deletions
app/src
main/java/com/x8bit/bitwarden/ui/vault/feature/item
test/java/com/x8bit/bitwarden/ui/vault/feature/item

View file

@ -116,11 +116,14 @@ class VaultItemViewModel @Inject constructor(
.data
.canAssignToCollections(cipherViewState.data?.collectionIds)
val canEdit = cipherViewState.data?.edit == true
VaultItemStateData(
cipher = cipherViewState.data,
totpCodeItemData = totpCodeData,
canDelete = canDelete,
canAssociateToCollections = canAssignToCollections,
canEdit = canEdit,
)
},
)
@ -1066,6 +1069,7 @@ class VaultItemViewModel @Inject constructor(
totpCodeItemData = this.data?.totpCodeItemData,
canDelete = this.data?.canDelete == true,
canAssignToCollections = this.data?.canAssociateToCollections == true,
canEdit = this.data?.canEdit == true,
)
}
?: VaultItemState.ViewState.Error(message = errorText)
@ -1303,11 +1307,16 @@ data class VaultItemState(
?.currentCipher
?.deletedDate != null
private val isCipherEditable: Boolean
get() = viewState.asContentOrNull()
?.common
?.canEdit == true
/**
* Whether or not the fab is visible.
*/
val isFabVisible: Boolean
get() = viewState is ViewState.Content && !isCipherDeleted
get() = viewState is ViewState.Content && !isCipherDeleted && isCipherEditable
/**
* Whether or not the cipher is in a collection.
@ -1403,6 +1412,7 @@ data class VaultItemState(
val attachments: List<AttachmentItem>?,
val canDelete: Boolean,
val canAssignToCollections: Boolean,
val canEdit: Boolean,
) : Parcelable {
/**

View file

@ -9,10 +9,12 @@ import com.bitwarden.vault.CipherView
* @property totpCodeItemData The data for the totp code.
* @property canDelete Whether the item can be deleted.
* @property canAssociateToCollections Whether the item can be associated to a collection.
* @property canEdit Whether the item can be edited.
*/
data class VaultItemStateData(
val cipher: CipherView?,
val totpCodeItemData: TotpCodeItemData?,
val canDelete: Boolean,
val canAssociateToCollections: Boolean,
val canEdit: Boolean,
)

View file

@ -41,6 +41,7 @@ fun CipherView.toViewState(
clock: Clock = Clock.systemDefaultZone(),
canDelete: Boolean,
canAssignToCollections: Boolean,
canEdit: Boolean,
): VaultItemState.ViewState =
VaultItemState.ViewState.Content(
common = VaultItemState.ViewState.Content.Common(
@ -83,6 +84,7 @@ fun CipherView.toViewState(
.orEmpty(),
canDelete = canDelete,
canAssignToCollections = canAssignToCollections,
canEdit = canEdit,
),
type = when (type) {
CipherType.LOGIN -> {

View file

@ -2710,6 +2710,7 @@ private val DEFAULT_COMMON: VaultItemState.ViewState.Content.Common =
),
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
private val DEFAULT_PASSKEY = R.string.created_xy.asText(
@ -2793,6 +2794,7 @@ private val EMPTY_COMMON: VaultItemState.ViewState.Content.Common =
attachments = emptyList(),
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
private val EMPTY_LOGIN_TYPE: VaultItemState.ViewState.Content.ItemType.Login =

View file

@ -80,6 +80,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
}
private val mockCipherView = mockk<CipherView> {
every { collectionIds } returns emptyList()
every { edit } returns true
}
@BeforeEach
@ -170,6 +171,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns DEFAULT_VIEW_STATE
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -195,6 +197,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
}
}
@ -214,6 +217,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns loginState
@ -258,6 +262,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns loginState
@ -291,6 +296,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = createTotpCodeData(),
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns loginViewState
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -335,6 +341,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns loginViewState
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -382,6 +389,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = createTotpCodeData(),
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns loginViewState
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -421,6 +429,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = createTotpCodeData(),
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns DEFAULT_VIEW_STATE
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -455,6 +464,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = createTotpCodeData(),
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns viewState
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -493,6 +503,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = createTotpCodeData(),
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns DEFAULT_VIEW_STATE
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -534,6 +545,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = createTotpCodeData(),
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns DEFAULT_VIEW_STATE
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -584,6 +596,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = createTotpCodeData(),
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns DEFAULT_VIEW_STATE
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -617,6 +630,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns loginViewState
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -635,6 +649,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
}
assertEquals(
@ -660,7 +675,9 @@ class VaultItemViewModelTest : BaseViewModelTest() {
isPremiumUser = true,
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true, totpCodeItemData = null,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = null,
)
} returns loginViewState
@ -722,7 +739,9 @@ class VaultItemViewModelTest : BaseViewModelTest() {
isPremiumUser = true,
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true, totpCodeItemData = null,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = null,
)
} returns loginViewState
@ -776,7 +795,9 @@ class VaultItemViewModelTest : BaseViewModelTest() {
isPremiumUser = true,
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true, totpCodeItemData = null,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = null,
)
} returns loginViewState
@ -841,7 +862,9 @@ class VaultItemViewModelTest : BaseViewModelTest() {
isPremiumUser = true,
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true, totpCodeItemData = null,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = null,
)
} returns DEFAULT_VIEW_STATE
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -865,7 +888,9 @@ class VaultItemViewModelTest : BaseViewModelTest() {
isPremiumUser = true,
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true, totpCodeItemData = null,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = null,
)
}
}
@ -880,7 +905,9 @@ class VaultItemViewModelTest : BaseViewModelTest() {
isPremiumUser = true,
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true, totpCodeItemData = null,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = null,
)
} returns createViewState(common = DEFAULT_COMMON.copy(requiresReprompt = false))
every { clipboardManager.setText(text = field) } just runs
@ -898,7 +925,9 @@ class VaultItemViewModelTest : BaseViewModelTest() {
isPremiumUser = true,
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true, totpCodeItemData = null,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = null,
)
organizationEventManager.trackEvent(
event = OrganizationEvent.CipherClientCopiedHiddenField(
@ -937,7 +966,9 @@ class VaultItemViewModelTest : BaseViewModelTest() {
isPremiumUser = true,
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true, totpCodeItemData = null,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = null,
)
} returns DEFAULT_VIEW_STATE
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -969,7 +1000,9 @@ class VaultItemViewModelTest : BaseViewModelTest() {
isPremiumUser = true,
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true, totpCodeItemData = null,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = null,
)
}
}
@ -1004,6 +1037,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns loginViewState
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -1035,7 +1069,9 @@ class VaultItemViewModelTest : BaseViewModelTest() {
isPremiumUser = true,
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true, totpCodeItemData = null,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = null,
)
organizationEventManager.trackEvent(
event = OrganizationEvent.CipherClientToggledHiddenFieldVisible(
@ -1055,7 +1091,9 @@ class VaultItemViewModelTest : BaseViewModelTest() {
isPremiumUser = true,
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true, totpCodeItemData = null,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = null,
)
} returns DEFAULT_VIEW_STATE
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -1079,7 +1117,9 @@ class VaultItemViewModelTest : BaseViewModelTest() {
isPremiumUser = true,
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true, totpCodeItemData = null,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = null,
)
}
}
@ -1098,7 +1138,9 @@ class VaultItemViewModelTest : BaseViewModelTest() {
isPremiumUser = true,
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true, totpCodeItemData = null,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = null,
)
} returns loginViewState
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -1132,7 +1174,9 @@ class VaultItemViewModelTest : BaseViewModelTest() {
isPremiumUser = true,
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true, totpCodeItemData = null,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = null,
)
} returns loginViewState
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -1158,7 +1202,9 @@ class VaultItemViewModelTest : BaseViewModelTest() {
isPremiumUser = true,
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true, totpCodeItemData = null,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = null,
)
}
}
@ -1181,7 +1227,9 @@ class VaultItemViewModelTest : BaseViewModelTest() {
isPremiumUser = true,
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true, totpCodeItemData = null,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = null,
)
} returns loginViewState
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -1229,7 +1277,9 @@ class VaultItemViewModelTest : BaseViewModelTest() {
isPremiumUser = true,
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true, totpCodeItemData = null,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = null,
)
} returns DEFAULT_VIEW_STATE
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -1253,7 +1303,9 @@ class VaultItemViewModelTest : BaseViewModelTest() {
isPremiumUser = true,
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true, totpCodeItemData = null,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = null,
)
}
}
@ -1272,7 +1324,9 @@ class VaultItemViewModelTest : BaseViewModelTest() {
isPremiumUser = true,
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true, totpCodeItemData = null,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = null,
)
} returns loginViewState
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -1303,7 +1357,9 @@ class VaultItemViewModelTest : BaseViewModelTest() {
isPremiumUser = true,
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true, totpCodeItemData = null,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = null,
)
} returns DEFAULT_VIEW_STATE
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -1327,7 +1383,9 @@ class VaultItemViewModelTest : BaseViewModelTest() {
isPremiumUser = true,
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true, totpCodeItemData = null,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = null,
)
}
}
@ -1347,6 +1405,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = null,
)
} returns loginViewState
@ -1390,6 +1449,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = null,
)
} returns loginViewState
@ -1447,6 +1507,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = null,
)
} returns loginViewState
@ -1513,6 +1574,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = null,
)
} returns loginViewState
@ -1681,6 +1743,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns DEFAULT_VIEW_STATE
@ -1719,6 +1782,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = createTotpCodeData(),
)
} returns DEFAULT_VIEW_STATE
@ -1760,6 +1824,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = createTotpCodeData(),
)
}
@ -1779,6 +1844,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = createTotpCodeData(),
)
} returns DEFAULT_VIEW_STATE
@ -1807,6 +1873,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = createTotpCodeData(),
)
}
@ -1822,6 +1889,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = createTotpCodeData(),
)
} returns createViewState(common = DEFAULT_COMMON.copy(requiresReprompt = false))
@ -1842,6 +1910,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = createTotpCodeData(),
)
}
@ -1884,6 +1953,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
hasMasterPassword = true,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
totpCodeItemData = createTotpCodeData(),
)
} returns createViewState(common = DEFAULT_COMMON.copy(requiresReprompt = false))
@ -1904,6 +1974,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = createTotpCodeData(),
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
}
}
@ -1929,6 +2000,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = createTotpCodeData(),
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns DEFAULT_VIEW_STATE
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -1955,6 +2027,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = createTotpCodeData(),
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
}
}
@ -1971,6 +2044,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = createTotpCodeData(),
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
}
.returns(
@ -1999,6 +2073,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = createTotpCodeData(),
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
}
}
@ -2016,6 +2091,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = createTotpCodeData(),
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns DEFAULT_VIEW_STATE
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -2046,6 +2122,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = createTotpCodeData(),
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
}
}
@ -2066,6 +2143,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = createTotpCodeData(),
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns loginViewState
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -2099,6 +2177,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = createTotpCodeData(),
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
organizationEventManager.trackEvent(
event = OrganizationEvent.CipherClientToggledPasswordVisible(
@ -2134,6 +2213,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns CARD_VIEW_STATE
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -2161,6 +2241,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
}
}
@ -2176,6 +2257,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns createViewState(
common = DEFAULT_COMMON.copy(requiresReprompt = false),
@ -2197,6 +2279,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
}
}
@ -2213,6 +2296,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns CARD_VIEW_STATE
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -2240,6 +2324,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
}
}
@ -2255,6 +2340,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns createViewState(
common = DEFAULT_COMMON.copy(requiresReprompt = false),
@ -2282,6 +2368,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
}
}
@ -2298,6 +2385,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns CARD_VIEW_STATE
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -2325,6 +2413,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
}
}
@ -2340,6 +2429,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns createViewState(
common = DEFAULT_COMMON.copy(requiresReprompt = false),
@ -2361,6 +2451,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
}
}
@ -2377,6 +2468,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns CARD_VIEW_STATE
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -2404,6 +2496,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
}
}
@ -2419,6 +2512,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns createViewState(
common = DEFAULT_COMMON.copy(requiresReprompt = false),
@ -2446,6 +2540,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
}
}
@ -2475,6 +2570,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns SSH_KEY_VIEW_STATE
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -2505,6 +2601,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns sshKeyViewState
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -2534,6 +2631,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
}
}
@ -2551,6 +2649,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns SSH_KEY_VIEW_STATE
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -2579,6 +2678,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
}
}
@ -2596,6 +2696,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns createViewState(
common = DEFAULT_COMMON.copy(requiresReprompt = false),
@ -2625,6 +2726,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns SSH_KEY_VIEW_STATE
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -2659,6 +2761,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns SSH_KEY_VIEW_STATE
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -2692,6 +2795,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns IDENTITY_VIEW_STATE
mutableVaultItemFlow.value = DataState.Loaded(data = mockCipherView)
@ -2841,6 +2945,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns viewState
val viewModel = createViewModel(state = null)
@ -2882,6 +2987,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns viewState
val viewModel = createViewModel(state = null)
@ -2921,6 +3027,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns viewState
val viewModel = createViewModel(state = null)
@ -2957,6 +3064,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
totpCodeItemData = null,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} returns viewState
val viewModel = createViewModel(state = null)
@ -3185,6 +3293,7 @@ class VaultItemViewModelTest : BaseViewModelTest() {
),
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
private val DEFAULT_VIEW_STATE: VaultItemState.ViewState.Content =

View file

@ -47,6 +47,7 @@ class CipherViewExtensionsTest {
clock = fixedClock,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
assertEquals(
@ -84,6 +85,7 @@ class CipherViewExtensionsTest {
clock = fixedClock,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
assertEquals(
@ -114,6 +116,7 @@ class CipherViewExtensionsTest {
clock = fixedClock,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
assertEquals(
@ -144,6 +147,7 @@ class CipherViewExtensionsTest {
clock = fixedClock,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
assertEquals(
@ -180,6 +184,7 @@ class CipherViewExtensionsTest {
clock = fixedClock,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
assertEquals(
@ -206,6 +211,7 @@ class CipherViewExtensionsTest {
clock = fixedClock,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
assertEquals(
@ -230,6 +236,7 @@ class CipherViewExtensionsTest {
clock = fixedClock,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
assertEquals(
@ -253,6 +260,7 @@ class CipherViewExtensionsTest {
clock = fixedClock,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
assertEquals(
@ -286,6 +294,7 @@ class CipherViewExtensionsTest {
clock = fixedClock,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
assertEquals(
@ -324,6 +333,7 @@ class CipherViewExtensionsTest {
clock = fixedClock,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
assertEquals(
@ -364,6 +374,7 @@ class CipherViewExtensionsTest {
clock = fixedClock,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
assertEquals(
@ -388,6 +399,7 @@ class CipherViewExtensionsTest {
clock = fixedClock,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
val expectedState = VaultItemState.ViewState.Content(
@ -410,6 +422,7 @@ class CipherViewExtensionsTest {
clock = fixedClock,
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
assertEquals(
VaultItemState.ViewState.Content(

View file

@ -172,6 +172,7 @@ fun createCommonContent(
attachments = emptyList(),
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
} else {
VaultItemState.ViewState.Content.Common(
@ -217,6 +218,7 @@ fun createCommonContent(
),
canDelete = true,
canAssignToCollections = true,
canEdit = true,
)
}