commit 107a5bc855579b588fe3c22210f810296075b5b0
parent 9e55ab8af0c945123746d4dd17ace0bee56f89b5
Author: Marcello Stanisci <stanisci.m@gmail.com>
Date: Wed, 8 Apr 2020 19:33:37 +0200
testing payto/amount parsers
Diffstat:
2 files changed, 27 insertions(+), 5 deletions(-)
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/taler.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/taler.kt
@@ -76,7 +76,7 @@ class Taler(app: Route) {
data class Payto(
val name: String,
val iban: String,
- val bic: String?
+ val bic: String // empty string in case no BIC was given
)
data class AmountWithCurrency(
val currency: String,
@@ -86,10 +86,11 @@ class Taler(app: Route) {
/** Helper functions */
fun parsePayto(paytoUri: String): Payto {
- val match = Regex("payto://.*/([A-Z0-9]+)/([A-Z0-9]+)?\\?name=(\\w+)").find(paytoUri) ?: throw
+ // payto://iban/BIC?/IBAN?name=<name>
+ val match = Regex("payto://iban/([A-Z0-9]+/)?([A-Z0-9]+)\\?name=(\\w+)").find(paytoUri) ?: throw
NexusError(HttpStatusCode.BadRequest, "invalid payto URI ($paytoUri)")
- val (iban, bic, name) = match.destructured
- return Payto(name, iban, bic)
+ val (bic, iban, name) = match.destructured
+ return Payto(name, iban, bic.replace("/", ""))
}
fun parseAmount(amount: String): AmountWithCurrency {
diff --git a/nexus/src/test/kotlin/taler.kt b/nexus/src/test/kotlin/taler.kt
@@ -5,13 +5,34 @@ import io.ktor.routing.Route
import io.ktor.routing.RouteSelector
import io.ktor.routing.RouteSelectorEvaluation
import io.ktor.util.InternalAPI
+import org.junit.Before
import org.junit.Test
import tech.libeufin.nexus.Taler
+import tech.libeufin.util.Amount
+import java.math.BigDecimal
class TalerTest {
+
+ @InternalAPI
+ val taler = Taler(Route(null, RootRouteSelector("unused")))
+
@InternalAPI
@Test
fun paytoParserTest() {
- val taler = Taler(Route(null, RootRouteSelector("unused")))
+ val payto = taler.parsePayto("payto://iban/ABC/XYZ?name=foo")
+ assert(payto.bic == "ABC" && payto.iban == "XYZ" && payto.name == "foo")
+ val paytoNoBic = taler.parsePayto("payto://iban/XYZ?name=foo")
+ assert(paytoNoBic.bic == "" && paytoNoBic.iban == "XYZ" && paytoNoBic.name == "foo")
+ }
+
+ @InternalAPI
+ @Test
+ fun amountParserTest() {
+ val amount = taler.parseAmount("EUR:1")
+ assert(amount.currency == "EUR" && amount.amount.equals(BigDecimal(1)))
+ val amount299 = taler.parseAmount("EUR:2.99")
+ assert(amount299.amount.compareTo(Amount("2.99")) == 0)
+ val amount25 = taler.parseAmount("EUR:2.5")
+ assert(amount25.amount.compareTo(Amount("2.5")) == 0)
}
}
\ No newline at end of file