summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntoine A <>2023-10-12 15:21:02 +0000
committerAntoine A <>2023-10-12 15:21:02 +0000
commite58faac730f96106cd04e5a28f6462c3a376421b (patch)
tree29d6f1b75ab56931da5c6145331b0d179211d915
parent7bbfbcb64e05315f4cbd70c361df63faf95a9275 (diff)
downloadlibeufin-e58faac730f96106cd04e5a28f6462c3a376421b.tar.gz
libeufin-e58faac730f96106cd04e5a28f6462c3a376421b.tar.bz2
libeufin-e58faac730f96106cd04e5a28f6462c3a376421b.zip
Fix amount serialization
-rw-r--r--bank/src/main/kotlin/tech/libeufin/bank/TalerCommon.kt9
-rw-r--r--bank/src/test/kotlin/AmountTest.kt7
-rw-r--r--bank/src/test/kotlin/TalerApiTest.kt4
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)}"