2022-03-08 11:05:03 -08:00
|
|
|
package co.electriccoin.zcash.ui.screen.request.view
|
2022-02-17 05:08:06 -08:00
|
|
|
|
|
|
|
import androidx.compose.ui.test.assertIsNotEnabled
|
|
|
|
import androidx.compose.ui.test.junit4.ComposeContentTestRule
|
|
|
|
import androidx.compose.ui.test.junit4.createComposeRule
|
|
|
|
import androidx.compose.ui.test.onNodeWithContentDescription
|
|
|
|
import androidx.compose.ui.test.onNodeWithText
|
|
|
|
import androidx.compose.ui.test.performClick
|
2022-04-01 07:28:16 -07:00
|
|
|
import androidx.compose.ui.test.performTextClearance
|
2022-02-17 05:08:06 -08:00
|
|
|
import androidx.compose.ui.test.performTextInput
|
|
|
|
import androidx.test.filters.MediumTest
|
2023-02-17 03:05:23 -08:00
|
|
|
import cash.z.ecc.android.sdk.fixture.WalletAddressFixture
|
|
|
|
import cash.z.ecc.android.sdk.model.MonetarySeparators
|
2022-06-23 04:31:16 -07:00
|
|
|
import cash.z.ecc.android.sdk.model.Zatoshi
|
2022-02-17 05:08:06 -08:00
|
|
|
import cash.z.ecc.sdk.fixture.ZecRequestFixture
|
|
|
|
import cash.z.ecc.sdk.model.ZecRequest
|
|
|
|
import cash.z.ecc.sdk.model.ZecRequestMessage
|
2022-05-02 12:49:49 -07:00
|
|
|
import co.electriccoin.zcash.test.UiTestPrerequisites
|
2022-03-08 11:05:03 -08:00
|
|
|
import co.electriccoin.zcash.ui.R
|
|
|
|
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
|
|
|
import co.electriccoin.zcash.ui.test.getStringResource
|
2022-02-17 05:08:06 -08:00
|
|
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
|
|
|
import kotlinx.coroutines.runBlocking
|
|
|
|
import kotlinx.coroutines.test.runTest
|
|
|
|
import org.junit.Rule
|
|
|
|
import org.junit.Test
|
|
|
|
import java.util.concurrent.atomic.AtomicInteger
|
|
|
|
import kotlin.test.assertEquals
|
|
|
|
import kotlin.test.assertNotNull
|
|
|
|
import kotlin.test.assertTrue
|
|
|
|
|
2022-05-02 12:49:49 -07:00
|
|
|
class RequestViewTest : UiTestPrerequisites() {
|
2022-02-17 05:08:06 -08:00
|
|
|
@get:Rule
|
|
|
|
val composeTestRule = createComposeRule()
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@MediumTest
|
|
|
|
fun create_button_disabled() {
|
|
|
|
@Suppress("UNUSED_VARIABLE")
|
|
|
|
val testSetup = TestSetup(composeTestRule)
|
|
|
|
|
2022-04-01 07:28:16 -07:00
|
|
|
composeTestRule.assertSendDisabled()
|
2022-02-17 05:08:06 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@MediumTest
|
|
|
|
@OptIn(ExperimentalCoroutinesApi::class)
|
|
|
|
fun create_request_no_message() = runTest {
|
|
|
|
val testSetup = TestSetup(composeTestRule)
|
|
|
|
|
|
|
|
assertEquals(0, testSetup.getOnCreateCount())
|
|
|
|
assertEquals(null, testSetup.getLastCreateZecRequest())
|
|
|
|
|
2022-04-01 07:28:16 -07:00
|
|
|
composeTestRule.setValidAmount()
|
2022-02-17 05:08:06 -08:00
|
|
|
|
2022-04-01 07:28:16 -07:00
|
|
|
composeTestRule.clickCreateAndSend()
|
2022-02-17 05:08:06 -08:00
|
|
|
|
|
|
|
assertEquals(1, testSetup.getOnCreateCount())
|
|
|
|
|
|
|
|
testSetup.getLastCreateZecRequest().also {
|
|
|
|
assertNotNull(it)
|
|
|
|
assertEquals(WalletAddressFixture.unified(), it.address)
|
2022-04-01 07:28:16 -07:00
|
|
|
assertEquals(Zatoshi(12345600000), it.amount)
|
2022-03-01 05:11:23 -08:00
|
|
|
assertTrue(it.message.value.isEmpty())
|
2022-02-17 05:08:06 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@MediumTest
|
|
|
|
@OptIn(ExperimentalCoroutinesApi::class)
|
|
|
|
fun create_request_with_message() = runTest {
|
|
|
|
val testSetup = TestSetup(composeTestRule)
|
|
|
|
|
|
|
|
assertEquals(0, testSetup.getOnCreateCount())
|
|
|
|
assertEquals(null, testSetup.getLastCreateZecRequest())
|
|
|
|
|
2022-04-01 07:28:16 -07:00
|
|
|
composeTestRule.setValidAmount()
|
2022-02-17 05:08:06 -08:00
|
|
|
|
2022-04-01 07:28:16 -07:00
|
|
|
composeTestRule.setValidMessage()
|
2022-02-17 05:08:06 -08:00
|
|
|
|
2022-04-01 07:28:16 -07:00
|
|
|
composeTestRule.clickCreateAndSend()
|
2022-02-17 05:08:06 -08:00
|
|
|
|
|
|
|
assertEquals(1, testSetup.getOnCreateCount())
|
|
|
|
|
|
|
|
testSetup.getLastCreateZecRequest().also {
|
|
|
|
assertNotNull(it)
|
|
|
|
assertEquals(WalletAddressFixture.unified(), it.address)
|
2022-04-01 07:28:16 -07:00
|
|
|
assertEquals(Zatoshi(12345600000), it.amount)
|
2022-03-01 05:11:23 -08:00
|
|
|
assertEquals(ZecRequestFixture.MESSAGE.value, it.message.value)
|
2022-02-17 05:08:06 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@MediumTest
|
2022-04-01 07:28:16 -07:00
|
|
|
fun check_regex_functionality_valid_inputs() {
|
2022-02-17 05:08:06 -08:00
|
|
|
val testSetup = TestSetup(composeTestRule)
|
2022-04-01 07:28:16 -07:00
|
|
|
val separators = MonetarySeparators.current()
|
2022-02-17 05:08:06 -08:00
|
|
|
|
|
|
|
assertEquals(0, testSetup.getOnCreateCount())
|
|
|
|
assertEquals(null, testSetup.getLastCreateZecRequest())
|
|
|
|
|
2022-04-01 07:28:16 -07:00
|
|
|
composeTestRule.setAmount("123")
|
|
|
|
composeTestRule.clickCreateAndSend()
|
|
|
|
assertEquals(1, testSetup.getOnCreateCount())
|
2022-02-17 05:08:06 -08:00
|
|
|
|
2022-04-08 05:33:08 -07:00
|
|
|
// e.g. 123,456
|
|
|
|
composeTestRule.setAmount("123${separators.grouping}456")
|
2022-04-01 07:28:16 -07:00
|
|
|
composeTestRule.clickCreateAndSend()
|
|
|
|
assertEquals(2, testSetup.getOnCreateCount())
|
|
|
|
|
|
|
|
// e.g. 123.
|
|
|
|
composeTestRule.setAmount("123${separators.decimal}")
|
|
|
|
composeTestRule.clickCreateAndSend()
|
|
|
|
assertEquals(3, testSetup.getOnCreateCount())
|
|
|
|
|
|
|
|
// e.g. 123,456.
|
|
|
|
composeTestRule.setAmount("123${separators.grouping}456${separators.decimal}")
|
|
|
|
composeTestRule.clickCreateAndSend()
|
|
|
|
assertEquals(4, testSetup.getOnCreateCount())
|
|
|
|
|
|
|
|
// e.g. 123,456.789
|
|
|
|
composeTestRule.setAmount("123${separators.grouping}456${separators.decimal}789")
|
|
|
|
composeTestRule.clickCreateAndSend()
|
|
|
|
assertEquals(5, testSetup.getOnCreateCount())
|
|
|
|
}
|
2022-02-17 05:08:06 -08:00
|
|
|
|
2022-04-01 07:28:16 -07:00
|
|
|
@Test
|
|
|
|
@MediumTest
|
|
|
|
fun check_regex_functionality_invalid_inputs() {
|
|
|
|
val testSetup = TestSetup(composeTestRule)
|
|
|
|
val separators = MonetarySeparators.current()
|
|
|
|
|
|
|
|
assertEquals(0, testSetup.getOnCreateCount())
|
|
|
|
assertEquals(null, testSetup.getLastCreateZecRequest())
|
|
|
|
|
|
|
|
composeTestRule.setAmount("aaa")
|
|
|
|
composeTestRule.clickCreateAndSend()
|
|
|
|
assertEquals(0, testSetup.getOnCreateCount())
|
|
|
|
|
|
|
|
composeTestRule.setAmount("123aaa")
|
|
|
|
composeTestRule.clickCreateAndSend()
|
|
|
|
assertEquals(0, testSetup.getOnCreateCount())
|
|
|
|
|
|
|
|
// e.g. ,.
|
|
|
|
composeTestRule.setAmount("${separators.grouping}${separators.decimal}")
|
|
|
|
composeTestRule.clickCreateAndSend()
|
|
|
|
assertEquals(0, testSetup.getOnCreateCount())
|
|
|
|
|
|
|
|
// e.g. 123,.
|
|
|
|
composeTestRule.setAmount("123${separators.grouping}${separators.decimal}")
|
|
|
|
composeTestRule.clickCreateAndSend()
|
|
|
|
assertEquals(0, testSetup.getOnCreateCount())
|
|
|
|
|
|
|
|
// e.g. 1,2,3
|
|
|
|
composeTestRule.setAmount("1${separators.grouping}2${separators.grouping}3")
|
|
|
|
composeTestRule.clickCreateAndSend()
|
|
|
|
assertEquals(0, testSetup.getOnCreateCount())
|
2022-02-17 05:08:06 -08:00
|
|
|
|
2022-04-01 07:28:16 -07:00
|
|
|
// e.g. 1.2.3
|
|
|
|
composeTestRule.setAmount("1${separators.decimal}2${separators.decimal}3")
|
|
|
|
composeTestRule.clickCreateAndSend()
|
2022-02-17 05:08:06 -08:00
|
|
|
assertEquals(0, testSetup.getOnCreateCount())
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@MediumTest
|
|
|
|
@OptIn(ExperimentalCoroutinesApi::class)
|
|
|
|
fun max_message_length() = runTest {
|
|
|
|
val testSetup = TestSetup(composeTestRule)
|
|
|
|
|
2022-04-01 07:28:16 -07:00
|
|
|
composeTestRule.setValidAmount()
|
2022-02-17 05:08:06 -08:00
|
|
|
|
2022-04-01 07:28:16 -07:00
|
|
|
composeTestRule.setMessage(
|
|
|
|
buildString {
|
|
|
|
repeat(ZecRequestMessage.MAX_MESSAGE_LENGTH + 1) { number ->
|
|
|
|
append("$number")
|
2022-02-17 05:08:06 -08:00
|
|
|
}
|
|
|
|
}
|
2022-04-01 07:28:16 -07:00
|
|
|
)
|
2022-02-17 05:08:06 -08:00
|
|
|
|
2022-04-01 07:28:16 -07:00
|
|
|
composeTestRule.clickCreateAndSend()
|
2022-02-17 05:08:06 -08:00
|
|
|
|
|
|
|
assertEquals(1, testSetup.getOnCreateCount())
|
|
|
|
|
|
|
|
testSetup.getLastCreateZecRequest().also {
|
|
|
|
assertNotNull(it)
|
|
|
|
assertEquals(WalletAddressFixture.unified(), it.address)
|
2022-04-01 07:28:16 -07:00
|
|
|
assertEquals(Zatoshi(12345600000), it.amount)
|
2022-03-01 05:11:23 -08:00
|
|
|
assertTrue(it.message.value.isEmpty())
|
2022-02-17 05:08:06 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@MediumTest
|
|
|
|
fun back() {
|
|
|
|
val testSetup = TestSetup(composeTestRule)
|
|
|
|
|
|
|
|
assertEquals(0, testSetup.getOnBackCount())
|
|
|
|
|
2022-04-01 07:28:16 -07:00
|
|
|
composeTestRule.clickBack()
|
2022-02-17 05:08:06 -08:00
|
|
|
|
|
|
|
assertEquals(1, testSetup.getOnBackCount())
|
|
|
|
}
|
|
|
|
|
|
|
|
private class TestSetup(private val composeTestRule: ComposeContentTestRule) {
|
|
|
|
|
|
|
|
private val onBackCount = AtomicInteger(0)
|
|
|
|
private val onCreateCount = AtomicInteger(0)
|
2022-06-22 02:48:19 -07:00
|
|
|
|
2022-02-17 05:08:06 -08:00
|
|
|
@Volatile
|
|
|
|
private var onCreateZecRequest: ZecRequest? = null
|
|
|
|
|
|
|
|
fun getOnBackCount(): Int {
|
|
|
|
composeTestRule.waitForIdle()
|
|
|
|
return onBackCount.get()
|
|
|
|
}
|
|
|
|
|
|
|
|
fun getOnCreateCount(): Int {
|
|
|
|
composeTestRule.waitForIdle()
|
|
|
|
return onCreateCount.get()
|
|
|
|
}
|
|
|
|
|
|
|
|
fun getLastCreateZecRequest(): ZecRequest? {
|
|
|
|
composeTestRule.waitForIdle()
|
|
|
|
return onCreateZecRequest
|
|
|
|
}
|
|
|
|
|
|
|
|
init {
|
|
|
|
composeTestRule.setContent {
|
|
|
|
ZcashTheme {
|
|
|
|
Request(
|
|
|
|
myAddress = runBlocking { WalletAddressFixture.unified() },
|
|
|
|
goBack = {
|
|
|
|
onBackCount.incrementAndGet()
|
|
|
|
},
|
|
|
|
onCreateAndSend = {
|
|
|
|
onCreateCount.incrementAndGet()
|
|
|
|
onCreateZecRequest = it
|
|
|
|
}
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2022-04-01 07:28:16 -07:00
|
|
|
|
|
|
|
private fun ComposeContentTestRule.clickBack() {
|
|
|
|
onNodeWithContentDescription(getStringResource(R.string.request_back_content_description)).also {
|
|
|
|
it.performClick()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun ComposeContentTestRule.setValidAmount() {
|
|
|
|
onNodeWithText(getStringResource(R.string.request_amount)).also {
|
|
|
|
val separators = MonetarySeparators.current()
|
|
|
|
it.performTextClearance()
|
|
|
|
it.performTextInput("123${separators.decimal}456")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun ComposeContentTestRule.setAmount(amount: String) {
|
|
|
|
onNodeWithText(getStringResource(R.string.request_amount)).also {
|
|
|
|
it.performTextClearance()
|
|
|
|
it.performTextInput(amount)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun ComposeContentTestRule.setValidMessage() {
|
|
|
|
onNodeWithText(getStringResource(R.string.request_message)).also {
|
|
|
|
it.performTextClearance()
|
|
|
|
it.performTextInput(ZecRequestFixture.MESSAGE.value)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun ComposeContentTestRule.setMessage(message: String) {
|
|
|
|
onNodeWithText(getStringResource(R.string.request_message)).also {
|
|
|
|
it.performTextClearance()
|
|
|
|
it.performTextInput(message)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun ComposeContentTestRule.clickCreateAndSend() {
|
2023-10-03 05:23:43 -07:00
|
|
|
onNodeWithText(getStringResource(R.string.request_create), ignoreCase = true).also {
|
2022-04-01 07:28:16 -07:00
|
|
|
it.performClick()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun ComposeContentTestRule.assertSendDisabled() {
|
2023-10-03 05:23:43 -07:00
|
|
|
onNodeWithText(getStringResource(R.string.request_create), ignoreCase = true).also {
|
2022-04-01 07:28:16 -07:00
|
|
|
it.assertIsNotEnabled()
|
|
|
|
}
|
|
|
|
}
|