Create initial vault item shell (#253)

This commit is contained in:
David Perez
2023-11-16 18:00:14 -06:00
committed by GitHub
parent 320f3cc6ed
commit 6cce047c2a
13 changed files with 332 additions and 0 deletions

View File

@@ -33,6 +33,7 @@ class VaultUnlockedNavBarScreenTest : BaseComposeTest() {
viewModel = viewModel,
navController = fakeNavHostController,
onNavigateToVaultAddItem = {},
onNavigateToVaultItem = {},
onNavigateToNewSend = {},
onNavigateToDeleteAccount = {},
)
@@ -56,6 +57,7 @@ class VaultUnlockedNavBarScreenTest : BaseComposeTest() {
viewModel = viewModel,
navController = fakeNavHostController,
onNavigateToVaultAddItem = {},
onNavigateToVaultItem = {},
onNavigateToNewSend = {},
onNavigateToDeleteAccount = {},
)
@@ -80,6 +82,7 @@ class VaultUnlockedNavBarScreenTest : BaseComposeTest() {
viewModel = viewModel,
navController = fakeNavHostController,
onNavigateToVaultAddItem = {},
onNavigateToVaultItem = {},
onNavigateToNewSend = {},
onNavigateToDeleteAccount = {},
)
@@ -103,6 +106,7 @@ class VaultUnlockedNavBarScreenTest : BaseComposeTest() {
viewModel = viewModel,
navController = fakeNavHostController,
onNavigateToVaultAddItem = {},
onNavigateToVaultItem = {},
onNavigateToNewSend = {},
onNavigateToDeleteAccount = {},
)
@@ -127,6 +131,7 @@ class VaultUnlockedNavBarScreenTest : BaseComposeTest() {
viewModel = viewModel,
navController = fakeNavHostController,
onNavigateToVaultAddItem = {},
onNavigateToVaultItem = {},
onNavigateToNewSend = {},
onNavigateToDeleteAccount = {},
)
@@ -150,6 +155,7 @@ class VaultUnlockedNavBarScreenTest : BaseComposeTest() {
viewModel = viewModel,
navController = fakeNavHostController,
onNavigateToVaultAddItem = {},
onNavigateToVaultItem = {},
onNavigateToNewSend = {},
onNavigateToDeleteAccount = {},
)
@@ -174,6 +180,7 @@ class VaultUnlockedNavBarScreenTest : BaseComposeTest() {
viewModel = viewModel,
navController = fakeNavHostController,
onNavigateToVaultAddItem = {},
onNavigateToVaultItem = {},
onNavigateToNewSend = {},
onNavigateToDeleteAccount = {},
)
@@ -197,6 +204,7 @@ class VaultUnlockedNavBarScreenTest : BaseComposeTest() {
viewModel = viewModel,
navController = fakeNavHostController,
onNavigateToVaultAddItem = {},
onNavigateToVaultItem = {},
onNavigateToNewSend = {},
onNavigateToDeleteAccount = {},
)

View File

@@ -28,6 +28,7 @@ import org.junit.Test
class VaultScreenTest : BaseComposeTest() {
private var onNavigateToVaultAddItemScreenCalled = false
private var onNavigateToVaultItemScreenCalled = false
private var onDimBottomNavBarRequestCalled = false
private val mutableEventFlow = MutableSharedFlow<VaultEvent>(
@@ -45,6 +46,7 @@ class VaultScreenTest : BaseComposeTest() {
VaultScreen(
viewModel = viewModel,
onNavigateToVaultAddItemScreen = { onNavigateToVaultAddItemScreenCalled = true },
onNavigateToVaultItemScreen = { onNavigateToVaultItemScreenCalled = true },
onDimBottomNavBarRequest = { onDimBottomNavBarRequestCalled = true },
)
}
@@ -115,6 +117,12 @@ class VaultScreenTest : BaseComposeTest() {
assertTrue(onNavigateToVaultAddItemScreenCalled)
}
@Test
fun `NavigateToItemScreen event should call onNavigateToVaultItemScreenCalled`() {
mutableEventFlow.tryEmit(VaultEvent.NavigateToItemScreen(vaultItemId = "id"))
assertTrue(onNavigateToVaultItemScreenCalled)
}
@Test
fun `clicking a favorite item should send VaultItemClick with the correct item`() {
val itemText = "Test Item"

View File

@@ -0,0 +1,51 @@
package com.x8bit.bitwarden.ui.vault.feature.vault.item
import androidx.compose.ui.test.onNodeWithContentDescription
import androidx.compose.ui.test.performClick
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
import io.mockk.every
import io.mockk.mockk
import io.mockk.verify
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow
import org.junit.Before
import org.junit.Test
class VaultItemScreenTest : BaseComposeTest() {
private var onNavigateBackCalled = false
private val mutableEventFlow = MutableSharedFlow<VaultItemEvent>(
extraBufferCapacity = Int.MAX_VALUE,
)
private val mutableStateFlow = MutableStateFlow(DEFAULT_STATE)
private val viewModel = mockk<VaultItemViewModel>(relaxed = true) {
every { eventFlow } returns mutableEventFlow
every { stateFlow } returns mutableStateFlow
}
@Before
fun setUp() {
composeTestRule.setContent {
VaultItemScreen(
viewModel = viewModel,
onNavigateBack = { onNavigateBackCalled = true },
)
}
}
@Test
fun `clicking close button should send CloseClick action`() {
composeTestRule.onNodeWithContentDescription(label = "Close").performClick()
verify {
viewModel.trySendAction(VaultItemAction.CloseClick)
}
}
}
private const val VAULT_ITEM_ID = "vault_item_id"
private val DEFAULT_STATE: VaultItemState = VaultItemState(
vaultItemId = VAULT_ITEM_ID,
)

View File

@@ -0,0 +1,49 @@
package com.x8bit.bitwarden.ui.vault.feature.vault.item
import androidx.lifecycle.SavedStateHandle
import app.cash.turbine.test
import com.x8bit.bitwarden.ui.platform.base.BaseViewModelTest
import kotlinx.coroutines.test.runTest
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test
class VaultItemViewModelTest : BaseViewModelTest() {
@Test
fun `initial state should be correct when not set`() {
val viewModel = createViewModel(state = null)
assertEquals(DEFAULT_STATE, viewModel.stateFlow.value)
}
@Test
fun `initial state should be correct when set`() {
val state = DEFAULT_STATE.copy(vaultItemId = "something_different")
val viewModel = createViewModel(state = state)
assertEquals(state, viewModel.stateFlow.value)
}
@Test
fun `on BackClick should emit NavigateBack`() = runTest {
val viewModel = createViewModel()
viewModel.eventFlow.test {
viewModel.trySendAction(VaultItemAction.CloseClick)
assertEquals(VaultItemEvent.NavigateBack, awaitItem())
}
}
private fun createViewModel(
state: VaultItemState? = DEFAULT_STATE,
vaultItemId: String = VAULT_ITEM_ID,
): VaultItemViewModel = VaultItemViewModel(
savedStateHandle = SavedStateHandle().apply {
set("state", state)
set("vault_item_id", vaultItemId)
},
)
}
private const val VAULT_ITEM_ID = "vault_item_id"
private val DEFAULT_STATE: VaultItemState = VaultItemState(
vaultItemId = VAULT_ITEM_ID,
)