gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] [taler-bank] 02/02: Done with /reject logic.


From: gnunet
Subject: [GNUnet-SVN] [taler-bank] 02/02: Done with /reject logic.
Date: Wed, 13 Dec 2017 13:29:20 +0100

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

marcello pushed a commit to branch master
in repository bank.

commit 2cf47305730c606748cc0e9363c7d2c5de93f989
Author: Marcello Stanisci <address@hidden>
AuthorDate: Wed Dec 13 13:28:36 2017 +0100

    Done with /reject logic.
---
 talerbank/app/tests.py | 71 ++++++++++++++++++++++++++++++++++----------------
 talerbank/app/views.py | 16 +++++++-----
 2 files changed, 57 insertions(+), 30 deletions(-)

diff --git a/talerbank/app/tests.py b/talerbank/app/tests.py
index 40545e0..2c8729a 100644
--- a/talerbank/app/tests.py
+++ b/talerbank/app/tests.py
@@ -373,43 +373,68 @@ class HistoryTestCase(TestCase):
         clear_db()
 
     def test_history(self):
-        for ctx in (HistoryContext(expected_resp={"status": 200},
-                                   delta="4", direction="both"),
-                    HistoryContext(expected_resp={
-                        "field": "row_id", "value": 6,
-                        "status": 200}, delta="+1", start="5", 
direction="both"),
-                    HistoryContext(expected_resp={
-                        "field": "wt_subject", "value": "h",
-                        "status": 200}, delta="-1", start=9, direction="both"),
-                    HistoryContext(expected_resp={"status": 204},
-                                   delta="1", start="11", direction="both"),
-                    HistoryContext(expected_resp={"status": 204},
-                                   delta="+1", direction="cancel+"),
-                    HistoryContext(expected_resp={
-                        "status": 200,
-                        "field": "wt_subject",
-                        "value": "/reject: reimbursement"},
-                                   delta="+1", direction="credit"),
+        for ctx in (HistoryContext(
+                        expected_resp={"status": 200},
+                        delta="4", direction="both"),
+                    HistoryContext(
+                        expected_resp={
+                            "fields": [("row_id", 6)],
+                            "status": 200},
+                        delta="+1", start="5", direction="both"),
+                    HistoryContext(
+                        expected_resp={
+                            "fields": [("wt_subject", "h")],
+                            "status": 200},
+                        delta="-1", start=9, direction="both"),
+                    HistoryContext(
+                        expected_resp={"status": 204},
+                        delta="1", start="11", direction="both"),
+                    HistoryContext(
+                        expected_resp={
+                            "status": 200,
+                            "fields": [("wt_subject", "i"), ("sign", 
"cancel-")]},
+                        start=8, delta="+1", direction="cancel-"),
+                    HistoryContext(
+                        expected_resp={"status": 204},
+                        start=8, delta="-1", direction="cancel-"),
+                    HistoryContext(
+                        expected_resp={"status": 204},
+                        delta="+1", direction="cancel+"),
+                    HistoryContext(
+                        expected_resp={
+                            "status": 200,
+                            "fields":
+                                [("wt_subject",
+                                  "/reject: reimbursement")]},
+                        delta="+1", direction="credit"),
                     HistoryContext(expected_resp={"status": 200},
                                    delta="+1", direction="debit")):
-            response = self.client.get(reverse("history", urlconf=urls), 
ctx.urlargs,
-                                  **{"HTTP_X_TALER_BANK_USERNAME": "User",
-                                     "HTTP_X_TALER_BANK_PASSWORD": "Password"})
+            response = self.client.get(
+                reverse("history", urlconf=urls), ctx.urlargs,
+                **{"HTTP_X_TALER_BANK_USERNAME": "User",
+                   "HTTP_X_TALER_BANK_PASSWORD": "Password"})
             data = response.content.decode("utf-8")
             try:
                 data = json.loads(data)["data"][0]
             except (json.JSONDecodeError, KeyError):
                 data = {}
             self.assertEqual(
-                data.get(ctx.expected_resp.get("field")),
-                ctx.expected_resp.get("value"))
-            self.assertEqual(
                 ctx.expected_resp.get("status"),
                 response.status_code,
                 "Failing request: %s?%s" % \
                     (response.request["PATH_INFO"],
                      unquote(response.request["QUERY_STRING"])))
 
+            # extract expected data from response
+            expected_data = {}
+            response_data = {}
+            for k, v in ctx.expected_resp.get("fields", []):
+                response_data.update({k: data.get(k)})
+                expected_data.update({k: v})
+
+            self.assertEqual(expected_data, response_data)
+
+
 class DBAmountSubtraction(TestCase):
     def setUp(self):
         BankAccount(
diff --git a/talerbank/app/views.py b/talerbank/app/views.py
index d07f021..ed89f6d 100644
--- a/talerbank/app/views.py
+++ b/talerbank/app/views.py
@@ -388,12 +388,11 @@ def serve_history(request, user_account):
     # delta
     parsed_delta = re.search(r"([\+-])?([0-9]+)",
                              request.GET.get("delta"))
+    sign = parsed_delta.group(1)
     # start
     start = int(request.GET.get("start", -1))
 
-    sign = parsed_delta.group(1)
-
-    # Assuming Q() means 'true'
+    # translating delta's sign into query object
     sign_filter = Q()
     if start >= 0:
         sign_filter = Q(id__gt=start)
@@ -426,6 +425,8 @@ def serve_history(request, user_account):
         if entry.credit_account.account_no == 
user_account.bankaccount.account_no:
             counterpart = entry.debit_account.account_no
             sign_ = "+"
+        cancel = "cancel" if entry.cancelled else ""
+        sign_ = cancel + sign_
         history.append(dict(counterpart=counterpart,
                             amount=entry.amount.dump(),
                             sign=sign_,
@@ -458,6 +459,7 @@ def auth_and_login(request):
     return django.contrib.auth.authenticate(username=username,
                                             password=password)
 
address@hidden
 @csrf_exempt
 @require_http_methods(["PUT", "POST"])
 @login_via_headers
@@ -476,9 +478,12 @@ def reject(request, user_account):
         LOGGER.error("you can only reject a transaction where you _got_ money")
         return JsonResponse({"error": "you can only reject a transaction where 
you _got_ money"},
                             status=401) # Unauthorized
+    trans.cancelled = True
+    trans.save()
     try:
         wire_transfer(trans.amount, user_account.bankaccount,
-                      trans.debit_account, "/reject: reimbursement")
+                      trans.debit_account, "/reject: reimbursement",
+                      reimburses=trans)
     except WireTransferException as exc:
         # Logging the error is taken care of wire_transfer()
         return exc.response
@@ -569,7 +574,6 @@ def wire_transfer(amount,
                                debit_account,
                                credit_account,
                                subject,
-                               cancelled=False,
                                reimburses=None):
         LOGGER.info("%s => %s, %s, %s" %
                     (debit_account.account_no,
@@ -584,7 +588,6 @@ def wire_transfer(amount,
                                            credit_account=credit_account,
                                            debit_account=debit_account,
                                            subject=subject,
-                                           cancelled=cancelled,
                                            reimburses=reimburses)
         if debit_account.debit:
             debit_account.amount.add(amount)
@@ -634,7 +637,6 @@ def wire_transfer(amount,
                                       debit_account,
                                       credit_account,
                                       subject,
-                                      kwargs.get("cancelled", False),
                                       kwargs.get("reimburses", None))
     except (CurrencyMismatch, BadFormatAmount) as exc:
         err_cb(exc, JsonResponse({"error": "internal server error"},

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

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