secant-android-wallet/ui-lib/src/androidTest/java/cash/z/ecc/ui/screen/backup/view/BackupViewTest.kt

232 lines
7.9 KiB
Kotlin
Raw Normal View History

package cash.z.ecc.ui.screen.backup.view
import androidx.compose.ui.test.assertCountEquals
import androidx.compose.ui.test.hasTestTag
import androidx.compose.ui.test.hasText
import androidx.compose.ui.test.junit4.ComposeContentTestRule
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onAllNodesWithTag
import androidx.compose.ui.test.onChildren
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import androidx.test.filters.MediumTest
import cash.z.ecc.sdk.fixture.PersistableWalletFixture
import cash.z.ecc.ui.R
import cash.z.ecc.ui.screen.backup.BackupTags
import cash.z.ecc.ui.screen.backup.model.BackupStage
import cash.z.ecc.ui.screen.backup.state.BackupState
import cash.z.ecc.ui.screen.backup.state.TestChoices
import cash.z.ecc.ui.test.getStringResource
import cash.z.ecc.ui.theme.ZcashTheme
import org.junit.Assert.assertEquals
import org.junit.Rule
import org.junit.Test
class BackupViewTest {
@get:Rule
val composeTestRule = createComposeRule()
// Sanity check the TestSetup
@Test
@MediumTest
fun verify_test_setup_stage_1() {
val testSetup = newTestSetup(BackupStage.EducationOverview)
assertEquals(BackupStage.EducationOverview, testSetup.getStage())
assertEquals(0, testSetup.getOnCompleteCallbackCount())
2021-12-02 12:33:55 -08:00
assertEquals(0, testSetup.getOnCopyToClipboardCount())
}
@Test
@MediumTest
fun verify_test_setup_stage_5() {
val testSetup = newTestSetup(BackupStage.Complete)
assertEquals(BackupStage.Complete, testSetup.getStage())
assertEquals(0, testSetup.getOnCompleteCallbackCount())
2021-12-02 12:33:55 -08:00
assertEquals(0, testSetup.getOnCopyToClipboardCount())
}
@Test
@MediumTest
fun copy_to_clipboard() {
val testSetup = newTestSetup(BackupStage.Seed)
composeTestRule.onNodeWithText(getStringResource(R.string.new_wallet_3_button_copy)).also {
it.performClick()
}
assertEquals(1, testSetup.getOnCopyToClipboardCount())
}
@Test
@MediumTest
fun test_pass() {
val testSetup = newTestSetup(BackupStage.Test)
composeTestRule.onAllNodesWithTag(BackupTags.DROPDOWN_CHIP).also {
it.assertCountEquals(4)
it[0].performClick()
composeTestRule.onNode(hasTestTag(BackupTags.DROPDOWN_MENU)).onChildren()[1].performClick()
it[1].performClick()
composeTestRule.onNode(hasTestTag(BackupTags.DROPDOWN_MENU)).onChildren()[0].performClick()
it[2].performClick()
composeTestRule.onNode(hasTestTag(BackupTags.DROPDOWN_MENU)).onChildren()[3].performClick()
it[3].performClick()
composeTestRule.onNode(hasTestTag(BackupTags.DROPDOWN_MENU)).onChildren()[2].performClick()
}
assertEquals(BackupStage.Complete, testSetup.getStage())
}
@Test
@MediumTest
fun test_fail() {
val testSetup = newTestSetup(BackupStage.Test)
composeTestRule.onAllNodesWithTag(BackupTags.DROPDOWN_CHIP).also {
it.assertCountEquals(4)
it[0].performClick()
composeTestRule.onNode(hasTestTag(BackupTags.DROPDOWN_MENU)).onChildren()[0].performClick()
it[1].performClick()
composeTestRule.onNode(hasTestTag(BackupTags.DROPDOWN_MENU)).onChildren()[1].performClick()
it[2].performClick()
composeTestRule.onNode(hasTestTag(BackupTags.DROPDOWN_MENU)).onChildren()[2].performClick()
it[3].performClick()
composeTestRule.onNode(hasTestTag(BackupTags.DROPDOWN_MENU)).onChildren()[3].performClick()
}
assertEquals(BackupStage.Test, testSetup.getStage())
composeTestRule.onNode(hasText(getStringResource(R.string.new_wallet_4_header_ouch)))
composeTestRule.onNode(hasText(getStringResource(R.string.new_wallet_4_button_retry))).performClick()
assertEquals(BackupStage.Seed, testSetup.getStage())
}
@Test
@MediumTest
fun last_stage_click_finish() {
val testSetup = newTestSetup(BackupStage.Complete)
val goToWalletButton = composeTestRule.onNodeWithText(getStringResource(R.string.new_wallet_5_button_finished))
goToWalletButton.performClick()
2021-12-02 12:33:55 -08:00
assertEquals(0, testSetup.getOnCopyToClipboardCount())
assertEquals(1, testSetup.getOnCompleteCallbackCount())
}
@Test
@MediumTest
fun last_stage_click_back_to_seed() {
val testSetup = newTestSetup(BackupStage.Complete)
val newWalletButton = composeTestRule.onNodeWithText(getStringResource(R.string.new_wallet_5_button_back))
newWalletButton.performClick()
2021-12-02 12:33:55 -08:00
assertEquals(0, testSetup.getOnCopyToClipboardCount())
assertEquals(0, testSetup.getOnCompleteCallbackCount())
assertEquals(BackupStage.Seed, testSetup.getStage())
}
@Test
@MediumTest
fun multi_stage_progression() {
val testSetup = newTestSetup(BackupStage.EducationOverview)
composeTestRule.onNodeWithText(getStringResource(R.string.new_wallet_1_button)).also {
it.performClick()
}
assertEquals(BackupStage.EducationRecoveryPhrase, testSetup.getStage())
composeTestRule.onNodeWithText(getStringResource(R.string.new_wallet_2_button)).also {
it.performClick()
}
assertEquals(BackupStage.Seed, testSetup.getStage())
2021-12-02 12:33:55 -08:00
composeTestRule.onNodeWithText(getStringResource(R.string.new_wallet_3_button_copy)).also {
it.performClick()
}
assertEquals(1, testSetup.getOnCopyToClipboardCount())
composeTestRule.onNodeWithText(getStringResource(R.string.new_wallet_3_button_finished)).also {
it.performClick()
}
assertEquals(BackupStage.Test, testSetup.getStage())
composeTestRule.onAllNodesWithTag(BackupTags.DROPDOWN_CHIP).also {
it.assertCountEquals(4)
it[0].performClick()
composeTestRule.onNode(hasTestTag(BackupTags.DROPDOWN_MENU)).onChildren()[1].performClick()
it[1].performClick()
composeTestRule.onNode(hasTestTag(BackupTags.DROPDOWN_MENU)).onChildren()[0].performClick()
it[2].performClick()
composeTestRule.onNode(hasTestTag(BackupTags.DROPDOWN_MENU)).onChildren()[3].performClick()
it[3].performClick()
composeTestRule.onNode(hasTestTag(BackupTags.DROPDOWN_MENU)).onChildren()[2].performClick()
}
assertEquals(BackupStage.Complete, testSetup.getStage())
composeTestRule.onNode(hasText(getStringResource(R.string.new_wallet_5_button_finished))).performClick()
assertEquals(1, testSetup.getOnCompleteCallbackCount())
}
private fun newTestSetup(initalStage: BackupStage) = TestSetup(composeTestRule, initalStage)
private class TestSetup(private val composeTestRule: ComposeContentTestRule, initalStage: BackupStage) {
private val state = BackupState(initalStage)
2021-12-02 12:33:55 -08:00
private var onCopyToClipboardCount = 0
private var onCompleteCallbackCount = 0
2021-12-02 12:33:55 -08:00
fun getOnCopyToClipboardCount(): Int {
composeTestRule.waitForIdle()
return onCopyToClipboardCount
}
fun getOnCompleteCallbackCount(): Int {
composeTestRule.waitForIdle()
return onCompleteCallbackCount
}
fun getStage(): BackupStage {
composeTestRule.waitForIdle()
return state.current.value
}
init {
composeTestRule.setContent {
ZcashTheme {
BackupWallet(
PersistableWalletFixture.new(),
state,
TestChoices(),
2021-12-02 12:33:55 -08:00
onCopyToClipboard = { onCopyToClipboardCount++ },
onComplete = { onCompleteCallbackCount++ }
)
}
}
}
}
}