gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[libeufin] branch master updated (756578d -> 7f2a86c)


From: gnunet
Subject: [libeufin] branch master updated (756578d -> 7f2a86c)
Date: Fri, 05 Feb 2021 10:53:38 +0100

This is an automated email from the git hooks/post-receive script.

ms pushed a change to branch master
in repository libeufin.

    from 756578d  refund extra check
     new f8edb0c  renaming
     new 7f2a86c  Refund only on behalf of the ingesting bank account.

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 integration-tests/tests.py                         | 275 +++++++++++----------
 integration-tests/util.py                          |  15 +-
 nexus/src/main/kotlin/tech/libeufin/nexus/Taler.kt |  53 ++--
 .../tech/libeufin/nexus/bankaccount/BankAccount.kt |   2 +-
 4 files changed, 181 insertions(+), 164 deletions(-)

diff --git a/integration-tests/tests.py b/integration-tests/tests.py
index f8fc919..06e0b9b 100755
--- a/integration-tests/tests.py
+++ b/integration-tests/tests.py
@@ -27,7 +27,7 @@ DB = "jdbc:sqlite:/tmp/libeufintestdb"
 SANDBOX_URL = "http://localhost:5000";
 NEXUS_URL = "http://localhost:5001";
 
-PERSONA = LibeufinPersona(
+user0 = LibeufinPersona(
     banking_details = BankingDetails(SANDBOX_URL),
     nexus_details = NexusDetails(NEXUS_URL),
     ebics_details = EbicsDetails(SANDBOX_URL + "/ebicsweb")
@@ -40,27 +40,30 @@ def prepareSandbox():
     # make ebics host at sandbox
     assertResponse(
         post(
-            f"{PERSONA.banking.bank_base_url}/admin/ebics/hosts",
-            json=dict(hostID=PERSONA.ebics.host, 
ebicsVersion=PERSONA.ebics.version),
+            f"{user0.banking.bank_base_url}/admin/ebics/hosts",
+            json=dict(
+                hostID=user0.ebics.host,
+                ebicsVersion=user0.ebics.version
+            ),
         )
     )
     # make new ebics subscriber at sandbox
     assertResponse(
         post(
-            f"{PERSONA.banking.bank_base_url}/admin/ebics/subscribers",
-            json=PERSONA.ebics.get_as_dict(with_url=False),
+            f"{user0.banking.bank_base_url}/admin/ebics/subscribers",
+            json=user0.ebics.get_as_dict(with_url=False),
         )
     )
     # give a bank account to such subscriber, at sandbox
     assertResponse(
         post(
-            f"{PERSONA.banking.bank_base_url}/admin/ebics/bank-accounts",
+            f"{user0.banking.bank_base_url}/admin/ebics/bank-accounts",
             json=dict(
-                name=PERSONA.banking.name,
-                subscriber=PERSONA.ebics.get_as_dict(with_url=False),
-                iban=PERSONA.banking.iban,
-                bic=PERSONA.banking.bic,
-                label=PERSONA.banking.label,
+                name=user0.banking.name,
+                subscriber=user0.ebics.get_as_dict(with_url=False),
+                iban=user0.banking.iban,
+                bic=user0.banking.bic,
+                label=user0.banking.label,
                 currency="EUR"
             )
         )
@@ -71,41 +74,41 @@ def prepareNexus():
     makeNexusSuperuser()
     assertResponse(
         post(
-            f"{PERSONA.nexus.base_url}/bank-connections",
+            f"{user0.nexus.base_url}/bank-connections",
             json=dict(
-                name=PERSONA.nexus.bank_connection,
+                name=user0.nexus.bank_connection,
                 source="new",
                 type="ebics",
-                data=PERSONA.ebics.get_as_dict(with_url=True),
+                data=user0.ebics.get_as_dict(with_url=True),
             ),
-            auth=PERSONA.nexus.auth
+            auth=user0.nexus.auth
         )
     )
     # synchronizing the connection
     assertResponse(
         post(
-            
f"{PERSONA.nexus.base_url}/bank-connections/{PERSONA.nexus.bank_connection}/connect",
+            
f"{user0.nexus.base_url}/bank-connections/{user0.nexus.bank_connection}/connect",
             json=dict(),
-            auth=PERSONA.nexus.auth
+            auth=user0.nexus.auth
         )
     )
     # download offered bank accounts
     assertResponse(
         post(
-            
f"{PERSONA.nexus.base_url}/bank-connections/{PERSONA.nexus.bank_connection}/fetch-accounts",
+            
f"{user0.nexus.base_url}/bank-connections/{user0.nexus.bank_connection}/fetch-accounts",
             json=dict(),
-            auth=PERSONA.nexus.auth
+            auth=user0.nexus.auth
         )
     )
     # import one bank account into the Nexus
     assertResponse(
         post(
-            
f"{PERSONA.nexus.base_url}/bank-connections/{PERSONA.nexus.bank_connection}/import-account",
+            
f"{user0.nexus.base_url}/bank-connections/{user0.nexus.bank_connection}/import-account",
             json=dict(
-                offeredAccountId=PERSONA.banking.label,
-                nexusBankAccountId=PERSONA.nexus.bank_label
+                offeredAccountId=user0.banking.label,
+                nexusBankAccountId=user0.nexus.bank_label
             ),
-            auth=PERSONA.nexus.auth
+            auth=user0.nexus.auth
         )
     )
 
@@ -129,8 +132,8 @@ def teardown_function():
 
 def test_double_username():
     assertResponse(
-        post(f"{PERSONA.nexus.base_url}/users",
-             auth=PERSONA.nexus.auth,
+        post(f"{user0.nexus.base_url}/users",
+             auth=user0.nexus.auth,
              json=dict(username="admin", password="secret")
         ),
         acceptedResponses=[409]
@@ -138,21 +141,21 @@ def test_double_username():
 
 def test_change_nonadmin_password():
     assertResponse(
-        post(f"{PERSONA.nexus.base_url}/users",
-             auth=PERSONA.nexus.auth,
+        post(f"{user0.nexus.base_url}/users",
+             auth=user0.nexus.auth,
              json=dict(username="nonadmin", password="secret")
         )
     )
 
     resp = assertResponse(
         get(
-            f"{PERSONA.nexus.base_url}/bank-accounts",
+            f"{user0.nexus.base_url}/bank-accounts",
             auth=auth.HTTPBasicAuth("nonadmin", "secret")
         )
     )
 
     assertResponse(
-        post(f"{PERSONA.nexus.base_url}/users/password",
+        post(f"{user0.nexus.base_url}/users/password",
              auth=auth.HTTPBasicAuth("nonadmin", "secret"),
              json=dict(newPassword="changed")
         )
@@ -160,7 +163,7 @@ def test_change_nonadmin_password():
 
     assertResponse(
         get(
-            f"{PERSONA.nexus.base_url}/bank-accounts",
+            f"{user0.nexus.base_url}/bank-accounts",
             auth=auth.HTTPBasicAuth("nonadmin", "changed")
         )
     )
@@ -169,24 +172,24 @@ def test_change_nonadmin_password():
 def test_connection_deletion():
     resp = assertResponse(
         get(
-            f"{PERSONA.nexus.base_url}/bank-connections",
-            auth=PERSONA.nexus.auth
+            f"{user0.nexus.base_url}/bank-connections",
+            auth=user0.nexus.auth
         )
     )
     connection = resp.json().get("bankConnections").pop()
-    assert PERSONA.nexus.bank_connection == connection.get("name")
+    assert user0.nexus.bank_connection == connection.get("name")
 
     assertResponse(
         post(
-            f"{PERSONA.nexus.base_url}/bank-connections/delete-connection",
-            json=dict(bankConnectionId=PERSONA.nexus.bank_connection),
-            auth=PERSONA.nexus.auth
+            f"{user0.nexus.base_url}/bank-connections/delete-connection",
+            json=dict(bankConnectionId=user0.nexus.bank_connection),
+            auth=user0.nexus.auth
         )
     )
     resp = assertResponse(
         get(
-            f"{PERSONA.nexus.base_url}/bank-connections",
-            auth=PERSONA.nexus.auth
+            f"{user0.nexus.base_url}/bank-connections",
+            auth=user0.nexus.auth
         )
     )
     assert len(resp.json().get("bankConnections")) == 0
@@ -195,20 +198,20 @@ def test_connection_deletion():
 def test_imported_account():
     resp = assertResponse(
         get(
-            
f"{PERSONA.nexus.base_url}/bank-connections/{PERSONA.nexus.bank_connection}/accounts",
-            auth=PERSONA.nexus.auth
+            
f"{user0.nexus.base_url}/bank-connections/{user0.nexus.bank_connection}/accounts",
+            auth=user0.nexus.auth
         )
     )
     imported_account = resp.json().get("accounts").pop()
-    assert imported_account.get("nexusBankAccountId") == 
PERSONA.nexus.bank_label
+    assert imported_account.get("nexusBankAccountId") == user0.nexus.bank_label
 
 # Expecting a empty history for an account that
 # never made or receivd a payment.
 def test_empty_history():
     resp = assertResponse(
         get(
-            
f"{PERSONA.nexus.base_url}/bank-accounts/{PERSONA.nexus.bank_label}/transactions",
-            auth=PERSONA.nexus.auth
+            
f"{user0.nexus.base_url}/bank-accounts/{user0.nexus.bank_label}/transactions",
+            auth=user0.nexus.auth
         )
     )
     assert len(resp.json().get("transactions")) == 0
@@ -219,25 +222,25 @@ def test_empty_history():
 def test_backup():
     resp = assertResponse(
         post(
-            
f"{PERSONA.nexus.base_url}/bank-connections/{PERSONA.nexus.bank_connection}/export-backup",
+            
f"{user0.nexus.base_url}/bank-connections/{user0.nexus.bank_connection}/export-backup",
             json=dict(passphrase="secret"),
-            auth=PERSONA.nexus.auth
+            auth=user0.nexus.auth
         )
     )
     sleep(3)
     assertResponse(
         post(
-            f"{PERSONA.nexus.base_url}/bank-connections",
+            f"{user0.nexus.base_url}/bank-connections",
             json=dict(name="my-ebics-restored", data=resp.json(), 
passphrase="secret", source="backup"),
-            auth=PERSONA.nexus.auth
+            auth=user0.nexus.auth
         )
     )
 
 def test_ebics_custom_ebics_order():
     assertResponse(
         post(
-            
f"{PERSONA.nexus.base_url}/bank-connections/{PERSONA.nexus.bank_connection}/ebics/download/tsd",
-            auth=PERSONA.nexus.auth
+            
f"{user0.nexus.base_url}/bank-connections/{user0.nexus.bank_connection}/ebics/download/tsd",
+            auth=user0.nexus.auth
         )
     )
 
@@ -245,7 +248,7 @@ def test_ebics_custom_ebics_order():
 # in the account history.
 def test_payment():
     resp = assertResponse(post(
-        
f"{PERSONA.nexus.base_url}/bank-accounts/{PERSONA.nexus.bank_label}/payment-initiations",
+        
f"{user0.nexus.base_url}/bank-accounts/{user0.nexus.bank_label}/payment-initiations",
         json=dict(
             iban="FR7630006000011234567890189",
             bic="AGRIFRPP",
@@ -253,46 +256,46 @@ def test_payment():
             subject="integration test",
             amount="EUR:1",
         ),
-        auth=PERSONA.nexus.auth
+        auth=user0.nexus.auth
     ))
     PAYMENT_UUID = resp.json().get("uuid")
     assertResponse(post("/".join([
-        PERSONA.nexus.base_url,
+        user0.nexus.base_url,
         "bank-accounts",
-        PERSONA.nexus.bank_label,
+        user0.nexus.bank_label,
         "payment-initiations",
         PAYMENT_UUID,
         "submit"]),
         json=dict(),
-        auth=PERSONA.nexus.auth
+        auth=user0.nexus.auth
     ))
     assertResponse(
         post(
-            
f"{PERSONA.nexus.base_url}/bank-accounts/{PERSONA.nexus.bank_label}/fetch-transactions",
-            auth=PERSONA.nexus.auth
+            
f"{user0.nexus.base_url}/bank-accounts/{user0.nexus.bank_label}/fetch-transactions",
+            auth=user0.nexus.auth
         )
     )
     resp = assertResponse(get(
-        
f"{PERSONA.nexus.base_url}/bank-accounts/{PERSONA.nexus.bank_label}/transactions",
-        auth=PERSONA.nexus.auth
+        
f"{user0.nexus.base_url}/bank-accounts/{user0.nexus.bank_label}/transactions",
+        auth=user0.nexus.auth
     ))
     assert len(resp.json().get("transactions")) == 1
 
     # assert now that the bank booked the payment.
     resp = assertResponse(get("/".join([
-        PERSONA.nexus.base_url,
+        user0.nexus.base_url,
         "bank-accounts",
-        PERSONA.nexus.bank_label,
+        user0.nexus.bank_label,
         "payment-initiations",
         PAYMENT_UUID]),
-        auth=PERSONA.nexus.auth
+        auth=user0.nexus.auth
     ))
     assert resp.json()["status"] == "BOOK"
 
     # Posting a second payment initiation, but not submitting it.
     # It's expected to have a "null" status.
     resp = assertResponse(post(
-        
f"{PERSONA.nexus.base_url}/bank-accounts/{PERSONA.nexus.bank_label}/payment-initiations",
+        
f"{user0.nexus.base_url}/bank-accounts/{user0.nexus.bank_label}/payment-initiations",
         json=dict(
             iban="FR7630006000011234567890189",
             bic="AGRIFRPP",
@@ -300,16 +303,16 @@ def test_payment():
             subject="integration test",
             amount="EUR:1",
         ),
-        auth=PERSONA.nexus.auth
+        auth=user0.nexus.auth
     ))
     PAYMENT_UUID_NON_SUBMITTED = resp.json().get("uuid")
     resp = assertResponse(get("/".join([
-        PERSONA.nexus.base_url,
+        user0.nexus.base_url,
         "bank-accounts",
-        PERSONA.nexus.bank_label,
+        user0.nexus.bank_label,
         "payment-initiations",
         PAYMENT_UUID_NON_SUBMITTED]),
-        auth=PERSONA.nexus.auth
+        auth=user0.nexus.auth
     ))
     assert resp.json()["status"] == None
 
@@ -317,17 +320,17 @@ def test_payment():
 @pytest.fixture
 def fetch_transactions():
     assertResponse(post(
-        
f"{PERSONA.nexus.base_url}/bank-accounts/{PERSONA.nexus.bank_label}/fetch-transactions",
-        auth=PERSONA.nexus.auth
+        
f"{user0.nexus.base_url}/bank-accounts/{user0.nexus.bank_label}/fetch-transactions",
+        auth=user0.nexus.auth
     ))
 
 # Book a incoming payment for "persona" at the Sandbox.
 @pytest.fixture
 def make_crdt_payment():
     payment_instruction = dict(
-        creditorIban=PERSONA.banking.iban,
-        creditorBic=PERSONA.banking.bic,
-        creditorName=PERSONA.banking.name,
+        creditorIban=user0.banking.iban,
+        creditorBic=user0.banking.bic,
+        creditorName=user0.banking.name,
         debitorIban="FR00000000000000000000",
         debitorBic="BUKBGB22",
         debitorName="Max Mustermann",
@@ -338,7 +341,7 @@ def make_crdt_payment():
     )
 
     assertResponse(post(
-        f"{PERSONA.banking.bank_base_url}/admin/payments",
+        f"{user0.banking.bank_base_url}/admin/payments",
         json=payment_instruction
     ))
 
@@ -347,16 +350,16 @@ def test_deduplication(make_crdt_payment):
     # fetching twice the transactions and check that
     # the payment made via the fixture shows up only once.
     assertResponse(post(
-        
f"{PERSONA.nexus.base_url}/bank-accounts/{PERSONA.nexus.bank_label}/fetch-transactions",
-        auth=PERSONA.nexus.auth
+        
f"{user0.nexus.base_url}/bank-accounts/{user0.nexus.bank_label}/fetch-transactions",
+        auth=user0.nexus.auth
     ))
     assertResponse(post(
-        
f"{PERSONA.nexus.base_url}/bank-accounts/{PERSONA.nexus.bank_label}/fetch-transactions",
-        auth=PERSONA.nexus.auth
+        
f"{user0.nexus.base_url}/bank-accounts/{user0.nexus.bank_label}/fetch-transactions",
+        auth=user0.nexus.auth
     ))
     resp = assertResponse(get(
-        
f"{PERSONA.nexus.base_url}/bank-accounts/{PERSONA.nexus.bank_label}/transactions",
-        auth=PERSONA.nexus.auth
+        
f"{user0.nexus.base_url}/bank-accounts/{user0.nexus.bank_label}/transactions",
+        auth=user0.nexus.auth
     ))
     assert len(resp.json().get("transactions")) == 1
 
@@ -365,18 +368,18 @@ def test_deduplication(make_crdt_payment):
 def make_taler_facade():
     assertResponse(
         post(
-            f"{PERSONA.nexus.base_url}/facades",
+            f"{user0.nexus.base_url}/facades",
             json=dict(
-                name=PERSONA.nexus.taler_facade_name,
+                name=user0.nexus.taler_facade_name,
                 type="taler-wire-gateway",
                 config=dict(
                     currency="EUR",
-                    bankAccount=PERSONA.nexus.bank_label,
-                    bankConnection=PERSONA.nexus.bank_connection,
+                    bankAccount=user0.nexus.bank_label,
+                    bankConnection=user0.nexus.bank_connection,
                     reserveTransferLevel="UNUSED",
                 )
             ),
-            auth=PERSONA.nexus.auth
+            auth=user0.nexus.auth
         )
     )
 
@@ -384,79 +387,77 @@ def make_taler_facade():
 def test_taler_facade_config(make_taler_facade):
     resp = assertResponse(
         get(
-            
f"{PERSONA.nexus.base_url}/facades/{PERSONA.nexus.taler_facade_name}/taler-wire-gateway/config",
-            auth=PERSONA.nexus.auth
+            
f"{user0.nexus.base_url}/facades/{user0.nexus.taler_facade_name}/taler-wire-gateway/config",
+            auth=user0.nexus.auth
         )
     )
     assertJsonEqual(
         resp.json(),
-        dict(currency="EUR", version="0.0.0", 
name=PERSONA.nexus.taler_facade_name)
+        dict(currency="EUR", version="0.0.0", 
name=user0.nexus.taler_facade_name)
     )
 
 
 def test_taler_facade_incoming(make_taler_facade):
     resp = assertResponse(post(
-        
f"{PERSONA.nexus.base_url}/facades/{PERSONA.nexus.taler_facade_name}/taler-wire-gateway/admin/add-incoming",
+        
f"{user0.nexus.base_url}/facades/{user0.nexus.taler_facade_name}/taler-wire-gateway/admin/add-incoming",
         json=dict(
             amount="EUR:1",
             reserve_pub="1BCZ7KA333E3YJBFWT4J173M3E713YGFFGD856KPSGZN1N8ZKZR0",
             
debit_account="payto://iban/BUKBGB22/DE00000000000000000000?sender-name=TheName"
         ),
-        auth=PERSONA.nexus.auth
+        auth=user0.nexus.auth
     ))
 
     assertResponse(post(
-        
f"{PERSONA.nexus.base_url}/bank-accounts/{PERSONA.nexus.bank_label}/fetch-transactions",
-        auth=PERSONA.nexus.auth
+        
f"{user0.nexus.base_url}/bank-accounts/{user0.nexus.bank_label}/fetch-transactions",
+        auth=user0.nexus.auth
     ))
 
     resp = assertResponse(get(
         "/".join([
-            PERSONA.nexus.base_url,
+            user0.nexus.base_url,
             "facades",
-            PERSONA.nexus.taler_facade_name,
+            user0.nexus.taler_facade_name,
             "taler-wire-gateway/history/incoming?delta=5"]),
-        auth=PERSONA.nexus.auth
+        auth=user0.nexus.auth
     ))
     assert len(resp.json().get("incoming_transactions")) == 1
 
 
 def test_taler_facade_refund(make_taler_facade):
     resp = assertResponse(post(
-        
f"{PERSONA.nexus.base_url}/facades/{PERSONA.nexus.taler_facade_name}/taler-wire-gateway/admin/add-incoming",
+        
f"{user0.nexus.base_url}/facades/{user0.nexus.taler_facade_name}/taler-wire-gateway/admin/add-incoming",
         json=dict(
             amount="EUR:1",
             reserve_pub="invalid reserve public key",
             
debit_account="payto://iban/BUKBGB22/DE00000000000000000000?sender-name=TheName"
         ),
-        auth=PERSONA.nexus.auth
+        auth=user0.nexus.auth
     ))
 
     assertResponse(post(
-        
f"{PERSONA.nexus.base_url}/bank-accounts/{PERSONA.nexus.bank_label}/fetch-transactions",
-        auth=PERSONA.nexus.auth
+        
f"{user0.nexus.base_url}/bank-accounts/{user0.nexus.bank_label}/fetch-transactions",
+        auth=user0.nexus.auth
     ))
 
     assertResponse(post(
-        
f"{PERSONA.nexus.base_url}/bank-accounts/{PERSONA.nexus.bank_label}/submit-all-payment-initiations",
-        auth=PERSONA.nexus.auth
+        
f"{user0.nexus.base_url}/bank-accounts/{user0.nexus.bank_label}/submit-all-payment-initiations",
+        auth=user0.nexus.auth
     ))
 
     # Fetch again the history, so as to find the freshly made refund.
     assertResponse(post(
-        
f"{PERSONA.nexus.base_url}/bank-accounts/{PERSONA.nexus.bank_label}/fetch-transactions",
-        auth=PERSONA.nexus.auth
+        
f"{user0.nexus.base_url}/bank-accounts/{user0.nexus.bank_label}/fetch-transactions",
+        auth=user0.nexus.auth
     ))
 
     resp = assertResponse(
         get(
-            
f"{PERSONA.nexus.base_url}/bank-accounts/{PERSONA.nexus.bank_label}/transactions",
-            auth=PERSONA.nexus.auth
+            
f"{user0.nexus.base_url}/bank-accounts/{user0.nexus.bank_label}/transactions",
+            auth=user0.nexus.auth
         )
     )
 
-    # Find the refund now!
-    print(json.dumps(resp.json(), indent=2))
     transactionsList = resp.json().get("transactions") 
     assert len(transactionsList) == 2
     for transaction in transactionsList:
@@ -470,7 +471,7 @@ def test_taler_facade_refund(make_taler_facade):
 def test_taler_facade_outgoing(make_taler_facade):
     assertResponse(
         post(
-            
f"{PERSONA.nexus.base_url}/facades/{PERSONA.nexus.taler_facade_name}/taler-wire-gateway/transfer",
+            
f"{user0.nexus.base_url}/facades/{user0.nexus.taler_facade_name}/taler-wire-gateway/transfer",
             json=dict(
                 request_uid="0",
                 amount="EUR:1",
@@ -478,27 +479,27 @@ def test_taler_facade_outgoing(make_taler_facade):
                 wtid="nice",
                 
credit_account="payto://iban/AGRIFRPP/FR7630006000011234567890189?receiver-name=theName"
             ),
-            auth=PERSONA.nexus.auth
+            auth=user0.nexus.auth
         )
     )
     assertResponse(
         post(
-            
f"{PERSONA.nexus.base_url}/bank-accounts/{PERSONA.nexus.bank_label}/payment-initiations/1/submit",
+            
f"{user0.nexus.base_url}/bank-accounts/{user0.nexus.bank_label}/payment-initiations/1/submit",
             json=dict(),
-            auth=PERSONA.nexus.auth
+            auth=user0.nexus.auth
         )
     )
     assertResponse(
         post(
-            
f"{PERSONA.nexus.base_url}/bank-accounts/{PERSONA.nexus.bank_label}/fetch-transactions",
-            auth=PERSONA.nexus.auth
+            
f"{user0.nexus.base_url}/bank-accounts/{user0.nexus.bank_label}/fetch-transactions",
+            auth=user0.nexus.auth
         )
     )
 
     resp = assertResponse(
         get(
-            
f"{PERSONA.nexus.base_url}/facades/{PERSONA.nexus.taler_facade_name}/taler-wire-gateway/history/outgoing?delta=5",
-            auth=PERSONA.nexus.auth
+            
f"{user0.nexus.base_url}/facades/{user0.nexus.taler_facade_name}/taler-wire-gateway/history/outgoing?delta=5",
+            auth=user0.nexus.auth
         )
     )
     assert len(resp.json().get("outgoing_transactions")) == 1
@@ -506,14 +507,14 @@ def test_taler_facade_outgoing(make_taler_facade):
 def test_double_connection_name():
     assertResponse(
         post(
-            f"{PERSONA.nexus.base_url}/bank-connections",
+            f"{user0.nexus.base_url}/bank-connections",
             json=dict(
-                name=PERSONA.nexus.bank_connection,
+                name=user0.nexus.bank_connection,
                 source="new",
                 type="ebics",
-                data=PERSONA.ebics.get_as_dict(with_url=True),
+                data=user0.ebics.get_as_dict(with_url=True),
             ),
-            auth=PERSONA.nexus.auth
+            auth=user0.nexus.auth
         ),
         [409] # Conflict
     )
@@ -523,15 +524,15 @@ def test_ingestion_camt53_non_singleton():
         camt = f.read()
     assertResponse(
         post(
-            
f"{PERSONA.nexus.base_url}/bank-accounts/{PERSONA.nexus.bank_label}/test-camt-ingestion/C53",
-            auth=PERSONA.nexus.auth,
+            
f"{user0.nexus.base_url}/bank-accounts/{user0.nexus.bank_label}/test-camt-ingestion/C53",
+            auth=user0.nexus.auth,
             data=camt
         )
     )
     resp = assertResponse(
         get(
-            
f"{PERSONA.nexus.base_url}/bank-accounts/{PERSONA.nexus.bank_label}/transactions",
-            auth=PERSONA.nexus.auth
+            
f"{user0.nexus.base_url}/bank-accounts/{user0.nexus.bank_label}/transactions",
+            auth=user0.nexus.auth
         )
     )
     with open("../parsing-tests/samples/camt53-gls-style-1.json") as f:
@@ -544,15 +545,15 @@ def test_ingestion_camt53():
         camt = f.read()
     assertResponse(
         post(
-            
f"{PERSONA.nexus.base_url}/bank-accounts/{PERSONA.nexus.bank_label}/test-camt-ingestion/C53",
-            auth=PERSONA.nexus.auth,
+            
f"{user0.nexus.base_url}/bank-accounts/{user0.nexus.bank_label}/test-camt-ingestion/C53",
+            auth=user0.nexus.auth,
             data=camt
         )
     )
     resp = assertResponse(
         get(
-            
f"{PERSONA.nexus.base_url}/bank-accounts/{PERSONA.nexus.bank_label}/transactions",
-            auth=PERSONA.nexus.auth
+            
f"{user0.nexus.base_url}/bank-accounts/{user0.nexus.bank_label}/transactions",
+            auth=user0.nexus.auth
         )
     )
     with open("../parsing-tests/samples/camt53-gls-style-0.json") as f:
@@ -574,14 +575,14 @@ def test_sandbox_camt():
     )
     assertResponse(
         post(
-            f"{PERSONA.banking.bank_base_url}/admin/payments",
+            f"{user0.banking.bank_base_url}/admin/payments",
             json=payment_instruction
         )
     )
 
     assertResponse(
         post(
-            f"{PERSONA.banking.bank_base_url}/admin/payments/camt",
+            f"{user0.banking.bank_base_url}/admin/payments/camt",
             json=dict(iban="GB33BUKB20201555555555", type=53)
         )
     )
@@ -589,9 +590,9 @@ def test_sandbox_camt():
 def test_schedule_deletion():
     assertResponse(
         post("/".join([
-            PERSONA.nexus.base_url,
+            user0.nexus.base_url,
             "bank-accounts",
-            PERSONA.nexus.bank_label,
+            user0.nexus.bank_label,
             "schedule"]),
             json=dict(
                 name="test-task",
@@ -604,9 +605,9 @@ def test_schedule_deletion():
 
     resp = assertResponse(
         get("/".join([
-            PERSONA.nexus.base_url,
+            user0.nexus.base_url,
             "bank-accounts",
-            PERSONA.nexus.bank_label,
+            user0.nexus.bank_label,
             "schedule",
             "test-task"]),
             auth=auth.HTTPBasicAuth("admin", "x")
@@ -616,9 +617,9 @@ def test_schedule_deletion():
 
     assertResponse(
         delete("/".join([
-            PERSONA.nexus.base_url,
+            user0.nexus.base_url,
             "bank-accounts",
-            PERSONA.nexus.bank_label,
+            user0.nexus.bank_label,
             "schedule",
             "test-task"]),
             auth=auth.HTTPBasicAuth("admin", "x")
@@ -627,9 +628,9 @@ def test_schedule_deletion():
 
     resp = assertResponse(
         get("/".join([
-            PERSONA.nexus.base_url,
+            user0.nexus.base_url,
             "bank-accounts",
-            PERSONA.nexus.bank_label,
+            user0.nexus.bank_label,
             "schedule",
             "test-task"]),
             auth=auth.HTTPBasicAuth("admin", "x")
@@ -640,7 +641,7 @@ def test_schedule_deletion():
 def test_invalid_json():
     assertResponse(
         post(
-            f"{PERSONA.nexus.base_url}/users",
+            f"{user0.nexus.base_url}/users",
             data="malformed",
             headers={"Content-Type": "application/json"},
             auth=auth.HTTPBasicAuth("admin", "x")),
@@ -648,7 +649,7 @@ def test_invalid_json():
     )
     assertResponse(
         post(
-            f"{PERSONA.banking.bank_base_url}/admin/ebics/hosts",
+            f"{user0.banking.bank_base_url}/admin/ebics/hosts",
             data="malformed",
             headers={"Content-Type": "application/json"},
             auth=auth.HTTPBasicAuth("admin", "x")),
diff --git a/integration-tests/util.py b/integration-tests/util.py
index a05283c..4960611 100644
--- a/integration-tests/util.py
+++ b/integration-tests/util.py
@@ -44,12 +44,17 @@ class BankingDetails:
         self.name = name
 
 class NexusDetails:
-    def __init__(self, base_url):
+    def __init__(
+            self, base_url,
+            username = "admin",
+            password = "x",
+            bank_connection_name = "my-ebics",
+            bank_local_name = "local-savings"):
         self.base_url = base_url
-        self.username = "admin"
-        self.password = "x"
-        self.bank_connection = "my-ebics"
-        self.bank_label = "local-savings" 
+        self.username = username
+        self.password = password
+        self.bank_connection = bank_connection_name
+        self.bank_label = bank_local_name
         self.auth = auth.HTTPBasicAuth(self.username, self.password)
         self.taler_facade_name = "taler-wire-gateway"
 
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/Taler.kt 
b/nexus/src/main/kotlin/tech/libeufin/nexus/Taler.kt
index fbb5882..27eee7d 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/Taler.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/Taler.kt
@@ -210,7 +210,7 @@ private fun getTalerFacadeBankAccount(fcid: String): 
NexusBankAccountEntity {
     val facadeState = getTalerFacadeState(fcid)
     return NexusBankAccountEntity.findByName(facadeState.bankAccount) ?: throw 
NexusError(
         HttpStatusCode.NotFound,
-        "Could not find any bank account named ${facadeState.bankAccount}"
+        "The facade: ${fcid} doesn't manage bank account: 
${facadeState.bankAccount}"
     )
 }
 
@@ -354,7 +354,7 @@ private suspend fun talerAddIncoming(call: ApplicationCall, 
httpClient: HttpClie
 }
 
 
-private fun ingestIncoming(payment: NexusBankTransactionEntity, txDtls: 
TransactionDetails) {
+private fun ingestOneIncomingTransaction(payment: NexusBankTransactionEntity, 
txDtls: TransactionDetails) {
     val subject = txDtls.unstructuredRemittanceInformation
     val debtorName = txDtls.debtor?.name
     if (debtorName == null) {
@@ -416,14 +416,19 @@ private fun ingestIncoming(payment: 
NexusBankTransactionEntity, txDtls: Transact
     return
 }
 
-fun prepareRefunds() {
-    logger.debug("Finding new invalid payments to refund")
+fun checkAndPrepareRefunds(bankAccount: NexusBankAccountEntity, lastSeenId: 
Long) {
+    logger.debug("Searching refundable payments of account: ${bankAccount}," +
+            " after last seen transaction id: ${lastSeenId}")
     transaction {
-        TalerInvalidIncomingPaymentEntity.find {
-            TalerInvalidIncomingPaymentsTable.refunded eq false
+        TalerInvalidIncomingPaymentsTable.innerJoin(NexusBankTransactionsTable,
+            { NexusBankTransactionsTable.id }, { 
TalerInvalidIncomingPaymentsTable.payment }).select {
+            TalerInvalidIncomingPaymentsTable.refunded eq false and
+                    (NexusBankTransactionsTable.bankAccount eq 
bankAccount.id.value) and
+                    (NexusBankTransactionsTable.id greater lastSeenId)
+
         }.forEach {
             val paymentData = jacksonObjectMapper().readValue(
-                it.payment.transactionJson,
+                it[NexusBankTransactionsTable.transactionJson],
                 CamtBankAccountEntry::class.java
             )
             if (paymentData.batches == null) {
@@ -449,7 +454,8 @@ fun prepareRefunds() {
             // FIXME: investigate this amount!
             val amount = paymentData.batches[0].batchTransactions[0].amount
             NexusAssert(
-                it.payment.creditDebitIndicator == "CRDT",
+                it[NexusBankTransactionsTable.creditDebitIndicator] == "CRDT" 
&&
+                        it[NexusBankTransactionsTable.bankAccount] == 
bankAccount.id,
                 "Cannot refund a _outgoing_ payment!"
             )
             // FIXME: the amount to refund should be reduced, according to the 
refund fees.
@@ -462,10 +468,10 @@ fun prepareRefunds() {
                     sum = amount.value,
                     currency = amount.currency
                 ),
-                it.payment.bankAccount // the Exchange bank account.
+                bankAccount // the Exchange bank account.
             )
             logger.debug("Refund of transaction (AcctSvcrRef): 
${paymentData.accountServicerRef} got prepared")
-            it.refunded = true
+            it[TalerInvalidIncomingPaymentsTable.refunded] = true
         }
     }
 }
@@ -478,14 +484,19 @@ fun prepareRefunds() {
  * payments got booked as outgoing payments (and mark them accordingly
  * in the local table).
  */
-fun ingestTalerTransactions() {
-    fun ingest(subscriberAccount: NexusBankAccountEntity, facade: 
FacadeEntity) {
-        logger.debug("Ingesting transactions for Taler facade 
${facade.id.value}")
+
+/**
+ *
+ */
+fun ingestTalerTransactions(bankAccountId: String) {
+    fun ingest(bankAccount: NexusBankAccountEntity, facade: FacadeEntity) {
+        logger.debug("Ingesting transactions for Taler facade 
${facade.id.value}," +
+                " and bank account: ${bankAccount.bankAccountName}")
         val facadeState = getTalerFacadeState(facade.facadeName)
         var lastId = facadeState.highestSeenMessageSerialId
         NexusBankTransactionEntity.find {
             /** Those with "our" bank account involved */
-            NexusBankTransactionsTable.bankAccount eq 
subscriberAccount.id.value and
+            NexusBankTransactionsTable.bankAccount eq bankAccount.id.value and
                     /** Those that are booked */
                     (NexusBankTransactionsTable.status eq EntryStatus.BOOK) and
                     /** Those that came later than the latest processed 
payment */
@@ -503,22 +514,22 @@ fun ingestTalerTransactions() {
             }
             when (tx.creditDebitIndicator) {
                 CreditDebitIndicator.CRDT -> {
-                    ingestIncoming(it, txDtls = details)
-                    prepareRefunds()
+                    ingestOneIncomingTransaction(it, txDtls = details)
                 }
                 else -> Unit
             }
             lastId = it.id.value
         }
+        checkAndPrepareRefunds(bankAccount, 
facadeState.highestSeenMessageSerialId)
         facadeState.highestSeenMessageSerialId = lastId
+
     }
     // invoke ingestion for all the facades
     transaction {
-        FacadeEntity.find {
-            FacadesTable.type eq "taler-wire-gateway"
-        }.forEach {
-            val subscriberAccount = getTalerFacadeBankAccount(it.facadeName)
-            ingest(subscriberAccount, it)
+        FacadeEntity.find { FacadesTable.type eq "taler-wire-gateway" 
}.forEach {
+            val facadeBankAccount = getTalerFacadeBankAccount(it.facadeName)
+            if (facadeBankAccount.bankAccountName == bankAccountId)
+                ingest(facadeBankAccount, it)
         }
     }
 }
diff --git 
a/nexus/src/main/kotlin/tech/libeufin/nexus/bankaccount/BankAccount.kt 
b/nexus/src/main/kotlin/tech/libeufin/nexus/bankaccount/BankAccount.kt
index 8222355..5b872cc 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/bankaccount/BankAccount.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/bankaccount/BankAccount.kt
@@ -323,7 +323,7 @@ suspend fun fetchBankAccountTransactions(client: 
HttpClient, fetchSpec: FetchSpe
         )
     }
     val newTransactions = ingestBankMessagesIntoAccount(res.connectionName, 
accountId)
-    ingestTalerTransactions()
+    ingestTalerTransactions(accountId)
     return newTransactions
 }
 

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]