secant-android-wallet/sdk-ext-lib/src/androidTest/java/cash/z/ecc/sdk/model/ZecRequestTest.kt

132 lines
4.1 KiB
Kotlin

package cash.z.ecc.sdk.model
import androidx.test.filters.SmallTest
import cash.z.ecc.android.sdk.model.WalletAddress
import cash.z.ecc.android.sdk.model.Zatoshi
import cash.z.ecc.sdk.fixture.Zip321UriBuildFixture
import cash.z.ecc.sdk.fixture.Zip321UriParseFixture
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.runTest
import org.junit.Ignore
import org.junit.Test
import kotlin.test.assertEquals
import kotlin.test.assertNotEquals
import kotlin.test.assertNotNull
import kotlin.test.assertTrue
class ZecRequestTest {
companion object {
private const val URI: String = "zcash:tmXuTnE11JojToagTqxXUn6KvdxDE3iLKbp?amount=1&message=Hello%20world!"
@Suppress("MagicNumber")
private val AMOUNT = Zatoshi(1)
private val MESSAGE = ZecRequestMessage("Hello world!")
private const val ADDRESS_STRING = "tmXuTnE11JojToagTqxXUn6KvdxDE3iLKbp"
private val ADDRESS: WalletAddress.Unified = runBlocking {
WalletAddress.Unified.new(ADDRESS_STRING)
}
val REQUEST = ZecRequest(ADDRESS, AMOUNT, MESSAGE)
}
@Test
@SmallTest
@OptIn(ExperimentalCoroutinesApi::class)
fun parse_uri_not_null() = runTest {
val parsed = ZecRequest.fromUri(Zip321UriParseFixture.URI)
assertNotNull(parsed)
}
@Test
@SmallTest
@OptIn(ExperimentalCoroutinesApi::class)
fun parse_uri_valid_result() = runTest {
val parsed = ZecRequest.fromUri(Zip321UriParseFixture.URI)
assertTrue(parsed.message.value.length <= ZecRequestMessage.MAX_MESSAGE_LENGTH)
assertTrue(parsed.address.address.isNotEmpty())
assertTrue(parsed.amount.value >= 0)
}
@Test
@SmallTest
@OptIn(ExperimentalCoroutinesApi::class)
fun parse_uri_correct_result() = runTest {
val parsed = ZecRequest.fromUri(Zip321UriParseFixture.URI)
val expected = ZecRequest(
WalletAddress.Unified.new(Zip321UriParseFixture.ADDRESS),
Zip321UriParseFixture.AMOUNT,
Zip321UriParseFixture.MESSAGE
)
assertEquals(parsed, expected)
}
@Test
@SmallTest
@OptIn(ExperimentalCoroutinesApi::class)
// TODO [#397]: Waiting for an implementation of Uri parser in SDK project
@Ignore("Waiting for an implementation of Uri parser in SDK project")
fun parse_uri_incorrect_result() = runTest {
val parsed = ZecRequest.fromUri(URI)
val expected = REQUEST
val actual = ZecRequest(
WalletAddress.Unified.new(Zip321UriParseFixture.ADDRESS),
Zip321UriParseFixture.AMOUNT,
Zip321UriParseFixture.MESSAGE
)
assertNotEquals(parsed, expected)
assertEquals(parsed, actual)
}
@Test
@SmallTest
@OptIn(ExperimentalCoroutinesApi::class)
fun build_uri_not_null() = runTest {
val request = Zip321UriBuildFixture.REQUEST
val built = request.toUri()
assertNotNull(built)
}
@Test
@SmallTest
@OptIn(ExperimentalCoroutinesApi::class)
fun build_uri_valid_result() = runTest {
val request = Zip321UriBuildFixture.REQUEST
val built = request.toUri()
assertTrue(built.isNotEmpty())
assertTrue(built.startsWith("zcash"))
}
@Test
@SmallTest
@OptIn(ExperimentalCoroutinesApi::class)
fun built_uri_correct_result() = runTest {
val request = Zip321UriBuildFixture.REQUEST
val built = request.toUri()
val expected = Zip321UriBuildFixture.URI
assertEquals(built, expected)
}
@Test
@SmallTest
@OptIn(ExperimentalCoroutinesApi::class)
// TODO [#397]: Waiting for an implementation of Uri parser in SDK project
@Ignore("Waiting for an implementation of Uri parser in SDK project")
fun build_uri_incorrect_result() = runTest {
val request = Zip321UriBuildFixture.REQUEST
val built = request.toUri()
val expected = URI
val actual = Zip321UriBuildFixture.URI
assertNotEquals(built, expected)
assertEquals(built, actual)
}
}