commit e58faac730f96106cd04e5a28f6462c3a376421b
parent 7bbfbcb64e05315f4cbd70c361df63faf95a9275
Author: Antoine A <>
Date: Thu, 12 Oct 2023 15:21:02 +0000
Fix amount serialization
Diffstat:
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)}"