[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[libeufin] 05/05: Testing:
From: |
gnunet |
Subject: |
[libeufin] 05/05: Testing: |
Date: |
Mon, 18 Sep 2023 14:27:18 +0200 |
This is an automated email from the git hooks/post-receive script.
ms pushed a commit to branch master
in repository libeufin.
commit 4f7ad1304847068479ee58f786a73cd603b2dba7
Author: MS <ms@taler.net>
AuthorDate: Mon Sep 18 14:26:47 2023 +0200
Testing:
POST /transactions
GET /transactions/T_ID
---
.../src/main/kotlin/tech/libeufin/bank/Database.kt | 6 +-
bank/src/main/kotlin/tech/libeufin/bank/Main.kt | 1 +
.../tech/libeufin/bank/transactionsHandlers.kt | 8 ++-
bank/src/test/kotlin/LibeuFinApiTest.kt | 65 +++++++++++++++++++---
4 files changed, 65 insertions(+), 15 deletions(-)
diff --git a/bank/src/main/kotlin/tech/libeufin/bank/Database.kt
b/bank/src/main/kotlin/tech/libeufin/bank/Database.kt
index 330ab5c6..be196676 100644
--- a/bank/src/main/kotlin/tech/libeufin/bank/Database.kt
+++ b/bank/src/main/kotlin/tech/libeufin/bank/Database.kt
@@ -353,7 +353,7 @@ class Database(private val dbConfig: String) {
reconnect()
val stmt = prepare("""
SELECT
- ,bank_account_id
+ bank_account_id
,owning_customer_id
,is_public
,is_taler_exchange
@@ -452,7 +452,7 @@ class Database(private val dbConfig: String) {
,payment_information_id
,end_to_end_id
,direction
- ,owning_customer_id
+ ,bank_account_id
FROM bank_account_transactions
WHERE bank_transaction_id=?
""")
@@ -478,7 +478,7 @@ class Database(private val dbConfig: String) {
else -> throw internalServerError("Wrong direction in
transaction: $this")
}
},
- bankAccountId = it.getLong("owning_customer_id"),
+ bankAccountId = it.getLong("bank_account_id"),
paymentInformationId = it.getString("payment_information_id"),
subject = it.getString("subject"),
transactionDate = it.getLong("transaction_date")
diff --git a/bank/src/main/kotlin/tech/libeufin/bank/Main.kt
b/bank/src/main/kotlin/tech/libeufin/bank/Main.kt
index fd55befd..fe4e4814 100644
--- a/bank/src/main/kotlin/tech/libeufin/bank/Main.kt
+++ b/bank/src/main/kotlin/tech/libeufin/bank/Main.kt
@@ -194,6 +194,7 @@ val webApp: Application.() -> Unit = {
}
// Catch-all branch to mean that the bank wasn't able to manage one
error.
exception<Exception> {call, cause ->
+ cause.printStackTrace()
logger.error(cause.message)
call.respond(
status = HttpStatusCode.InternalServerError,
diff --git a/bank/src/main/kotlin/tech/libeufin/bank/transactionsHandlers.kt
b/bank/src/main/kotlin/tech/libeufin/bank/transactionsHandlers.kt
index 509df766..0fe3ad69 100644
--- a/bank/src/main/kotlin/tech/libeufin/bank/transactionsHandlers.kt
+++ b/bank/src/main/kotlin/tech/libeufin/bank/transactionsHandlers.kt
@@ -18,12 +18,14 @@ fun Routing.transactionsHandlers() {
if ((c.login != resourceName) && (call.getAuthToken() == null))
throw forbidden()
val txData = call.receive<BankAccountTransactionCreate>()
- val payto = parsePayto(txData.payto_uri)
- val subject = payto?.message ?: throw badRequest("Wire transfer lacks
subject")
+ // FIXME: make payto parser IBAN-agnostic?
+ val payto = parsePayto(txData.payto_uri) ?: throw badRequest("Invalid
creditor Payto")
+ val paytoWithoutParams = "payto://iban/${payto.bic}/${payto.iban}"
+ val subject = payto.message ?: throw badRequest("Wire transfer lacks
subject")
val debtorId = c.dbRowId ?: throw internalServerError("Debtor database
ID not found")
// This performs already a SELECT on the bank account,
// like the wire transfer will do as well later!
- val creditorCustomerData =
db.bankAccountGetFromInternalPayto(txData.payto_uri)
+ val creditorCustomerData =
db.bankAccountGetFromInternalPayto(paytoWithoutParams)
?: throw notFound(
"Creditor account not found",
TalerErrorCode.TALER_EC_END // FIXME: define this EC.
diff --git a/bank/src/test/kotlin/LibeuFinApiTest.kt
b/bank/src/test/kotlin/LibeuFinApiTest.kt
index 3a0b9965..ab709804 100644
--- a/bank/src/test/kotlin/LibeuFinApiTest.kt
+++ b/bank/src/test/kotlin/LibeuFinApiTest.kt
@@ -1,10 +1,8 @@
-import io.ktor.auth.*
import io.ktor.client.plugins.*
import io.ktor.client.request.*
import io.ktor.client.statement.*
import io.ktor.http.*
import io.ktor.server.testing.*
-import io.netty.handler.codec.http.HttpResponseStatus
import kotlinx.serialization.json.Json
import net.taler.wallet.crypto.Base32Crockford
import org.junit.Test
@@ -16,14 +14,63 @@ import kotlin.random.Random
class LibeuFinApiTest {
private val customerFoo = Customer(
- login = "foo",
- passwordHash = CryptoUtil.hashpw("pw"),
- name = "Foo",
- phone = "+00",
- email = "foo@b.ar",
- cashoutPayto = "payto://external-IBAN",
- cashoutCurrency = "KUDOS"
+ login = "foo",
+ passwordHash = CryptoUtil.hashpw("pw"),
+ name = "Foo",
+ phone = "+00",
+ email = "foo@b.ar",
+ cashoutPayto = "payto://external-IBAN",
+ cashoutCurrency = "KUDOS"
)
+ private val customerBar = Customer(
+ login = "bar",
+ passwordHash = CryptoUtil.hashpw("pw"),
+ name = "Bar",
+ phone = "+99",
+ email = "bar@example.com",
+ cashoutPayto = "payto://external-IBAN",
+ cashoutCurrency = "KUDOS"
+ )
+ private fun genBankAccount(rowId: Long) = BankAccount(
+ hasDebt = false,
+ internalPaytoUri = "payto://iban/SANDBOXX/${rowId}-IBAN",
+ maxDebt = TalerAmount(100, 0),
+ owningCustomerId = rowId
+ )
+
+ // Testing the creation of bank transactions.
+ @Test
+ fun postTransactionsTest() {
+ val db = initDb()
+ // foo account
+ val fooId = db.customerCreate(customerFoo); assert(fooId != null)
+ assert(db.bankAccountCreate(genBankAccount(fooId!!)))
+ // bar account
+ val barId = db.customerCreate(customerBar); assert(barId != null)
+ assert(db.bankAccountCreate(genBankAccount(barId!!)))
+ // accounts exist, now create one transaction.
+ testApplication {
+ application(webApp)
+ client.post("/accounts/foo/transactions") {
+ expectSuccess = true
+ basicAuth("foo", "pw")
+ contentType(ContentType.Application.Json)
+ // expectSuccess = true
+ setBody("""{
+ "payto_uri":
"payto://iban/SANDBOXX/${barId}-IBAN?message=payout",
+ "amount": "KUDOS:3.3"
+ }
+ """.trimIndent())
+ }
+ // Getting the only tx that exists in the DB, hence has ID == 1.
+ val r = client.get("/accounts/foo/transactions/1") {
+ basicAuth("foo", "pw")
+ expectSuccess = true
+ }
+ val obj: BankAccountTransactionInfo =
Json.decodeFromString(r.bodyAsText())
+ assert(obj.subject == "payout")
+ }
+ }
// Checking the POST /token handling.
@Test
fun tokenTest() {
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.