libeufin

Integration and sandbox testing for FinTech APIs and data formats
Log | Files | Refs | Submodules | README | LICENSE

commit e58faac730f96106cd04e5a28f6462c3a376421b
parent 7bbfbcb64e05315f4cbd70c361df63faf95a9275
Author: Antoine A <>
Date:   Thu, 12 Oct 2023 15:21:02 +0000

Fix amount serialization

Diffstat:
Mbank/src/main/kotlin/tech/libeufin/bank/TalerCommon.kt | 9++++++---
Mbank/src/test/kotlin/AmountTest.kt | 7+++++++
Mbank/src/test/kotlin/TalerApiTest.kt | 4++--
3 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/bank/src/main/kotlin/tech/libeufin/bank/TalerCommon.kt b/bank/src/main/kotlin/tech/libeufin/bank/TalerCommon.kt @@ -288,9 +288,12 @@ class TalerAmount { } override fun toString(): String { - val fracNoTrailingZero = this.frac.toString().dropLastWhile { it == '0' } - if (fracNoTrailingZero.isEmpty()) return "$currency:$value" - return "$currency:$value.$fracNoTrailingZero" + if (frac == 0) { + return "$currency:$value" + } else { + return "$currency:$value.${frac.toString().padStart(8, '0')}" + .dropLastWhile { it == '0' } // Trim useless fractional trailing 0 + } } internal object Serializer : KSerializer<TalerAmount> { diff --git a/bank/src/test/kotlin/AmountTest.kt b/bank/src/test/kotlin/AmountTest.kt @@ -92,6 +92,13 @@ class AmountTest { } @Test + fun parseRoundTrip() { + for (amount in listOf("EUR:4", "EUR:0.02", "EUR:4.12")) { + assertEquals(amount, TalerAmount(amount).toString()) + } + } + + @Test fun normalize() { assertEquals(TalerAmount("EUR:6"), TalerAmount(4L, 2 * TalerAmount.FRACTION_BASE, "EUR").normalize()) assertEquals(TalerAmount("EUR:6.00000001"), TalerAmount(4L, 2 * TalerAmount.FRACTION_BASE + 1, "EUR").normalize()) diff --git a/bank/src/test/kotlin/TalerApiTest.kt b/bank/src/test/kotlin/TalerApiTest.kt @@ -55,11 +55,11 @@ class TalerApiTest { ) - suspend fun Database.genTransfer(from: String, to: BankAccount) { + suspend fun Database.genTransfer(from: String, to: BankAccount, amount: String = "KUDOS:10") { talerTransferCreate( req = TransferRequest( request_uid = randHashCode(), - amount = TalerAmount(10, 0, "KUDOS"), + amount = TalerAmount(amount), exchange_base_url = "http://exchange.example.com/", wtid = randShortHashCode(), credit_account ="${stripIbanPayto(to.internalPaytoUri)}"