package cash.z.ecc.android.sdk.model import androidx.test.filters.SmallTest import cash.z.ecc.android.sdk.fixture.CurrencyConversionFixture import cash.z.ecc.android.sdk.fixture.LocaleFixture import cash.z.ecc.android.sdk.fixture.MonetarySeparatorsFixture import cash.z.ecc.android.sdk.fixture.ZatoshiFixture import kotlinx.datetime.Clock import kotlinx.datetime.Instant import org.junit.Test import kotlin.test.assertIs import kotlin.time.Duration.Companion.seconds class FiatCurrencyConversionRateStateTest { @Test @SmallTest fun future_near() { val zatoshi = ZatoshiFixture.new() val frozenClock = FrozenClock( CurrencyConversionFixture.TIMESTAMP - FiatCurrencyConversionRateState.FUTURE_CUTOFF_AGE_INCLUSIVE ) val currencyConversion = CurrencyConversionFixture.new() val result = zatoshi.toFiatCurrencyState( currencyConversion, LocaleFixture.new(), MonetarySeparatorsFixture.new(), frozenClock ) assertIs(result) } @Test @SmallTest fun future_far() { val zatoshi = ZatoshiFixture.new() val frozenClock = FrozenClock( CurrencyConversionFixture.TIMESTAMP - FiatCurrencyConversionRateState.FUTURE_CUTOFF_AGE_INCLUSIVE - 1.seconds ) val currencyConversion = CurrencyConversionFixture.new() val result = zatoshi.toFiatCurrencyState( currencyConversion, LocaleFixture.new(), MonetarySeparatorsFixture.new(), frozenClock ) assertIs(result) } @Test @SmallTest fun current() { val zatoshi = ZatoshiFixture.new() val frozenClock = FrozenClock(CurrencyConversionFixture.TIMESTAMP) val currencyConversion = CurrencyConversionFixture.new( timestamp = CurrencyConversionFixture.TIMESTAMP - 1.seconds ) val result = zatoshi.toFiatCurrencyState( currencyConversion, LocaleFixture.new(), MonetarySeparatorsFixture.new(), frozenClock ) assertIs(result) } @Test @SmallTest fun stale() { val zatoshi = ZatoshiFixture.new() val frozenClock = FrozenClock(CurrencyConversionFixture.TIMESTAMP) val currencyConversion = CurrencyConversionFixture.new( timestamp = CurrencyConversionFixture.TIMESTAMP - FiatCurrencyConversionRateState.CURRENT_CUTOFF_AGE_INCLUSIVE - 1.seconds ) val result = zatoshi.toFiatCurrencyState( currencyConversion, LocaleFixture.new(), MonetarySeparatorsFixture.new(), frozenClock ) assertIs(result) } @Test @SmallTest fun too_stale() { val zatoshi = ZatoshiFixture.new() val frozenClock = FrozenClock(CurrencyConversionFixture.TIMESTAMP) val currencyConversion = CurrencyConversionFixture.new( timestamp = CurrencyConversionFixture.TIMESTAMP - FiatCurrencyConversionRateState.STALE_CUTOFF_AGE_INCLUSIVE - 1.seconds ) val result = zatoshi.toFiatCurrencyState( currencyConversion, LocaleFixture.new(), MonetarySeparatorsFixture.new(), frozenClock ) assertIs(result) } @Test @SmallTest fun null_conversion_rate() { val zatoshi = ZatoshiFixture.new() val result = zatoshi.toFiatCurrencyState( null, LocaleFixture.new(), MonetarySeparatorsFixture.new() ) assertIs(result) } } private class FrozenClock(private val timestamp: Instant) : Clock { override fun now() = timestamp }