gnunet-svn
[Top][All Lists]
Advanced

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

[taler-merchant] 226/277: naive tests for the family of GET order(s) met


From: gnunet
Subject: [taler-merchant] 226/277: naive tests for the family of GET order(s) methods
Date: Sun, 05 Jul 2020 20:52:19 +0200

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

grothoff pushed a commit to branch master
in repository merchant.

commit 37bfe1471b8b4c2136ab72ef91cec3297ec98b0c
Author: Jonathan Buchanan <jonathan.russ.buchanan@gmail.com>
AuthorDate: Fri Jun 19 20:07:40 2020 -0400

    naive tests for the family of GET order(s) methods
---
 src/backend/taler-merchant-httpd.c                 |   6 +
 src/backend/taler-merchant-httpd_get-orders-ID.c   |   1 +
 .../taler-merchant-httpd_private-get-orders-ID.c   |   3 +-
 src/include/taler_merchant_service.h               |   3 +-
 src/include/taler_merchant_testing_lib.h           |  47 +++++
 src/lib/merchant_api_merchant_get_order.c          |   2 +-
 src/testing/Makefile.am                            |   3 +
 src/testing/test_merchant_api.c                    |  13 +-
 src/testing/testing_api_cmd_get_orders.c           | 178 ++++++++++++++++
 src/testing/testing_api_cmd_merchant_get_order.c   | 205 +++++++++++++++++++
 src/testing/testing_api_cmd_wallet_get_order.c     | 226 +++++++++++++++++++++
 src/testing/testing_api_cmd_wallet_get_tip.c       |   2 +-
 12 files changed, 684 insertions(+), 5 deletions(-)

diff --git a/src/backend/taler-merchant-httpd.c 
b/src/backend/taler-merchant-httpd.c
index 3968d6b..e5d37a6 100644
--- a/src/backend/taler-merchant-httpd.c
+++ b/src/backend/taler-merchant-httpd.c
@@ -842,6 +842,12 @@ url_handler (void *cls,
       .have_id_segment = true,
       .handler = &TMH_private_get_orders_ID
     },
+    /* GET /orders: */
+    {
+      .url_prefix = "/orders",
+      .method = MHD_HTTP_METHOD_GET,
+      .handler = &TMH_private_get_orders
+    },
     /* POST /orders/$ID/refund: */
     {
       .url_prefix = "/orders/",
diff --git a/src/backend/taler-merchant-httpd_get-orders-ID.c 
b/src/backend/taler-merchant-httpd_get-orders-ID.c
index 4c88ffc..2b1117a 100644
--- a/src/backend/taler-merchant-httpd_get-orders-ID.c
+++ b/src/backend/taler-merchant-httpd_get-orders-ID.c
@@ -645,6 +645,7 @@ TMH_get_orders_ID (const struct TMH_RequestHandler *rh,
     god->sc.con = connection;
     god->ec = TALER_EC_NONE;
     god->hc = hc;
+    god->order_id = order_id;
 
     {
       const char *cts;
diff --git a/src/backend/taler-merchant-httpd_private-get-orders-ID.c 
b/src/backend/taler-merchant-httpd_private-get-orders-ID.c
index 02fda29..d413f71 100644
--- a/src/backend/taler-merchant-httpd_private-get-orders-ID.c
+++ b/src/backend/taler-merchant-httpd_private-get-orders-ID.c
@@ -902,7 +902,8 @@ TMH_private_get_orders_ID (const struct TMH_RequestHandler 
*rh,
                                        
TALER_EC_GET_ORDERS_DB_FETCH_PAYMENT_STATUS,
                                        "DB error fetching payment status");
   }
-  if (! paid)
+  if ((! paid) &&
+      (NULL != gorc->session_id))
   {
     char *already_paid_order_id;
 
diff --git a/src/include/taler_merchant_service.h 
b/src/include/taler_merchant_service.h
index 4d8c0ef..23d0bbe 100644
--- a/src/include/taler_merchant_service.h
+++ b/src/include/taler_merchant_service.h
@@ -1396,7 +1396,8 @@ typedef void
  *        before generating an unpaid response). Note that this is just 
provided to
  *        the server, we as client will block until the response comes back or 
until
  *        #TALER_MERCHANT_order_get_cancel() is called.
- * @param session_id for which session should the payment status be checked
+ * @param session_id for which session should the payment status be checked. 
Use
+ *        NULL to disregard sessions.
  * @param min_refund long poll for the service to approve a refund exceeding 
this value;
  *        use NULL to not wait for any refund (only for payment). Only makes 
sense
  *        with a non-zero @a timeout. Can be NULL.
diff --git a/src/include/taler_merchant_testing_lib.h 
b/src/include/taler_merchant_testing_lib.h
index 02df16c..089e542 100644
--- a/src/include/taler_merchant_testing_lib.h
+++ b/src/include/taler_merchant_testing_lib.h
@@ -427,6 +427,53 @@ TALER_TESTING_cmd_merchant_post_orders (const char *label,
                                         const char *order);
 
 
+/**
+ * Define a "GET /orders" CMD.
+ *
+ * @param label command label.
+ * @param merchant_url base URL of the merchant serving the
+ *        GET /orders request.
+ * @param http_status expected HTTP response code.
+ * @return the command.
+ */
+struct TALER_TESTING_Command
+TALER_TESTING_cmd_merchant_get_orders (const char *label,
+                                       const char *merchant_url,
+                                       unsigned int http_status);
+
+
+/**
+ * Define a GET /orders/$ORDER_ID CMD.
+ *
+ * @param label the command label
+ * @param merchant_url base URL of the merchant which will
+ *        serve the request.
+ * @param order_reference reference to a command that created an order.
+ * @param http_status expected HTTP response code for the request.
+ */
+struct TALER_TESTING_Command
+TALER_TESTING_cmd_wallet_get_order (const char *label,
+                                    const char *merchant_url,
+                                    const char *order_reference,
+                                    unsigned int http_status);
+
+
+/**
+ * Define a GET /private/tips/$TIP_ID CMD.
+ *
+ * @param label the command label
+ * @param merchant_url base URL of the merchant which will
+ *        serve the request.
+ * @param order_reference reference to a command that created an order.
+ * @param http_status expected HTTP response code for the request.
+ */
+struct TALER_TESTING_Command
+TALER_TESTING_cmd_merchant_get_order (const char *label,
+                                      const char *merchant_url,
+                                      const char *order_reference,
+                                      unsigned int http_status);
+
+
 /**
  * Make a "claim order" command.
  *
diff --git a/src/lib/merchant_api_merchant_get_order.c 
b/src/lib/merchant_api_merchant_get_order.c
index 2cb5ebd..edd00f7 100644
--- a/src/lib/merchant_api_merchant_get_order.c
+++ b/src/lib/merchant_api_merchant_get_order.c
@@ -423,7 +423,7 @@ TALER_MERCHANT_merchant_order_get (struct 
GNUNET_CURL_Context *ctx,
                      "%llu",
                      tms);
     GNUNET_asprintf (&path,
-                     "orders/%s",
+                     "private/orders/%s",
                      order_id);
     omgh->url = TALER_url_join (backend_url,
                                 path,
diff --git a/src/testing/Makefile.am b/src/testing/Makefile.am
index d8025bf..92da57f 100644
--- a/src/testing/Makefile.am
+++ b/src/testing/Makefile.am
@@ -19,6 +19,7 @@ libtalermerchanttesting_la_SOURCES = \
   testing_api_cmd_claim_order.c \
   testing_api_cmd_get_instance.c \
   testing_api_cmd_get_instances.c \
+  testing_api_cmd_get_orders.c \
   testing_api_cmd_get_product.c \
   testing_api_cmd_get_products.c \
   testing_api_cmd_get_reserve.c \
@@ -29,6 +30,7 @@ libtalermerchanttesting_la_SOURCES = \
   testing_api_cmd_delete_product.c \
   testing_api_cmd_delete_reserve.c \
   testing_api_cmd_lock_product.c \
+  testing_api_cmd_merchant_get_order.c \
   testing_api_cmd_merchant_get_tip.c \
   testing_api_cmd_pay_order.c \
   testing_api_cmd_post_instances.c \
@@ -44,6 +46,7 @@ libtalermerchanttesting_la_SOURCES = \
   testing_api_cmd_tip_authorize.c \
   testing_api_cmd_tip_pickup.c \
   testing_api_cmd_track_transaction.c \
+  testing_api_cmd_wallet_get_order.c \
   testing_api_cmd_wallet_get_tip.c \
   testing_api_helpers.c \
   testing_api_trait_merchant_sig.c \
diff --git a/src/testing/test_merchant_api.c b/src/testing/test_merchant_api.c
index 8920a2a..fa7f80d 100644
--- a/src/testing/test_merchant_api.c
+++ b/src/testing/test_merchant_api.c
@@ -282,6 +282,17 @@ run (void *cls,
         \"fulfillment_url\": \"https://example.com/\",\
         \"products\": [ {\"description\":\"ice cream\",\
                          \"value\":\"{EUR:5}\"} ] }"),
+    TALER_TESTING_cmd_merchant_get_orders ("get-orders-1",
+                                           merchant_url,
+                                           MHD_HTTP_OK),
+    TALER_TESTING_cmd_wallet_get_order ("get-order-wallet-1",
+                                        merchant_url,
+                                        "create-proposal-1",
+                                        MHD_HTTP_OK),
+    TALER_TESTING_cmd_merchant_get_order ("get-order-merchant-1",
+                                          merchant_url,
+                                          "create-proposal-1",
+                                          MHD_HTTP_OK),
 #if 0
     TALER_TESTING_cmd_check_payment ("check-payment-1",
                                      merchant_url,
@@ -1078,9 +1089,9 @@ run (void *cls,
                                                MHD_HTTP_NO_CONTENT),
     TALER_TESTING_cmd_batch ("pay",
                              pay),
-#if 0
     TALER_TESTING_cmd_batch ("double-spending",
                              double_spending),
+#if 0
     TALER_TESTING_cmd_batch ("track",
                              track),
     TALER_TESTING_cmd_history ("history-2",
diff --git a/src/testing/testing_api_cmd_get_orders.c 
b/src/testing/testing_api_cmd_get_orders.c
new file mode 100644
index 0000000..93469fd
--- /dev/null
+++ b/src/testing/testing_api_cmd_get_orders.c
@@ -0,0 +1,178 @@
+/*
+  This file is part of TALER
+  Copyright (C) 2020 Taler Systems SA
+
+  TALER is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as
+  published by the Free Software Foundation; either version 3, or
+  (at your option) any later version.
+
+  TALER is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public
+  License along with TALER; see the file COPYING.  If not, see
+  <http://www.gnu.org/licenses/>
+*/
+/**
+ * @file lib/testing_api_cmd_get_orders.c
+ * @brief command to test GET /orders
+ * @author Jonathan Buchanan
+ */
+#include "platform.h"
+#include <taler/taler_exchange_service.h>
+#include <taler/taler_testing_lib.h>
+#include "taler_merchant_service.h"
+#include "taler_merchant_testing_lib.h"
+
+
+/**
+ * State of a "GET orders" CMD.
+ */
+struct GetOrdersState
+{
+
+  /**
+   * Handle for a "GET orders" request.
+   */
+  struct TALER_MERCHANT_OrdersGetHandle *ogh;
+
+  /**
+   * The interpreter state.
+   */
+  struct TALER_TESTING_Interpreter *is;
+
+  /**
+   * Base URL of the merchant serving the request.
+   */
+  const char *merchant_url;
+
+  /**
+   * Expected HTTP response code.
+   */
+  unsigned int http_status;
+
+};
+
+
+/**
+ * Callback for a GET /orders operation.
+ *
+ * @param cls closure for this function
+ */
+static void
+get_orders_cb (void *cls,
+               const struct TALER_MERCHANT_HttpResponse *hr,
+               unsigned int orders_length,
+               const struct TALER_MERCHANT_OrderEntry orders[])
+{
+  /* FIXME, deeper checks should be implemented here. */
+  struct GetOrdersState *gos = cls;
+
+  gos->ogh = NULL;
+  if (gos->http_status != hr->http_status)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                "Unexpected response code %u (%d) to command %s\n",
+                hr->http_status,
+                (int) hr->ec,
+                TALER_TESTING_interpreter_get_current_label (gos->is));
+    TALER_TESTING_interpreter_fail (gos->is);
+    return;
+  }
+  switch (hr->http_status)
+  {
+  case MHD_HTTP_OK:
+    // FIXME: use gis->instance_reference here to
+    // check if the data returned matches that from the POST / PATCH
+    break;
+  default:
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                "Unhandled HTTP status.\n");
+  }
+  TALER_TESTING_interpreter_next (gos->is);
+}
+
+
+/**
+ * Run the "GET /orders" CMD.
+ *
+ *
+ * @param cls closure.
+ * @param cmd command being run now.
+ * @param is interpreter state.
+ */
+static void
+get_orders_run (void *cls,
+                const struct TALER_TESTING_Command *cmd,
+                struct TALER_TESTING_Interpreter *is)
+{
+  struct GetOrdersState *gos = cls;
+
+  gos->is = is;
+  gos->ogh = TALER_MERCHANT_orders_get (is->ctx,
+                                        gos->merchant_url,
+                                        &get_orders_cb,
+                                        gos);
+  GNUNET_assert (NULL != gos->ogh);
+}
+
+
+/**
+ * Free the state of a "GET orders" CMD, and possibly
+ * cancel a pending operation thereof.
+ *
+ * @param cls closure.
+ * @param cmd command being run.
+ */
+static void
+get_orders_cleanup (void *cls,
+                    const struct TALER_TESTING_Command *cmd)
+{
+  struct GetOrdersState *gos = cls;
+
+  if (NULL != gos->ogh)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                "GET /instances/$ID operation did not complete\n");
+    TALER_MERCHANT_orders_get_cancel (gos->ogh);
+  }
+  GNUNET_free (gos);
+}
+
+
+/**
+ * Define a "GET /orders" CMD.
+ *
+ * @param label command label.
+ * @param merchant_url base URL of the merchant serving the
+ *        GET /orders request.
+ * @param http_status expected HTTP response code.
+ * @return the command.
+ */
+struct TALER_TESTING_Command
+TALER_TESTING_cmd_merchant_get_orders (const char *label,
+                                       const char *merchant_url,
+                                       unsigned int http_status)
+{
+  struct GetOrdersState *gos;
+
+  gos = GNUNET_new (struct GetOrdersState);
+  gos->merchant_url = merchant_url;
+  gos->http_status = http_status;
+  {
+    struct TALER_TESTING_Command cmd = {
+      .cls = gos,
+      .label = label,
+      .run = &get_orders_run,
+      .cleanup = &get_orders_cleanup
+    };
+
+    return cmd;
+  }
+}
+
+
+/* end of testing_api_cmd_get_orders.c */
diff --git a/src/testing/testing_api_cmd_merchant_get_order.c 
b/src/testing/testing_api_cmd_merchant_get_order.c
new file mode 100644
index 0000000..5f14811
--- /dev/null
+++ b/src/testing/testing_api_cmd_merchant_get_order.c
@@ -0,0 +1,205 @@
+/*
+  This file is part of TALER
+  Copyright (C) 2020 Taler Systems SA
+
+  TALER is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as
+  published by the Free Software Foundation; either version 3, or
+  (at your option) any later version.
+
+  TALER is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public
+  License along with TALER; see the file COPYING.  If not, see
+  <http://www.gnu.org/licenses/>
+*/
+/**
+ * @file lib/testing_api_cmd_merchant_get_order.c
+ * @brief command to test GET /private/orders/$ORDER_ID.
+ * @author Jonathan Buchanan
+ */
+#include "platform.h"
+#include <taler/taler_exchange_service.h>
+#include <taler/taler_testing_lib.h>
+#include "taler_merchant_service.h"
+#include "taler_merchant_testing_lib.h"
+
+
+/**
+ * State for a GET /private/orders/$ORDER_ID CMD.
+ */
+struct MerchantGetOrderState
+{
+  /**
+   * The merchant base URL.
+   */
+  const char *merchant_url;
+
+  /**
+   * Expected HTTP response code for this CMD.
+   */
+  unsigned int http_status;
+
+  /**
+   * The handle to the current GET /private/orders/$ORDER_ID request.
+   */
+  struct TALER_MERCHANT_OrderMerchantGetHandle *ogh;
+
+  /**
+   * The interpreter state.
+   */
+  struct TALER_TESTING_Interpreter *is;
+
+  /**
+   * Reference to a command that created an order.
+   */
+  const char *order_reference;
+};
+
+
+/**
+ * Callback to process a GET /orders/$ID request
+ *
+ * @param cls closure
+ * @param hr HTTP response details
+ * @param osr order status response details (on success)
+ */
+static void
+merchant_get_order_cb (
+  void *cls,
+  const struct TALER_MERCHANT_HttpResponse *hr,
+  const struct TALER_MERCHANT_OrderStatusResponse *osr)
+{
+  /* FIXME, deeper checks should be implemented here. */
+  struct MerchantGetOrderState *gos = cls;
+
+  gos->ogh = NULL;
+  if (gos->http_status != hr->http_status)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                "Unexpected response code %u (%d) to command %s\n",
+                hr->http_status,
+                (int) hr->ec,
+                TALER_TESTING_interpreter_get_current_label (gos->is));
+    TALER_TESTING_interpreter_fail (gos->is);
+    return;
+  }
+  switch (hr->http_status)
+  {
+  case MHD_HTTP_OK:
+    // FIXME: use gts->tip_reference here to
+    // check if the data returned matches that from the POST / PATCH
+    break;
+  default:
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                "Unhandled HTTP status.\n");
+  }
+  TALER_TESTING_interpreter_next (gos->is);
+}
+
+
+/**
+ * Run the "GET order" CMD.
+ *
+ * @param cls closure.
+ * @param cmd command being run now.
+ * @param is interpreter state.
+ */
+static void
+merchant_get_order_run (void *cls,
+                        const struct TALER_TESTING_Command *cmd,
+                        struct TALER_TESTING_Interpreter *is)
+{
+  struct MerchantGetOrderState *gos = cls;
+  const struct TALER_TESTING_Command *order_cmd;
+  const char *order_id;
+  const struct GNUNET_HashCode *h_contract;
+
+  order_cmd = TALER_TESTING_interpreter_lookup_command (
+    is,
+    gos->order_reference);
+
+  if (GNUNET_OK !=
+      TALER_TESTING_get_trait_order_id (order_cmd,
+                                        0,
+                                        &order_id))
+    TALER_TESTING_FAIL (is);
+
+  if (GNUNET_OK !=
+      TALER_TESTING_get_trait_h_contract_terms (order_cmd,
+                                                0,
+                                                &h_contract))
+    TALER_TESTING_FAIL (is);
+
+  gos->is = is;
+  gos->ogh = TALER_MERCHANT_merchant_order_get (is->ctx,
+                                                gos->merchant_url,
+                                                order_id,
+                                                NULL,
+                                                false,
+                                                GNUNET_TIME_UNIT_ZERO,
+                                                &merchant_get_order_cb,
+                                                gos);
+}
+
+
+/**
+ * Free the state of a "GET order" CMD, and possibly
+ * cancel a pending operation thereof.
+ *
+ * @param cls closure.
+ * @param cmd command being run.
+ */
+static void
+merchant_get_order_cleanup (void *cls,
+                            const struct TALER_TESTING_Command *cmd)
+{
+  struct MerchantGetOrderState *gos = cls;
+
+  if (NULL != gos->ogh)
+  {
+    TALER_LOG_WARNING ("Get tip operation did not complete\n");
+    TALER_MERCHANT_merchant_order_get_cancel (gos->ogh);
+  }
+  GNUNET_free (gos);
+}
+
+
+/**
+ * Define a GET /private/tips/$TIP_ID CMD.
+ *
+ * @param label the command label
+ * @param merchant_url base URL of the merchant which will
+ *        serve the request.
+ * @param order_reference reference to a command that created an order.
+ * @param http_status expected HTTP response code for the request.
+ */
+struct TALER_TESTING_Command
+TALER_TESTING_cmd_merchant_get_order (const char *label,
+                                      const char *merchant_url,
+                                      const char *order_reference,
+                                      unsigned int http_status)
+{
+  struct MerchantGetOrderState *gos;
+
+  gos = GNUNET_new (struct MerchantGetOrderState);
+  gos->merchant_url = merchant_url;
+  gos->order_reference = order_reference;
+  gos->http_status = http_status;
+  {
+    struct TALER_TESTING_Command cmd = {
+      .cls = gos,
+      .label = label,
+      .run = &merchant_get_order_run,
+      .cleanup = &merchant_get_order_cleanup
+    };
+
+    return cmd;
+  }
+}
+
+
+/* end of testing_api_cmd_merchant_get_order.c */
diff --git a/src/testing/testing_api_cmd_wallet_get_order.c 
b/src/testing/testing_api_cmd_wallet_get_order.c
new file mode 100644
index 0000000..1dce69c
--- /dev/null
+++ b/src/testing/testing_api_cmd_wallet_get_order.c
@@ -0,0 +1,226 @@
+/*
+  This file is part of TALER
+  Copyright (C) 2020 Taler Systems SA
+
+  TALER is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as
+  published by the Free Software Foundation; either version 3, or
+  (at your option) any later version.
+
+  TALER is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public
+  License along with TALER; see the file COPYING.  If not, see
+  <http://www.gnu.org/licenses/>
+*/
+/**
+ * @file lib/testing_api_cmd_wallet_get_order.c
+ * @brief command to test GET /order/$ORDER_ID
+ * @author Jonathan Buchanan
+ */
+#include "platform.h"
+#include <taler/taler_exchange_service.h>
+#include <taler/taler_testing_lib.h>
+#include "taler_merchant_service.h"
+#include "taler_merchant_testing_lib.h"
+
+
+/**
+ * State for a GET /orders/$ORDER_ID CMD.
+ */
+struct WalletGetOrderState
+{
+  /**
+   * The merchant base URL.
+   */
+  const char *merchant_url;
+
+  /**
+   * Expected HTTP response code for this CMD.
+   */
+  unsigned int http_status;
+
+  /**
+   * The handle to the current GET /orders/$ORDER_ID request.
+   */
+  struct TALER_MERCHANT_OrderWalletGetHandle *ogh;
+
+  /**
+   * The interpreter state.
+   */
+  struct TALER_TESTING_Interpreter *is;
+
+  /**
+   * Reference to a command that created an order.
+   */
+  const char *order_reference;
+};
+
+
+/**
+ * Callback to process a GET /orders/$ID request
+ *
+ * @param cls closure
+ * @param hr HTTP response details
+ * @param paid #GNUNET_YES if the payment is settled, #GNUNET_NO if not
+ *        settled, #GNUNET_SYSERR on error
+ *        (note that refunded payments are returned as paid!)
+ * @param refunded #GNUNET_YES if there is at least on refund on this payment,
+ *        #GNUNET_NO if refunded, #GNUNET_SYSERR or error
+ * @param refunded_amount amount that was refunded, NULL if there
+ *        was no refund
+ * @param taler_pay_uri the URI that instructs the wallets to process
+ *                      the payment
+ * @param already_paid_order_id equivalent order that this customer
+ *                      paid already, or NULL for none
+ * @param merchant_pub public key of the merchant
+ * @param num_refunds length of the @a refunds array
+ * @param refunds details about the refund processing
+ */
+static void
+wallet_get_order_cb (
+  void *cls,
+  const struct TALER_MERCHANT_HttpResponse *hr,
+  enum GNUNET_GenericReturnValue paid,
+  enum GNUNET_GenericReturnValue refunded,
+  struct TALER_Amount *refund_amount,
+  const char *taler_pay_uri,
+  const char *already_paid_order_id,
+  const struct TALER_MerchantPublicKeyP *merchant_pub,
+  unsigned int num_refunds,
+  const struct TALER_MERCHANT_RefundDetail *refunds)
+{
+  /* FIXME, deeper checks should be implemented here. */
+  struct WalletGetOrderState *gos = cls;
+
+  gos->ogh = NULL;
+  if (gos->http_status != hr->http_status)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                "Unexpected response code %u (%d) to command %s\n",
+                hr->http_status,
+                (int) hr->ec,
+                TALER_TESTING_interpreter_get_current_label (gos->is));
+    TALER_TESTING_interpreter_fail (gos->is);
+    return;
+  }
+  switch (hr->http_status)
+  {
+  case MHD_HTTP_OK:
+    // FIXME: use gts->tip_reference here to
+    // check if the data returned matches that from the POST / PATCH
+    break;
+  default:
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                "Unhandled HTTP status.\n");
+  }
+  TALER_TESTING_interpreter_next (gos->is);
+}
+
+
+/**
+ * Run the "GET order" CMD.
+ *
+ * @param cls closure.
+ * @param cmd command being run now.
+ * @param is interpreter state.
+ */
+static void
+wallet_get_order_run (void *cls,
+                      const struct TALER_TESTING_Command *cmd,
+                      struct TALER_TESTING_Interpreter *is)
+{
+  struct WalletGetOrderState *gos = cls;
+  const struct TALER_TESTING_Command *order_cmd;
+  const char *order_id;
+  const struct GNUNET_HashCode *h_contract;
+
+  order_cmd = TALER_TESTING_interpreter_lookup_command (
+    is,
+    gos->order_reference);
+
+  if (GNUNET_OK !=
+      TALER_TESTING_get_trait_order_id (order_cmd,
+                                        0,
+                                        &order_id))
+    TALER_TESTING_FAIL (is);
+
+  if (GNUNET_OK !=
+      TALER_TESTING_get_trait_h_contract_terms (order_cmd,
+                                                0,
+                                                &h_contract))
+    TALER_TESTING_FAIL (is);
+
+  gos->is = is;
+  gos->ogh = TALER_MERCHANT_wallet_order_get (is->ctx,
+                                              gos->merchant_url,
+                                              order_id,
+                                              h_contract,
+                                              GNUNET_TIME_UNIT_ZERO,
+                                              NULL,
+                                              NULL,
+                                              &wallet_get_order_cb,
+                                              gos);
+}
+
+
+/**
+ * Free the state of a "GET order" CMD, and possibly
+ * cancel a pending operation thereof.
+ *
+ * @param cls closure.
+ * @param cmd command being run.
+ */
+static void
+wallet_get_order_cleanup (void *cls,
+                          const struct TALER_TESTING_Command *cmd)
+{
+  struct WalletGetOrderState *gos = cls;
+
+  if (NULL != gos->ogh)
+  {
+    TALER_LOG_WARNING ("Get tip operation did not complete\n");
+    TALER_MERCHANT_wallet_order_get_cancel (gos->ogh);
+  }
+  GNUNET_free (gos);
+}
+
+
+/**
+ * Define a GET /orders/$ORDER_ID CMD.
+ *
+ * @param label the command label
+ * @param merchant_url base URL of the merchant which will
+ *        serve the request.
+ * @param order_reference reference to a command that created an order.
+ * @param http_status expected HTTP response code for the request.
+ */
+struct TALER_TESTING_Command
+TALER_TESTING_cmd_wallet_get_order (const char *label,
+                                    const char *merchant_url,
+                                    const char *order_reference,
+                                    unsigned int http_status)
+{
+  struct WalletGetOrderState *gos;
+
+  gos = GNUNET_new (struct WalletGetOrderState);
+  gos->merchant_url = merchant_url;
+  gos->order_reference = order_reference;
+  gos->http_status = http_status;
+  {
+    struct TALER_TESTING_Command cmd = {
+      .cls = gos,
+      .label = label,
+      .run = &wallet_get_order_run,
+      .cleanup = &wallet_get_order_cleanup
+    };
+
+    return cmd;
+  }
+}
+
+
+/* end of testing_api_cmd_wallet_get_order.c */
diff --git a/src/testing/testing_api_cmd_wallet_get_tip.c 
b/src/testing/testing_api_cmd_wallet_get_tip.c
index 0374ada..7d56b46 100644
--- a/src/testing/testing_api_cmd_wallet_get_tip.c
+++ b/src/testing/testing_api_cmd_wallet_get_tip.c
@@ -280,4 +280,4 @@ TALER_TESTING_cmd_wallet_get_tip2 (const char *label,
 }
 
 
-/* end of testing_api_cmd_get_tip.c */
+/* end of testing_api_cmd_wallet_get_tip.c */

-- 
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]