zcash-android-wallet-sdk/demo-app/src/androidTest/java/cash/z/wallet/sdk/sample/demoapp/model/ZatoshiExtTest.kt

79 lines
2.6 KiB
Kotlin

package cash.z.wallet.sdk.sample.demoapp.model
import androidx.test.filters.SmallTest
import cash.z.ecc.android.sdk.demoapp.ext.ui.toFiatString
import cash.z.ecc.android.sdk.demoapp.model.MonetarySeparators
import cash.z.wallet.sdk.sample.demoapp.fixture.CurrencyConversionFixture
import cash.z.wallet.sdk.sample.demoapp.fixture.LocaleFixture
import cash.z.wallet.sdk.sample.demoapp.fixture.MonetarySeparatorsFixture
import cash.z.wallet.sdk.sample.demoapp.fixture.ZatoshiFixture
import org.junit.Test
import kotlin.test.assertNotNull
import kotlin.test.assertTrue
class ZatoshiExtTest {
companion object {
private val EN_US_SEPARATORS = MonetarySeparatorsFixture.new()
private val CURRENCY_CONVERSION = CurrencyConversionFixture.new()
}
@Test
@SmallTest
fun zero_zatoshi_to_fiat_conversion_test() {
val zatoshi = ZatoshiFixture.new(0L)
val fiatString = zatoshi.toFiatString(CURRENCY_CONVERSION, LocaleFixture.new(), EN_US_SEPARATORS)
fiatString.also {
assertNotNull(it)
assertTrue(it.isNotEmpty())
assertTrue(it.contains("0"))
assertTrue(it.isValidNumber(EN_US_SEPARATORS))
}
}
@Test
@SmallTest
fun regular_zatoshi_to_fiat_conversion_test() {
val zatoshi = ZatoshiFixture.new(123_456_789L)
val fiatString = zatoshi.toFiatString(CURRENCY_CONVERSION, LocaleFixture.new(), EN_US_SEPARATORS)
fiatString.also {
assertNotNull(it)
assertTrue(it.isNotEmpty())
assertTrue(it.isValidNumber(EN_US_SEPARATORS))
}
}
@Test
@SmallTest
fun rounded_zatoshi_to_fiat_conversion_test() {
val roundedZatoshi = ZatoshiFixture.new(100_000_000L)
val roundedCurrencyConversion = CurrencyConversionFixture.new(
priceOfZec = 100.0
)
val fiatString = roundedZatoshi.toFiatString(
roundedCurrencyConversion,
LocaleFixture.new(),
EN_US_SEPARATORS
)
fiatString.also {
assertNotNull(it)
assertTrue(it.isNotEmpty())
assertTrue(it.isValidNumber(EN_US_SEPARATORS))
assertTrue("$100${EN_US_SEPARATORS.decimal}00" == it)
}
}
}
private fun Char.isDigitOrSeparator(separators: MonetarySeparators): Boolean {
return this.isDigit() || this == separators.decimal || this == separators.grouping
}
private fun String.isValidNumber(separators: MonetarySeparators): Boolean {
return this
.drop(1) // remove currency symbol
.all { return it.isDigitOrSeparator(separators) }
}