gnunet-svn
[Top][All Lists]
Advanced

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

[taler-merchant] 52/277: misc bugfixes


From: gnunet
Subject: [taler-merchant] 52/277: misc bugfixes
Date: Sun, 05 Jul 2020 20:49:25 +0200

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

grothoff pushed a commit to branch master
in repository merchant.

commit 46aa711262566b7a8f358cbe684c64ed526a5edb
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sat Apr 25 22:32:36 2020 +0200

    misc bugfixes
---
 .../taler-merchant-httpd_private-get-products-ID.c | 13 +++---
 ...aler-merchant-httpd_private-patch-products-ID.c | 26 +++++------
 .../taler-merchant-httpd_private-post-products.c   | 14 +++---
 src/backenddb/merchant-0001.sql                    |  4 +-
 src/backenddb/plugin_merchantdb_postgres.c         | 22 ++++------
 src/include/taler_merchant_service.h               | 14 +++---
 src/include/taler_merchant_testing_lib.h           | 10 ++---
 src/include/taler_merchantdb_plugin.h              |  2 +-
 src/lib/merchant_api_get_product.c                 | 50 +++++++++++++++-------
 src/lib/merchant_api_patch_product.c               | 11 ++---
 src/lib/merchant_api_post_products.c               |  9 ++--
 src/testing/test_merchant_api.c                    |  4 ++
 src/testing/testing_api_cmd_get_product.c          |  4 +-
 src/testing/testing_api_cmd_patch_product.c        | 12 +++---
 src/testing/testing_api_cmd_post_instances.c       |  5 ++-
 src/testing/testing_api_cmd_post_products.c        | 15 ++++---
 16 files changed, 121 insertions(+), 94 deletions(-)

diff --git a/src/backend/taler-merchant-httpd_private-get-products-ID.c 
b/src/backend/taler-merchant-httpd_private-get-products-ID.c
index 57b3182..611de7e 100644
--- a/src/backend/taler-merchant-httpd_private-get-products-ID.c
+++ b/src/backend/taler-merchant-httpd_private-get-products-ID.c
@@ -57,9 +57,8 @@ TMH_private_get_products_ID (const struct TMH_RequestHandler 
*rh,
     json_t *reply;
 
     reply = json_pack (
-      "{s:s, s:o, s:s, s:o, s:o,"
-      " s:I, s:I, s:I, s:o, s:o,"
-      " s:o}",
+      "{s:s, s:s, s:o, s:o, s:I,"
+      " s:I, s:I, s:o, s:o, s:o}",
       "description",
       pd.description,
       "unit",
@@ -68,11 +67,11 @@ TMH_private_get_products_ID (const struct 
TMH_RequestHandler *rh,
       TALER_JSON_from_amount (&pd.price),
       "taxes",
       pd.taxes,
-      /* end of first group of 5 */
-      "total_stocked",
-      (UINT64_MAX == pd.total_stocked)
+      "total_stock",
+      (UINT64_MAX == pd.total_stock)
       ? (json_int_t) -1
-      : (json_int_t) pd.total_stocked,
+      : (json_int_t) pd.total_stock,
+      /* end of first group of 5 */
       "total_sold",
       (json_int_t) pd.total_sold,
       "total_lost",
diff --git a/src/backend/taler-merchant-httpd_private-patch-products-ID.c 
b/src/backend/taler-merchant-httpd_private-patch-products-ID.c
index 6ffc73f..be7f52e 100644
--- a/src/backend/taler-merchant-httpd_private-patch-products-ID.c
+++ b/src/backend/taler-merchant-httpd_private-patch-products-ID.c
@@ -86,16 +86,16 @@ determine_cause (struct MHD_Connection *connection,
       ec = TALER_EC_PRODUCTS_PATCH_TOTAL_LOST_REDUCED;
       hint = "total lost cannot be lowered";
     }
-    if (pdx.total_sold > pd->total_sold)
-    {
-      ec = TALER_EC_PRODUCTS_PATCH_TOTAL_SOLD_REDUCED;
-      hint = "total sold cannot be lowered";
-    }
-    if (pdx.total_stocked > pd->total_stocked)
+    if (pdx.total_stock > pd->total_stock)
     {
       ec = TALER_EC_PRODUCTS_PATCH_TOTAL_STOCKED_REDUCED;
       hint = "total stocked cannot be lowered";
     }
+    if (pd->total_stock - pdx.total_sold > pd->total_lost)
+    {
+      ec = TALER_EC_PRODUCTS_PATCH_TOTAL_LOST_EXCEEDS_STOCKS;
+      hint = "total lost cannot exceed total stock minus total sold";
+    }
     GNUNET_free (pdx.description);
     json_decref (pdx.description_i18n);
     GNUNET_free (pdx.unit);
@@ -126,7 +126,7 @@ TMH_private_patch_products_ID (const struct 
TMH_RequestHandler *rh,
   struct TMH_MerchantInstance *mi = hc->instance;
   const char *product_id = hc->infix;
   struct TALER_MERCHANTDB_ProductDetails pd;
-  int64_t total_stocked;
+  int64_t total_stock;
   enum GNUNET_DB_QueryStatus qs;
   struct GNUNET_JSON_Specification spec[] = {
     GNUNET_JSON_spec_string ("description",
@@ -143,8 +143,10 @@ TMH_private_patch_products_ID (const struct 
TMH_RequestHandler *rh,
                            &pd.taxes),
     GNUNET_JSON_spec_json ("address",
                            &pd.address),
-    GNUNET_JSON_spec_int64 ("total_stocked",
-                            &total_stocked),
+    GNUNET_JSON_spec_int64 ("total_stock",
+                            &total_stock),
+    GNUNET_JSON_spec_uint64 ("total_lost",
+                             &pd.total_lost),
     GNUNET_JSON_spec_absolute_time ("next_restock",
                                     &pd.next_restock),
     GNUNET_JSON_spec_end ()
@@ -172,10 +174,10 @@ TMH_private_patch_products_ID (const struct 
TMH_RequestHandler *rh,
                                          TALER_EC_INTERNAL_INVARIANT_FAILURE,
                                          "Impossible to parse the product 
description");
   }
-  if (-1 == total_stocked)
-    pd.total_stocked = UINT64_MAX;
+  if (-1 == total_stock)
+    pd.total_stock = UINT64_MAX;
   else
-    pd.total_stocked = (uint64_t) total_stocked;
+    pd.total_stock = (uint64_t) total_stock;
   if (NULL != json_object_get (hc->request_body,
                                "next_restock"))
   {
diff --git a/src/backend/taler-merchant-httpd_private-post-products.c 
b/src/backend/taler-merchant-httpd_private-post-products.c
index c440284..7fd62db 100644
--- a/src/backend/taler-merchant-httpd_private-post-products.c
+++ b/src/backend/taler-merchant-httpd_private-post-products.c
@@ -56,7 +56,7 @@ products_equal (const struct TALER_MERCHANTDB_ProductDetails 
*p1,
                                    &p2->price)) &&
            (1 == json_equal (p1->taxes,
                              p2->taxes)) &&
-           (p1->total_stocked == p2->total_stocked) &&
+           (p1->total_stock == p2->total_stock) &&
            (p1->total_sold == p2->total_sold) &&
            (p1->total_lost == p2->total_lost) &&
            (1 == json_equal (p1->image,
@@ -84,7 +84,7 @@ TMH_private_post_products (const struct TMH_RequestHandler 
*rh,
   struct TMH_MerchantInstance *mi = hc->instance;
   struct TALER_MERCHANTDB_ProductDetails pd;
   const char *product_id;
-  int64_t total_stocked;
+  int64_t total_stock;
   enum GNUNET_DB_QueryStatus qs;
   struct GNUNET_JSON_Specification spec[] = {
     GNUNET_JSON_spec_string ("product_id",
@@ -103,8 +103,8 @@ TMH_private_post_products (const struct TMH_RequestHandler 
*rh,
                            &pd.taxes),
     GNUNET_JSON_spec_json ("address",
                            &pd.address),
-    GNUNET_JSON_spec_int64 ("total_stocked",
-                            &total_stocked),
+    GNUNET_JSON_spec_int64 ("total_stock",
+                            &total_stock),
     GNUNET_JSON_spec_absolute_time ("next_restock",
                                     &pd.next_restock),
     GNUNET_JSON_spec_end ()
@@ -131,10 +131,10 @@ TMH_private_post_products (const struct 
TMH_RequestHandler *rh,
                                          "Impossible to parse the order");
   }
 
-  if (-1 == total_stocked)
-    pd.total_stocked = UINT64_MAX;
+  if (-1 == total_stock)
+    pd.total_stock = UINT64_MAX;
   else
-    pd.total_stocked = (uint64_t) total_stocked;
+    pd.total_stock = (uint64_t) total_stock;
   if (NULL != json_object_get (hc->request_body,
                                "next_restock"))
   {
diff --git a/src/backenddb/merchant-0001.sql b/src/backenddb/merchant-0001.sql
index f49c2cc..a4f720e 100644
--- a/src/backenddb/merchant-0001.sql
+++ b/src/backenddb/merchant-0001.sql
@@ -129,8 +129,8 @@ CREATE TABLE IF NOT EXISTS merchant_inventory
   ,price_val INT8 NOT NULL
   ,price_frac INT4 NOT NULL
   ,total_stock BIGINT NOT NULL
-  ,total_sold BIGINT NOT NULL
-  ,total_lost BIGINT NOT NULL
+  ,total_sold BIGINT NOT NULL DEFAULT 0
+  ,total_lost BIGINT NOT NULL DEFAULT 0
   ,address BYTEA NOT NULL
   ,next_restock INT8 NOT NULL
   ,UNIQUE (merchant_serial, product_id)
diff --git a/src/backenddb/plugin_merchantdb_postgres.c 
b/src/backenddb/plugin_merchantdb_postgres.c
index 57da981..b529117 100644
--- a/src/backenddb/plugin_merchantdb_postgres.c
+++ b/src/backenddb/plugin_merchantdb_postgres.c
@@ -846,7 +846,7 @@ postgres_lookup_product (void *cls,
     TALER_PQ_result_spec_json ("taxes",
                                &pd->taxes),
     GNUNET_PQ_result_spec_uint64 ("total_stock",
-                                  &pd->total_stocked),
+                                  &pd->total_stock),
     GNUNET_PQ_result_spec_uint64 ("total_sold",
                                   &pd->total_sold),
     GNUNET_PQ_result_spec_uint64 ("total_lost",
@@ -927,9 +927,7 @@ postgres_insert_product (void *cls,
     TALER_PQ_query_param_json (pd->image),
     TALER_PQ_query_param_json (pd->taxes),
     TALER_PQ_query_param_amount (&pd->price),
-    GNUNET_PQ_query_param_uint64 (&pd->total_stocked),
-    GNUNET_PQ_query_param_uint64 (&pd->total_sold),
-    GNUNET_PQ_query_param_uint64 (&pd->total_lost),
+    GNUNET_PQ_query_param_uint64 (&pd->total_stock),
     TALER_PQ_query_param_json (pd->address),
     GNUNET_PQ_query_param_absolute_time (&pd->next_restock),
     GNUNET_PQ_query_param_end
@@ -969,16 +967,16 @@ postgres_update_product (void *cls,
 {
   struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
-    GNUNET_PQ_query_param_string (instance_id),
+    GNUNET_PQ_query_param_string (instance_id), /* $1 */
     GNUNET_PQ_query_param_string (product_id),
     GNUNET_PQ_query_param_string (pd->description),
     TALER_PQ_query_param_json (pd->description_i18n),
     GNUNET_PQ_query_param_string (pd->unit),
-    TALER_PQ_query_param_json (pd->image),
+    TALER_PQ_query_param_json (pd->image), /* $6 */
     TALER_PQ_query_param_json (pd->taxes),
     TALER_PQ_query_param_amount (&pd->price),
-    GNUNET_PQ_query_param_uint64 (&pd->total_stocked),
-    GNUNET_PQ_query_param_uint64 (&pd->total_lost),
+    GNUNET_PQ_query_param_uint64 (&pd->total_stock),
+    GNUNET_PQ_query_param_uint64 (&pd->total_lost), /* $11 */
     TALER_PQ_query_param_json (pd->address),
     GNUNET_PQ_query_param_absolute_time (&pd->next_restock),
     GNUNET_PQ_query_param_end
@@ -4099,15 +4097,13 @@ libtaler_plugin_merchantdb_postgres_init (void *cls)
                             ",price_val"
                             ",price_frac"
                             ",total_stock"
-                            ",total_sold"
-                            ",total_lost"
                             ",address"
                             ",next_restock)"
                             " SELECT merchant_serial,"
-                            " $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, 
$13, $14"
+                            " $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12"
                             " FROM merchant_instances"
                             " WHERE merchant_id=$1",
-                            14),
+                            12),
     /* for postgres_update_product() */
     GNUNET_PQ_make_prepare ("update_product",
                             "UPDATE merchant_inventory SET"
@@ -4163,7 +4159,7 @@ libtaler_plugin_merchantdb_postgres_init (void *cls)
     GNUNET_PQ_make_prepare ("delete_order",
                             "DELETE"
                             " FROM merchant_orders"
-                            " WHERE merchant_inventory.merchant_serial="
+                            " WHERE merchant_orders.merchant_serial="
                             "     (SELECT merchant_serial "
                             "        FROM merchant_instances"
                             "        WHERE merchant_id=$1)"
diff --git a/src/include/taler_merchant_service.h 
b/src/include/taler_merchant_service.h
index 98acae6..2fa6230 100644
--- a/src/include/taler_merchant_service.h
+++ b/src/include/taler_merchant_service.h
@@ -792,7 +792,7 @@ struct TALER_MERCHANT_ProductGetHandle;
  *              applicable taxes.
  * @param image base64-encoded product image
  * @param taxes list of taxes paid by the merchant
- * @param total_stocked in @a units, -1 to indicate "infinite" (i.e. 
electronic books),
+ * @param total_stock in @a units, -1 to indicate "infinite" (i.e. electronic 
books),
  *                does NOT indicate remaining stocks, to get remaining stocks,
  *                subtract @a total_sold and @a total_lost. Note that this 
still
  *                does not then say how many of the remaining inventory are 
locked.
@@ -812,7 +812,7 @@ typedef void
   const struct TALER_Amount *price,
   const json_t *image,
   const json_t *taxes,
-  int64_t total_stocked,
+  int64_t total_stock,
   uint64_t total_sold,
   uint64_t total_lost,
   const json_t *location,
@@ -883,7 +883,7 @@ typedef void
  *              applicable taxes.
  * @param image base64-encoded product image
  * @param taxes list of taxes paid by the merchant
- * @param total_stocked in @a units, -1 to indicate "infinite" (i.e. 
electronic books)
+ * @param total_stock in @a units, -1 to indicate "infinite" (i.e. electronic 
books)
  * @param address where the product is in stock
  * @param next_restock when the next restocking is expected to happen, 0 for 
unknown,
  *                     #GNUNET_TIME_UNIT_FOREVER_ABS for 'never'.
@@ -902,7 +902,7 @@ TALER_MERCHANT_products_post (
   const struct TALER_Amount *price,
   const json_t *image,
   const json_t *taxes,
-  int64_t total_stocked,
+  int64_t total_stock,
   const json_t *address,
   struct GNUNET_TIME_Absolute next_restock,
   TALER_MERCHANT_ProductsPostCallback cb,
@@ -955,10 +955,10 @@ typedef void
  *              applicable taxes.
  * @param image base64-encoded product image
  * @param taxes list of taxes paid by the merchant
- * @param total_stocked in @a units, -1 to indicate "infinite" (i.e. 
electronic books),
+ * @param total_stock in @a units, -1 to indicate "infinite" (i.e. electronic 
books),
  *               must be larger than previous values
  * @param total_lost in @a units, must be larger than previous values, and may
- *               not exceed total_stocked minus total_sold; if it does, the 
transaction
+ *               not exceed total_stock minus total_sold; if it does, the 
transaction
  *               will fail with a #MHD_HTTP_CONFLICT HTTP status code
  * @param address where the product is in stock
  * @param next_restock when the next restocking is expected to happen
@@ -977,7 +977,7 @@ TALER_MERCHANT_product_patch (
   const struct TALER_Amount *price,
   const json_t *image,
   const json_t *taxes,
-  int64_t total_stocked,
+  int64_t total_stock,
   uint64_t total_lost,
   const json_t *address,
   struct GNUNET_TIME_Absolute next_restock,
diff --git a/src/include/taler_merchant_testing_lib.h 
b/src/include/taler_merchant_testing_lib.h
index bba80d3..1da7478 100644
--- a/src/include/taler_merchant_testing_lib.h
+++ b/src/include/taler_merchant_testing_lib.h
@@ -266,7 +266,7 @@ TALER_TESTING_cmd_merchant_delete_instance (const char 
*label,
  *              applicable taxes.
  * @param image base64-encoded product image
  * @param taxes list of taxes paid by the merchant
- * @param total_stocked in @a units, -1 to indicate "infinite" (i.e. 
electronic books)
+ * @param total_stock in @a units, -1 to indicate "infinite" (i.e. electronic 
books)
  * @param address where the product is in stock
  * @param next_restock when the next restocking is expected to happen, 0 for 
unknown,
  *                     #GNUNET_TIME_UNIT_FOREVER_ABS for 'never'.
@@ -284,7 +284,7 @@ TALER_TESTING_cmd_merchant_post_products2 (
   const char *price,
   json_t *image,
   json_t *taxes,
-  int64_t total_stocked,
+  int64_t total_stock,
   json_t *address,
   struct GNUNET_TIME_Absolute next_restock,
   unsigned int http_status);
@@ -327,9 +327,9 @@ TALER_TESTING_cmd_merchant_post_products (const char *label,
  *              applicable taxes.
  * @param image base64-encoded product image
  * @param taxes list of taxes paid by the merchant
- * @param total_stocked in @a units, -1 to indicate "infinite" (i.e. 
electronic books)
+ * @param total_stock in @a units, -1 to indicate "infinite" (i.e. electronic 
books)
  * @param total_lost in @a units, must be larger than previous values, and may
- *               not exceed total_stocked minus total_sold; if it does, the 
transaction
+ *               not exceed total_stock minus total_sold; if it does, the 
transaction
  *               will fail with a #MHD_HTTP_CONFLICT HTTP status code
  * @param address where the product is in stock
  * @param next_restock when the next restocking is expected to happen, 0 for 
unknown,
@@ -348,7 +348,7 @@ TALER_TESTING_cmd_merchant_patch_product (
   const char *price,
   json_t *image,
   json_t *taxes,
-  int64_t total_stocked,
+  int64_t total_stock,
   uint64_t total_lost,
   json_t *address,
   struct GNUNET_TIME_Absolute next_restock,
diff --git a/src/include/taler_merchantdb_plugin.h 
b/src/include/taler_merchantdb_plugin.h
index 214baec..df88210 100644
--- a/src/include/taler_merchantdb_plugin.h
+++ b/src/include/taler_merchantdb_plugin.h
@@ -188,7 +188,7 @@ struct TALER_MERCHANTDB_ProductDetails
    * existing sales and lost product, in product-specific units. UINT64_MAX
    * indicates "infinite".
    */
-  uint64_t total_stocked;
+  uint64_t total_stock;
 
   /**
    * Number of units of the product in sold, in product-specific units.
diff --git a/src/lib/merchant_api_get_product.c 
b/src/lib/merchant_api_get_product.c
index 0388c79..e9263b0 100644
--- a/src/lib/merchant_api_get_product.c
+++ b/src/lib/merchant_api_get_product.c
@@ -97,11 +97,12 @@ handle_get_product_finished (void *cls,
       struct TALER_Amount price;
       json_t *image;
       json_t *taxes;
-      int64_t total_stocked;
+      int64_t total_stock;
       uint64_t total_sold;
       uint64_t total_lost;
-      json_t *location;
-      struct GNUNET_TIME_Absolute next_restock;
+      json_t *address;
+      bool rst_ok = true;
+      struct GNUNET_TIME_Absolute next_restock = {0};
       struct GNUNET_JSON_Specification spec[] = {
         GNUNET_JSON_spec_string ("description",
                                  &description),
@@ -109,29 +110,46 @@ handle_get_product_finished (void *cls,
                                &description_i18n),
         GNUNET_JSON_spec_string ("unit",
                                  &unit),
-        TALER_JSON_spec_amount ("price_fee",
+        TALER_JSON_spec_amount ("price",
                                 &price),
         GNUNET_JSON_spec_json ("image",
                                &image),
         GNUNET_JSON_spec_json ("taxes",
                                &taxes),
-        GNUNET_JSON_spec_int64 ("total_stocked",
-                                &total_stocked),
+        GNUNET_JSON_spec_int64 ("total_stock",
+                                &total_stock),
         GNUNET_JSON_spec_uint64 ("total_sold",
                                  &total_sold),
         GNUNET_JSON_spec_uint64 ("total_lost",
                                  &total_lost),
-        GNUNET_JSON_spec_json ("location",
-                               &location),
-        GNUNET_JSON_spec_absolute_time ("next_restock",
-                                        &next_restock),
+        GNUNET_JSON_spec_json ("address",
+                               &address),
         GNUNET_JSON_spec_end ()
       };
 
-      if (GNUNET_OK ==
-          GNUNET_JSON_parse (json,
-                             spec,
-                             NULL, NULL))
+      if (NULL !=
+          json_object_get (json,
+                           "next_restock"))
+      {
+        struct GNUNET_JSON_Specification spect[] = {
+          GNUNET_JSON_spec_absolute_time ("next_restock",
+                                          &next_restock),
+          GNUNET_JSON_spec_end ()
+        };
+
+        if (GNUNET_OK !=
+            GNUNET_JSON_parse (json,
+                               spect,
+                               NULL, NULL))
+          rst_ok = false;
+      }
+
+
+      if ( (rst_ok) &&
+           (GNUNET_OK ==
+            GNUNET_JSON_parse (json,
+                               spec,
+                               NULL, NULL)) )
       {
         pgh->cb (pgh->cb_cls,
                  &hr,
@@ -141,10 +159,10 @@ handle_get_product_finished (void *cls,
                  &price,
                  image,
                  taxes,
-                 total_stocked,
+                 total_stock,
                  total_sold,
                  total_lost,
-                 location,
+                 address,
                  next_restock);
         GNUNET_JSON_parse_free (spec);
         TALER_MERCHANT_product_get_cancel (pgh);
diff --git a/src/lib/merchant_api_patch_product.c 
b/src/lib/merchant_api_patch_product.c
index 4fba097..c97bd1a 100644
--- a/src/lib/merchant_api_patch_product.c
+++ b/src/lib/merchant_api_patch_product.c
@@ -167,10 +167,10 @@ handle_patch_product_finished (void *cls,
  *              applicable taxes.
  * @param image base64-encoded product image
  * @param taxes list of taxes paid by the merchant
- * @param total_stocked in @a units, -1 to indicate "infinite" (i.e. 
electronic books),
+ * @param total_stock in @a units, -1 to indicate "infinite" (i.e. electronic 
books),
  *               must be larger than previous values
  * @param total_lost in @a units, must be larger than previous values, and may
- *               not exceed total_stocked minus total_sold; if it does, the 
transaction
+ *               not exceed total_stock minus total_sold; if it does, the 
transaction
  *               will fail with a #MHD_HTTP_CONFLICT HTTP status code
  * @param location where the product is in stock
  * @param next_restock when the next restocking is expected to happen
@@ -189,7 +189,7 @@ TALER_MERCHANT_product_patch (
   const struct TALER_Amount *price,
   const json_t *image,
   const json_t *taxes,
-  int64_t total_stocked,
+  int64_t total_stock,
   uint64_t total_lost,
   const json_t *address,
   struct GNUNET_TIME_Absolute next_restock,
@@ -199,6 +199,7 @@ TALER_MERCHANT_product_patch (
   struct TALER_MERCHANT_ProductPatchHandle *pph;
   json_t *req_obj;
 
+  (void) GNUNET_TIME_round_abs (&next_restock);
   req_obj = json_pack ("{s:s, s:O, s:s, s:o, s:O,"
                        " s:O, s:I: s:I, s:O, s:o}",
                        "description",
@@ -214,8 +215,8 @@ TALER_MERCHANT_product_patch (
                        /* End of first group of 5 */
                        "taxes",
                        taxes,
-                       "total_stocked",
-                       (json_int_t) total_stocked,
+                       "total_stock",
+                       (json_int_t) total_stock,
                        "total_lost",
                        (json_int_t) total_lost,
                        "address",
diff --git a/src/lib/merchant_api_post_products.c 
b/src/lib/merchant_api_post_products.c
index 7c3f57b..af2e4ea 100644
--- a/src/lib/merchant_api_post_products.c
+++ b/src/lib/merchant_api_post_products.c
@@ -167,7 +167,7 @@ handle_post_products_finished (void *cls,
  *              applicable taxes.
  * @param image base64-encoded product image
  * @param taxes list of taxes paid by the merchant
- * @param total_stocked in @a units, -1 to indicate "infinite" (i.e. 
electronic books)
+ * @param total_stock in @a units, -1 to indicate "infinite" (i.e. electronic 
books)
  * @param address where the product is in stock
  * @param next_restock when the next restocking is expected to happen, 0 for 
unknown,
  *                     #GNUNET_TIME_UNIT_FOREVER_ABS for 'never'.
@@ -186,7 +186,7 @@ TALER_MERCHANT_products_post (
   const struct TALER_Amount *price,
   const json_t *image,
   const json_t *taxes,
-  int64_t total_stocked,
+  int64_t total_stock,
   const json_t *address,
   struct GNUNET_TIME_Absolute next_restock,
   TALER_MERCHANT_ProductsPostCallback cb,
@@ -195,6 +195,7 @@ TALER_MERCHANT_products_post (
   struct TALER_MERCHANT_ProductsPostHandle *pph;
   json_t *req_obj;
 
+  (void) GNUNET_TIME_round_abs (&next_restock);
   req_obj = json_pack ("{s:s, s:s, s:O, s:s, s:o,"
                        " s:O, s:O, s:I, s:O, s:o}",
                        "product_id",
@@ -212,8 +213,8 @@ TALER_MERCHANT_products_post (
                        image,
                        "taxes",
                        taxes,
-                       "total_stocked",
-                       (json_int_t) total_stocked,
+                       "total_stock",
+                       (json_int_t) total_stock,
                        "address",
                        address,
                        "next_restock",
diff --git a/src/testing/test_merchant_api.c b/src/testing/test_merchant_api.c
index 1e91d4e..1838084 100644
--- a/src/testing/test_merchant_api.c
+++ b/src/testing/test_merchant_api.c
@@ -1034,6 +1034,10 @@ run (void *cls,
     TALER_TESTING_cmd_merchant_delete_product ("get-products-empty",
                                                merchant_url,
                                                "p1",
+                                               MHD_HTTP_NOT_FOUND),
+    TALER_TESTING_cmd_merchant_delete_product ("get-products-empty",
+                                               merchant_url,
+                                               "product-1",
                                                MHD_HTTP_NO_CONTENT),
 #if 0
     TALER_TESTING_cmd_batch ("pay",
diff --git a/src/testing/testing_api_cmd_get_product.c 
b/src/testing/testing_api_cmd_get_product.c
index 43d39bb..8ba63af 100644
--- a/src/testing/testing_api_cmd_get_product.c
+++ b/src/testing/testing_api_cmd_get_product.c
@@ -81,7 +81,7 @@ struct GetProductState
  *              applicable taxes.
  * @param image base64-encoded product image
  * @param taxes list of taxes paid by the merchant
- * @param total_stocked in @a units, -1 to indicate "infinite" (i.e. 
electronic books),
+ * @param total_stock in @a units, -1 to indicate "infinite" (i.e. electronic 
books),
  *                does NOT indicate remaining stocks, to get remaining stocks,
  *                subtract @a total_sold and @a total_lost. Note that this 
still
  *                does not then say how many of the remaining inventory are 
locked.
@@ -100,7 +100,7 @@ get_product_cb (void *cls,
                 const struct TALER_Amount *price,
                 const json_t *image,
                 const json_t *taxes,
-                int64_t total_stocked,
+                int64_t total_stock,
                 uint64_t total_sold,
                 uint64_t total_lost,
                 const json_t *location,
diff --git a/src/testing/testing_api_cmd_patch_product.c 
b/src/testing/testing_api_cmd_patch_product.c
index ec4bb4c..9ddcdce 100644
--- a/src/testing/testing_api_cmd_patch_product.c
+++ b/src/testing/testing_api_cmd_patch_product.c
@@ -87,7 +87,7 @@ struct PatchProductState
   /**
    * in @e units, -1 to indicate "infinite" (i.e. electronic books)
    */
-  int64_t total_stocked;
+  int64_t total_stock;
 
   /**
    * in @e units.
@@ -172,7 +172,7 @@ patch_product_run (void *cls,
                                            &pis->price,
                                            pis->image,
                                            pis->taxes,
-                                           pis->total_stocked,
+                                           pis->total_stock,
                                            pis->total_lost,
                                            pis->address,
                                            pis->next_restock,
@@ -225,9 +225,9 @@ patch_product_cleanup (void *cls,
  *              applicable taxes.
  * @param image base64-encoded product image
  * @param taxes list of taxes paid by the merchant
- * @param total_stocked in @a units, -1 to indicate "infinite" (i.e. 
electronic books)
+ * @param total_stock in @a units, -1 to indicate "infinite" (i.e. electronic 
books)
  * @param total_lost in @a units, must be larger than previous values, and may
- *               not exceed total_stocked minus total_sold; if it does, the 
transaction
+ *               not exceed total_stock minus total_sold; if it does, the 
transaction
  *               will fail with a #MHD_HTTP_CONFLICT HTTP status code
  * @param address where the product is in stock
  * @param next_restock when the next restocking is expected to happen, 0 for 
unknown,
@@ -246,7 +246,7 @@ TALER_TESTING_cmd_merchant_patch_product (
   const char *price,
   json_t *image,
   json_t *taxes,
-  int64_t total_stocked,
+  int64_t total_stock,
   uint64_t total_lost,
   json_t *address,
   struct GNUNET_TIME_Absolute next_restock,
@@ -266,7 +266,7 @@ TALER_TESTING_cmd_merchant_patch_product (
                                          &pis->price));
   pis->image = image; /* ownership taken */
   pis->taxes = taxes; /* ownership taken */
-  pis->total_stocked = total_stocked;
+  pis->total_stock = total_stock;
   pis->total_lost = total_lost;
   pis->address = address; /* ownership taken */
   pis->next_restock = next_restock; {
diff --git a/src/testing/testing_api_cmd_post_instances.c 
b/src/testing/testing_api_cmd_post_instances.c
index 7162600..6392420 100644
--- a/src/testing/testing_api_cmd_post_instances.c
+++ b/src/testing/testing_api_cmd_post_instances.c
@@ -136,10 +136,13 @@ post_instances_cb (void *cls,
   }
   switch (hr->http_status)
   {
-  case MHD_HTTP_OK:
+  case MHD_HTTP_NO_CONTENT:
+    break;
+  case MHD_HTTP_CONFLICT:
     break;
   // FIXME: add other legitimate states here...
   default:
+    GNUNET_break (0);
     GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
                 "Unhandled HTTP status.\n");
   }
diff --git a/src/testing/testing_api_cmd_post_products.c 
b/src/testing/testing_api_cmd_post_products.c
index 8f787bc..68f6897 100644
--- a/src/testing/testing_api_cmd_post_products.c
+++ b/src/testing/testing_api_cmd_post_products.c
@@ -87,7 +87,7 @@ struct PostProductsState
   /**
    * in @e units, -1 to indicate "infinite" (i.e. electronic books)
    */
-  int64_t total_stocked;
+  int64_t total_stock;
 
   /**
    * where the product is in stock
@@ -131,10 +131,13 @@ post_products_cb (void *cls,
   }
   switch (hr->http_status)
   {
-  case MHD_HTTP_OK:
+  case MHD_HTTP_NO_CONTENT:
+    break;
+  case MHD_HTTP_CONFLICT:
     break;
   // FIXME: add other legitimate states here...
   default:
+    GNUNET_break (0);
     GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
                 "Unhandled HTTP status.\n");
   }
@@ -167,7 +170,7 @@ post_products_run (void *cls,
                                            &pis->price,
                                            pis->image,
                                            pis->taxes,
-                                           pis->total_stocked,
+                                           pis->total_stock,
                                            pis->address,
                                            pis->next_restock,
                                            &post_products_cb,
@@ -219,7 +222,7 @@ post_products_cleanup (void *cls,
  *              applicable taxes.
  * @param image base64-encoded product image
  * @param taxes list of taxes paid by the merchant
- * @param total_stocked in @a units, -1 to indicate "infinite" (i.e. 
electronic books)
+ * @param total_stock in @a units, -1 to indicate "infinite" (i.e. electronic 
books)
  * @param address where the product is in stock
  * @param next_restock when the next restocking is expected to happen, 0 for 
unknown,
  *                     #GNUNET_TIME_UNIT_FOREVER_ABS for 'never'.
@@ -237,7 +240,7 @@ TALER_TESTING_cmd_merchant_post_products2 (
   const char *price,
   json_t *image,
   json_t *taxes,
-  int64_t total_stocked,
+  int64_t total_stock,
   json_t *address,
   struct GNUNET_TIME_Absolute next_restock,
   unsigned int http_status)
@@ -256,7 +259,7 @@ TALER_TESTING_cmd_merchant_post_products2 (
                                          &pis->price));
   pis->image = image; /* ownership taken */
   pis->taxes = taxes; /* ownership taken */
-  pis->total_stocked = total_stocked;
+  pis->total_stock = total_stock;
   pis->address = address; /* ownership taken */
   pis->next_restock = next_restock;
   {

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