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

133 lines
4.0 KiB
Kotlin
Raw Normal View History

package cash.z.ecc.sdk.model
import androidx.test.filters.SmallTest
2023-02-17 03:05:23 -08:00
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.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
fun parse_uri_not_null() =
runTest {
val parsed = ZecRequest.fromUri(Zip321UriParseFixture.URI)
assertNotNull(parsed)
}
@Test
@SmallTest
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
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
// 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
fun build_uri_not_null() =
runTest {
val request = Zip321UriBuildFixture.REQUEST
val built = request.toUri()
assertNotNull(built)
}
@Test
@SmallTest
fun build_uri_valid_result() =
runTest {
val request = Zip321UriBuildFixture.REQUEST
val built = request.toUri()
assertTrue(built.isNotEmpty())
assertTrue(built.startsWith("zcash"))
}
@Test
@SmallTest
fun built_uri_correct_result() =
runTest {
val request = Zip321UriBuildFixture.REQUEST
val built = request.toUri()
val expected = Zip321UriBuildFixture.URI
assertEquals(built, expected)
}
@Test
@SmallTest
// 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)
}
}