diff options
author | Antoine A <> | 2023-10-12 15:21:02 +0000 |
---|---|---|
committer | Antoine A <> | 2023-10-12 15:21:02 +0000 |
commit | e58faac730f96106cd04e5a28f6462c3a376421b (patch) | |
tree | 29d6f1b75ab56931da5c6145331b0d179211d915 | |
parent | 7bbfbcb64e05315f4cbd70c361df63faf95a9275 (diff) | |
download | libeufin-e58faac730f96106cd04e5a28f6462c3a376421b.tar.gz libeufin-e58faac730f96106cd04e5a28f6462c3a376421b.tar.bz2 libeufin-e58faac730f96106cd04e5a28f6462c3a376421b.zip |
Fix amount serialization
-rw-r--r-- | bank/src/main/kotlin/tech/libeufin/bank/TalerCommon.kt | 9 | ||||
-rw-r--r-- | bank/src/test/kotlin/AmountTest.kt | 7 | ||||
-rw-r--r-- | bank/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 index 39f024d4..0b866e6b 100644 --- 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 index 650b3fd6..ecae5768 100644 --- 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 index 9aa3b562..a9cbf711 100644 --- 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)}" |