[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-merchant] branch master updated: implement #6616 claim status in
From: |
gnunet |
Subject: |
[taler-merchant] branch master updated: implement #6616 claim status in /private/orders/ID handler |
Date: |
Fri, 02 Oct 2020 20:20:23 +0200 |
This is an automated email from the git hooks/post-receive script.
grothoff pushed a commit to branch master
in repository merchant.
The following commit(s) were added to refs/heads/master by this push:
new e240640 implement #6616 claim status in /private/orders/ID handler
e240640 is described below
commit e24064063f5d7dc36ab14e1f911708e6d981a10e
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Fri Oct 2 20:20:08 2020 +0200
implement #6616 claim status in /private/orders/ID handler
---
.../taler-merchant-httpd_private-get-orders-ID.c | 15 +-
src/include/taler_merchant_service.h | 45 +-
src/include/taler_merchant_testing_lib.h | 8 +-
src/lib/merchant_api_merchant_get_order.c | 50 +-
src/testing/test_merchant_api.c | 18 +-
src/testing/testing_api_cmd_merchant_get_order.c | 599 +++++++++++----------
6 files changed, 419 insertions(+), 316 deletions(-)
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 d95f43d..dbb573e 100644
--- a/src/backend/taler-merchant-httpd_private-get-orders-ID.c
+++ b/src/backend/taler-merchant-httpd_private-get-orders-ID.c
@@ -1044,7 +1044,20 @@ TMH_private_get_orders_ID (const struct
TMH_RequestHandler *rh,
gorc->session_id,
gorc->fulfillment_url);
}
-
+ if ( (! paid) &&
+ (! order_only) )
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Order %s claimed but not paid yet\n",
+ hc->infix);
+ return TALER_MHD_reply_json_pack (connection,
+ MHD_HTTP_OK,
+ "{s:O, s:s}",
+ "contract_terms",
+ gorc->contract_terms,
+ "order_status",
+ "claimed");
+ }
if (paid &&
(! wired) &&
gorc->transfer_status_requested)
diff --git a/src/include/taler_merchant_service.h
b/src/include/taler_merchant_service.h
index f59cfec..1ff5fde 100644
--- a/src/include/taler_merchant_service.h
+++ b/src/include/taler_merchant_service.h
@@ -1631,6 +1631,28 @@ struct TALER_MERCHANT_RefundOrderDetail
};
+/**
+ * Status of an order.
+ */
+enum TALER_MERCHANT_OrderStatusCode
+{
+ /**
+ * The order was paid.
+ */
+ TALER_MERCHANT_OSC_PAID = 1,
+
+ /**
+ * The order was claimed but not yet paid.
+ */
+ TALER_MERCHANT_OSC_CLAIMED = 2,
+
+ /**
+ * The order was never paid or claimed.
+ */
+ TALER_MERCHANT_OSC_UNPAID = 3
+};
+
+
/**
* Details about the status of an order.
*/
@@ -1638,18 +1660,18 @@ struct TALER_MERCHANT_OrderStatusResponse
{
/**
- * true if the payment is settled, false if not settled.
+ * Status of the order.
*/
- bool paid;
+ enum TALER_MERCHANT_OrderStatusCode status;
/**
- * Details depending on the payment status given in @e paid.
+ * Details depending on the payment status given in @e status.
*/
union
{
/**
- * Details provided if @e paid is #GNUNET_YES.
+ * Details provided if @e status is #TALER_MERCHANT_OSC_PAID.
*/
struct
{
@@ -1729,7 +1751,20 @@ struct TALER_MERCHANT_OrderStatusResponse
} paid;
/**
- * Details provided if @e paid is #GNUNET_NO.
+ * Details provided if @e status is #TALER_MERCHANT_OSC_CLAIMED.
+ */
+ struct
+ {
+
+ /**
+ * The full contract terms of the claimed order (including client nonce
from claiming).
+ */
+ const json_t *contract_terms;
+
+ } claimed;
+
+ /**
+ * Details provided if @e status is #TALER_MERCHANT_OSC_UNPAID.
*/
struct
{
diff --git a/src/include/taler_merchant_testing_lib.h
b/src/include/taler_merchant_testing_lib.h
index aa0211a..7c904de 100644
--- a/src/include/taler_merchant_testing_lib.h
+++ b/src/include/taler_merchant_testing_lib.h
@@ -641,7 +641,7 @@ TALER_TESTING_cmd_wallet_poll_order_conclude (
* @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 paid whether the order has been paid for or not.
+ * @param osc expected order status
* @param refunded whether the order has been refunded.
* @param http_status expected HTTP response code for the request.
* @param ... NULL-terminated list of labels (const char *) of
@@ -653,7 +653,7 @@ struct TALER_TESTING_Command
TALER_TESTING_cmd_merchant_get_order (const char *label,
const char *merchant_url,
const char *order_reference,
- bool paid,
+ enum TALER_MERCHANT_OrderStatusCode osc,
bool refunded,
unsigned int http_status,
...);
@@ -666,7 +666,7 @@ TALER_TESTING_cmd_merchant_get_order (const char *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 paid whether the order has been paid for or not.
+ * @param osc expected order status
* @param wired whether the order has been wired or not.
* @param transfers NULL-terminated list of labels (const char *) of
* wire transfers (commands) we expect to be aggregated in the order
@@ -686,7 +686,7 @@ struct TALER_TESTING_Command
TALER_TESTING_cmd_merchant_get_order2 (const char *label,
const char *merchant_url,
const char *order_reference,
- bool paid,
+ enum TALER_MERCHANT_OrderStatusCode osc,
bool wired,
const char **transfers,
bool refunded,
diff --git a/src/lib/merchant_api_merchant_get_order.c
b/src/lib/merchant_api_merchant_get_order.c
index 21e60ef..22c0dcd 100644
--- a/src/lib/merchant_api_merchant_get_order.c
+++ b/src/lib/merchant_api_merchant_get_order.c
@@ -95,7 +95,7 @@ handle_unpaid (struct TALER_MERCHANT_OrderMerchantGetHandle
*omgh,
}
{
struct TALER_MERCHANT_OrderStatusResponse osr = {
- .paid = false,
+ .status = TALER_MERCHANT_OSC_UNPAID,
.details.unpaid.taler_pay_uri = taler_pay_uri,
.details.unpaid.already_paid_order_id = already_paid_order_id
};
@@ -107,6 +107,47 @@ handle_unpaid (struct
TALER_MERCHANT_OrderMerchantGetHandle *omgh,
}
+/**
+ * Function called when we're done processing the GET /private/orders/$ORDER
+ * request and we got an HTTP status of OK and the order was claimed but not
+ * paid. Parse the response and call the callback.
+ *
+ * @param omgh handle for the request
+ * @param[in,out] hr HTTP response we got
+ */
+static void
+handle_claimed (struct TALER_MERCHANT_OrderMerchantGetHandle *omgh,
+ struct TALER_MERCHANT_HttpResponse *hr)
+{
+ struct TALER_MERCHANT_OrderStatusResponse osr = {
+ .status = TALER_MERCHANT_OSC_CLAIMED
+ };
+ struct GNUNET_JSON_Specification spec[] = {
+ GNUNET_JSON_spec_json ("contract_terms",
+ (json_t **) &osr.details.claimed.contract_terms),
+ GNUNET_JSON_spec_end ()
+ };
+
+ if (GNUNET_OK !=
+ GNUNET_JSON_parse (hr->reply,
+ spec,
+ NULL, NULL))
+ {
+ GNUNET_break_op (0);
+ hr->http_status = 0;
+ hr->ec = TALER_EC_MERCHANT_ORDER_GET_REPLY_MALFORMED;
+ omgh->cb (omgh->cb_cls,
+ hr,
+ NULL);
+ return;
+ }
+ omgh->cb (omgh->cb_cls,
+ hr,
+ &osr);
+ GNUNET_JSON_parse_free (spec);
+}
+
+
/**
* Function called when we're done processing the GET /private/orders/$ORDER
* request and we got an HTTP status of OK and the order was paid. Parse
@@ -125,7 +166,7 @@ handle_paid (struct TALER_MERCHANT_OrderMerchantGetHandle
*omgh,
json_t *wire_reports;
json_t *refund_details;
struct TALER_MERCHANT_OrderStatusResponse osr = {
- .paid = true
+ .status = TALER_MERCHANT_OSC_PAID
};
struct GNUNET_JSON_Specification spec[] = {
GNUNET_JSON_spec_bool ("refunded",
@@ -377,6 +418,11 @@ handle_merchant_order_get_finished (void *cls,
handle_paid (omgh,
&hr);
}
+ else if (0 == strcmp ("claimed", order_status))
+ {
+ handle_claimed (omgh,
+ &hr);
+ }
else if (0 == strcmp ("unpaid", order_status))
{
handle_unpaid (omgh,
diff --git a/src/testing/test_merchant_api.c b/src/testing/test_merchant_api.c
index 9c5a8d3..c838bed 100644
--- a/src/testing/test_merchant_api.c
+++ b/src/testing/test_merchant_api.c
@@ -213,7 +213,7 @@ run (void *cls,
TALER_TESTING_cmd_merchant_get_order ("get-order-4",
merchant_url,
"create-proposal-4",
- false,
+ TALER_MERCHANT_OSC_UNPAID,
false,
MHD_HTTP_OK),
TALER_TESTING_cmd_merchant_delete_order ("delete-order-4",
@@ -334,7 +334,7 @@ run (void *cls,
TALER_TESTING_cmd_merchant_get_order ("get-order-merchant-1",
merchant_url,
"create-proposal-1",
- false,
+ TALER_MERCHANT_OSC_CLAIMED,
false,
MHD_HTTP_OK),
TALER_TESTING_cmd_poll_order_start ("poll-order-merchant-1-start",
@@ -367,7 +367,7 @@ run (void *cls,
TALER_TESTING_cmd_merchant_get_order ("get-order-merchant-1-2",
merchant_url,
"create-proposal-1",
- true,
+ TALER_MERCHANT_OSC_PAID,
false,
MHD_HTTP_OK),
TALER_TESTING_cmd_merchant_get_orders ("get-orders-1-paid",
@@ -407,7 +407,7 @@ run (void *cls,
TALER_TESTING_cmd_merchant_get_order2 ("get-order-merchant-1-2",
merchant_url,
"create-proposal-1",
- true,
+ TALER_MERCHANT_OSC_PAID,
true,
order_1_transfers,
false,
@@ -424,7 +424,7 @@ run (void *cls,
TALER_TESTING_cmd_merchant_get_order2 ("get-order-merchant-1-forget-1",
merchant_url,
"create-proposal-1",
- true,
+ TALER_MERCHANT_OSC_PAID,
true,
order_1_transfers,
false,
@@ -455,7 +455,7 @@ run (void *cls,
TALER_TESTING_cmd_merchant_get_order2 ("get-order-merchant-1-forget-2",
merchant_url,
"create-proposal-1",
- true,
+ TALER_MERCHANT_OSC_PAID,
true,
order_1_transfers,
false,
@@ -472,7 +472,7 @@ run (void *cls,
TALER_TESTING_cmd_merchant_get_order2 ("get-order-merchant-1-forget-3",
merchant_url,
"create-proposal-1",
- true,
+ TALER_MERCHANT_OSC_PAID,
true,
order_1_transfers,
false,
@@ -715,7 +715,7 @@ run (void *cls,
TALER_TESTING_cmd_merchant_get_order ("get-order-merchant-1r",
merchant_url,
"create-proposal-1r",
- true,
+ TALER_MERCHANT_OSC_PAID,
true,
MHD_HTTP_OK,
"refund-increase-1r",
@@ -724,7 +724,7 @@ run (void *cls,
TALER_TESTING_cmd_merchant_get_order2 ("get-order-merchant-1r-2",
merchant_url,
"create-proposal-1r",
- true,
+ TALER_MERCHANT_OSC_PAID,
false,
NULL,
true,
diff --git a/src/testing/testing_api_cmd_merchant_get_order.c
b/src/testing/testing_api_cmd_merchant_get_order.c
index 87afb01..556140f 100644
--- a/src/testing/testing_api_cmd_merchant_get_order.c
+++ b/src/testing/testing_api_cmd_merchant_get_order.c
@@ -59,9 +59,9 @@ struct MerchantGetOrderState
const char *order_reference;
/**
- * Whether the order was paid or not.
+ * Expected order status.
*/
- bool paid;
+ enum TALER_MERCHANT_OrderStatusCode osc;
/**
* Whether the order was refunded or not.
@@ -162,355 +162,364 @@ merchant_get_order_cb (
case MHD_HTTP_OK:
// FIXME: use gts->tip_reference here to
// check if the data returned matches that from the POST / PATCH
- if (gos->paid != osr->paid)
+ if (gos->osc != osr->status)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Order paid does not match\n");
TALER_TESTING_interpreter_fail (gos->is);
return;
}
- if (gos->paid)
+ switch (osr->status)
{
- const struct TALER_TESTING_Command *order_cmd;
- struct TALER_Amount refunded_total;
-
- order_cmd = TALER_TESTING_interpreter_lookup_command (
- gos->is,
- gos->order_reference);
-
+ case TALER_MERCHANT_OSC_PAID:
{
- const json_t *expected_contract_terms;
- json_t *ct;
-
- if (GNUNET_OK !=
- TALER_TESTING_get_trait_contract_terms (order_cmd,
- 0,
- &expected_contract_terms))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Could not fetch order contract terms\n");
- TALER_TESTING_interpreter_fail (gos->is);
- return;
- }
+ const struct TALER_TESTING_Command *order_cmd;
+ struct TALER_Amount refunded_total;
- ct = json_deep_copy (expected_contract_terms);
+ order_cmd = TALER_TESTING_interpreter_lookup_command (
+ gos->is,
+ gos->order_reference);
- /* Apply all forgets, then compare */
- for (unsigned int i = 0; i < gos->forgets_length; ++i)
{
- const struct TALER_TESTING_Command *forget_cmd;
- const unsigned int *paths_length;
-
- forget_cmd = TALER_TESTING_interpreter_lookup_command (
- gos->is,
- gos->forgets[i]);
+ const json_t *expected_contract_terms;
+ json_t *ct;
if (GNUNET_OK !=
- TALER_TESTING_get_trait_uint32 (forget_cmd,
- 0,
- &paths_length))
+ TALER_TESTING_get_trait_contract_terms (order_cmd,
+ 0,
+
&expected_contract_terms))
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Couldn't fetch forget paths length\n");
+ "Could not fetch order contract terms\n");
TALER_TESTING_interpreter_fail (gos->is);
return;
}
- for (unsigned int j = 0; j < *paths_length; ++j)
+ ct = json_deep_copy (expected_contract_terms);
+
+ /* Apply all forgets, then compare */
+ for (unsigned int i = 0; i < gos->forgets_length; ++i)
{
- const char *path;
- int res = GNUNET_OK;
+ const struct TALER_TESTING_Command *forget_cmd;
+ const unsigned int *paths_length;
+
+ forget_cmd = TALER_TESTING_interpreter_lookup_command (
+ gos->is,
+ gos->forgets[i]);
if (GNUNET_OK !=
- TALER_TESTING_get_trait_string (forget_cmd,
- j,
- &path))
+ TALER_TESTING_get_trait_uint32 (forget_cmd,
+ 0,
+ &paths_length))
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Couldn't fetch forget path\n");
+ "Couldn't fetch forget paths length\n");
TALER_TESTING_interpreter_fail (gos->is);
return;
}
- GNUNET_assert (GNUNET_OK ==
- TALER_JSON_expand_path (ct,
- path,
- &apply_forget,
- &res));
- GNUNET_assert (GNUNET_OK == res);
+ for (unsigned int j = 0; j < *paths_length; ++j)
+ {
+ const char *path;
+ int res = GNUNET_OK;
+
+ if (GNUNET_OK !=
+ TALER_TESTING_get_trait_string (forget_cmd,
+ j,
+ &path))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Couldn't fetch forget path\n");
+ TALER_TESTING_interpreter_fail (gos->is);
+ return;
+ }
+
+ GNUNET_assert (GNUNET_OK ==
+ TALER_JSON_expand_path (ct,
+ path,
+ &apply_forget,
+ &res));
+ GNUNET_assert (GNUNET_OK == res);
+ }
}
- }
- if (1 != json_equal (ct,
- osr->details.paid.contract_terms))
+ if (1 != json_equal (ct,
+ osr->details.paid.contract_terms))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Order contract terms do not match\n");
+ TALER_TESTING_interpreter_fail (gos->is);
+ return;
+ }
+
+ json_decref (ct);
+ }
+ if (gos->wired != osr->details.paid.wired)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Order contract terms do not match\n");
+ "Order wired does not match\n");
TALER_TESTING_interpreter_fail (gos->is);
return;
}
-
- json_decref (ct);
- }
- if (gos->wired != osr->details.paid.wired)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Order wired does not match\n");
- TALER_TESTING_interpreter_fail (gos->is);
- return;
- }
- if (gos->transfers_length != osr->details.paid.wts_len)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Number of transfers found does not match\n");
- TALER_TESTING_interpreter_fail (gos->is);
- return;
- }
- for (unsigned int i = 0; i < gos->transfers_length; ++i)
- {
- const struct TALER_TESTING_Command *transfer_cmd;
-
- transfer_cmd = TALER_TESTING_interpreter_lookup_command (
- gos->is,
- gos->transfers[i]);
+ if (gos->transfers_length != osr->details.paid.wts_len)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Number of transfers found does not match\n");
+ TALER_TESTING_interpreter_fail (gos->is);
+ return;
+ }
+ for (unsigned int i = 0; i < gos->transfers_length; ++i)
{
- const struct TALER_WireTransferIdentifierRawP *wtid;
+ const struct TALER_TESTING_Command *transfer_cmd;
- if (GNUNET_OK !=
- TALER_TESTING_get_trait_wtid (transfer_cmd,
- 0,
- &wtid))
+ transfer_cmd = TALER_TESTING_interpreter_lookup_command (
+ gos->is,
+ gos->transfers[i]);
{
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Could not fetch wire transfer id\n");
- TALER_TESTING_interpreter_fail (gos->is);
- return;
+ const struct TALER_WireTransferIdentifierRawP *wtid;
+
+ if (GNUNET_OK !=
+ TALER_TESTING_get_trait_wtid (transfer_cmd,
+ 0,
+ &wtid))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Could not fetch wire transfer id\n");
+ TALER_TESTING_interpreter_fail (gos->is);
+ return;
+ }
+ if (0 != GNUNET_memcmp (wtid,
+ &osr->details.paid.wts[i].wtid))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Wire transfer id does not match\n");
+ TALER_TESTING_interpreter_fail (gos->is);
+ return;
+ }
}
- if (0 != GNUNET_memcmp (wtid,
- &osr->details.paid.wts[i].wtid))
{
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Wire transfer id does not match\n");
- TALER_TESTING_interpreter_fail (gos->is);
- return;
- }
- }
- {
- const char *exchange_url;
+ const char *exchange_url;
- if (GNUNET_OK !=
- TALER_TESTING_get_trait_string (transfer_cmd,
- 1,
- &exchange_url))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Could not fetch wire transfer exchange url\n");
- TALER_TESTING_interpreter_fail (gos->is);
- return;
+ if (GNUNET_OK !=
+ TALER_TESTING_get_trait_string (transfer_cmd,
+ 1,
+ &exchange_url))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Could not fetch wire transfer exchange url\n");
+ TALER_TESTING_interpreter_fail (gos->is);
+ return;
+ }
+ if (0 != strcmp (exchange_url,
+ osr->details.paid.wts[i].exchange_url))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Wire transfer exchange url does not match\n");
+ TALER_TESTING_interpreter_fail (gos->is);
+ return;
+ }
}
- if (0 != strcmp (exchange_url,
- osr->details.paid.wts[i].exchange_url))
{
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Wire transfer exchange url does not match\n");
- TALER_TESTING_interpreter_fail (gos->is);
- return;
+ struct TALER_Amount transfer_total;
+ const struct TALER_Amount *transfer_amount;
+ const struct TALER_Amount *transfer_fee;
+
+ if ((GNUNET_OK !=
+ TALER_TESTING_get_trait_amount_obj (transfer_cmd,
+ 0,
+ &transfer_amount)) ||
+ (GNUNET_OK !=
+ TALER_TESTING_get_trait_amount_obj (transfer_cmd,
+ 1,
+ &transfer_fee)))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Could not fetch wire transfer amount/fee\n");
+ TALER_TESTING_interpreter_fail (gos->is);
+ return;
+ }
+ if (0 > TALER_amount_add (&transfer_total,
+ transfer_amount,
+ transfer_fee))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Could not total wire transfer\n");
+ TALER_TESTING_interpreter_fail (gos->is);
+ return;
+ }
+ if ((GNUNET_OK != TALER_amount_cmp_currency (&transfer_total,
+
&osr->details.paid.wts[
+ i]
+ .total_amount)) ||
+ (0 != TALER_amount_cmp (&transfer_total,
+
&osr->details.paid.wts[i].total_amount)))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Wire transfer total does not match\n");
+ TALER_TESTING_interpreter_fail (gos->is);
+ return;
+ }
}
}
+ if (gos->refunded != osr->details.paid.refunded)
{
- struct TALER_Amount transfer_total;
- const struct TALER_Amount *transfer_amount;
- const struct TALER_Amount *transfer_fee;
-
- if ((GNUNET_OK !=
- TALER_TESTING_get_trait_amount_obj (transfer_cmd,
- 0,
- &transfer_amount)) ||
- (GNUNET_OK !=
- TALER_TESTING_get_trait_amount_obj (transfer_cmd,
- 1,
- &transfer_fee)))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Could not fetch wire transfer amount/fee\n");
- TALER_TESTING_interpreter_fail (gos->is);
- return;
- }
- if (0 > TALER_amount_add (&transfer_total,
- transfer_amount,
- transfer_fee))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Could not total wire transfer\n");
- TALER_TESTING_interpreter_fail (gos->is);
- return;
- }
- if ((GNUNET_OK != TALER_amount_cmp_currency (&transfer_total,
-
&osr->details.paid.wts[i]
- .total_amount)) ||
- (0 != TALER_amount_cmp (&transfer_total,
- &osr->details.paid.wts[i].total_amount)))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Wire transfer total does not match\n");
- TALER_TESTING_interpreter_fail (gos->is);
- return;
- }
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Order refunded does not match\n");
+ TALER_TESTING_interpreter_fail (gos->is);
+ return;
}
- }
- if (gos->refunded != osr->details.paid.refunded)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Order refunded does not match\n");
- TALER_TESTING_interpreter_fail (gos->is);
- return;
- }
- if (gos->refunds_length != osr->details.paid.refunds_len)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Number of refunds found does not match\n");
- TALER_TESTING_interpreter_fail (gos->is);
- return;
- }
- if (0 < gos->refunds_length)
- GNUNET_assert (GNUNET_OK ==
- TALER_amount_get_zero
(osr->details.paid.refund_amount.currency,
- &refunded_total));
- for (unsigned int i = 0; i < gos->refunds_length; ++i)
- {
- const struct TALER_TESTING_Command *refund_cmd;
-
- refund_cmd = TALER_TESTING_interpreter_lookup_command (
- gos->is,
- gos->refunds[i]);
+ if (gos->refunds_length != osr->details.paid.refunds_len)
{
- const char *expected_amount_str;
- struct TALER_Amount expected_amount;
- struct TALER_Amount *amount_found =
- &osr->details.paid.refunds[i].refund_amount;
-
- if (GNUNET_OK !=
- TALER_TESTING_get_trait_string (refund_cmd,
- 0,
- &expected_amount_str))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Could not fetch refund amount\n");
- TALER_TESTING_interpreter_fail (gos->is);
- return;
- }
- GNUNET_assert (GNUNET_OK ==
- TALER_string_to_amount (expected_amount_str,
- &expected_amount));
- GNUNET_assert (0 <= TALER_amount_add (&refunded_total,
- &refunded_total,
- amount_found));
- if ((GNUNET_OK !=
- TALER_amount_cmp_currency (&expected_amount,
- &refunded_total)) ||
- (0 != TALER_amount_cmp (&expected_amount,
- &refunded_total)))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Refund amounts do not match\n");
- TALER_TESTING_interpreter_fail (gos->is);
- return;
- }
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Number of refunds found does not match\n");
+ TALER_TESTING_interpreter_fail (gos->is);
+ return;
}
+ if (0 < gos->refunds_length)
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_get_zero (
+ osr->details.paid.refund_amount.currency,
+ &refunded_total));
+ for (unsigned int i = 0; i < gos->refunds_length; ++i)
{
- const char *expected_reason;
+ const struct TALER_TESTING_Command *refund_cmd;
- if (GNUNET_OK !=
- TALER_TESTING_get_trait_string (refund_cmd,
- 1,
- &expected_reason))
+ refund_cmd = TALER_TESTING_interpreter_lookup_command (
+ gos->is,
+ gos->refunds[i]);
{
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Could not fetch reason\n");
- TALER_TESTING_interpreter_fail (gos->is);
- return;
+ const char *expected_amount_str;
+ struct TALER_Amount expected_amount;
+ struct TALER_Amount *amount_found =
+ &osr->details.paid.refunds[i].refund_amount;
+
+ if (GNUNET_OK !=
+ TALER_TESTING_get_trait_string (refund_cmd,
+ 0,
+ &expected_amount_str))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Could not fetch refund amount\n");
+ TALER_TESTING_interpreter_fail (gos->is);
+ return;
+ }
+ GNUNET_assert (GNUNET_OK ==
+ TALER_string_to_amount (expected_amount_str,
+ &expected_amount));
+ GNUNET_assert (0 <= TALER_amount_add (&refunded_total,
+ &refunded_total,
+ amount_found));
+ if ((GNUNET_OK !=
+ TALER_amount_cmp_currency (&expected_amount,
+ &refunded_total)) ||
+ (0 != TALER_amount_cmp (&expected_amount,
+ &refunded_total)))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Refund amounts do not match\n");
+ TALER_TESTING_interpreter_fail (gos->is);
+ return;
+ }
}
- if (0 != strcmp (expected_reason,
- osr->details.paid.refunds[i].reason))
{
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Refund reason does not match\n");
- TALER_TESTING_interpreter_fail (gos->is);
- return;
+ const char *expected_reason;
+
+ if (GNUNET_OK !=
+ TALER_TESTING_get_trait_string (refund_cmd,
+ 1,
+ &expected_reason))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Could not fetch reason\n");
+ TALER_TESTING_interpreter_fail (gos->is);
+ return;
+ }
+ if (0 != strcmp (expected_reason,
+ osr->details.paid.refunds[i].reason))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Refund reason does not match\n");
+ TALER_TESTING_interpreter_fail (gos->is);
+ return;
+ }
}
}
- }
- if (gos->wired != osr->details.paid.wired)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Order wired does not match\n");
- TALER_TESTING_interpreter_fail (gos->is);
- return;
+ if (gos->wired != osr->details.paid.wired)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Order wired does not match\n");
+ TALER_TESTING_interpreter_fail (gos->is);
+ return;
+ }
}
- }
- else
- {
- /* FIXME: Check all of the members of `pud` */
- struct TALER_MERCHANT_PayUriData pud;
- const struct TALER_TESTING_Command *order_cmd;
- const char *order_id;
- const struct TALER_ClaimTokenP *claim_token;
-
- if (GNUNET_OK !=
- TALER_MERCHANT_parse_pay_uri (osr->details.unpaid.taler_pay_uri,
- &pud))
+ break;
+ case TALER_MERCHANT_OSC_CLAIMED:
+ /* FIXME: Check contract terms... */
+ break;
+ case TALER_MERCHANT_OSC_UNPAID:
{
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Taler pay uri is malformed\n");
- TALER_TESTING_interpreter_fail (gos->is);
- return;
- }
+ /* FIXME: Check all of the members of `pud` */
+ struct TALER_MERCHANT_PayUriData pud;
+ const struct TALER_TESTING_Command *order_cmd;
+ const char *order_id;
+ const struct TALER_ClaimTokenP *claim_token;
- order_cmd = TALER_TESTING_interpreter_lookup_command (
- gos->is,
- gos->order_reference);
-
- if (GNUNET_OK !=
- TALER_TESTING_get_trait_order_id (order_cmd,
- 0,
- &order_id))
- TALER_TESTING_FAIL (gos->is);
-
- if (GNUNET_OK !=
- TALER_TESTING_get_trait_claim_token (order_cmd,
- 0,
- &claim_token))
- TALER_TESTING_FAIL (gos->is);
-
- if ((0 != strcmp ("localhost:8080",
- pud.merchant_host)) ||
- (NULL != pud.merchant_prefix_path) ||
- (0 != strcmp (order_id,
- pud.order_id)) ||
- (NULL != pud.ssid))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Order pay uri does not match\n");
- TALER_TESTING_interpreter_fail (gos->is);
- TALER_MERCHANT_parse_pay_uri_free (&pud);
- return;
- }
- /* The claim token is not given in the pay uri if the order
- has been claimed already. */
- if ((NULL != pud.claim_token) &&
- ((NULL == claim_token) ||
- (0 != GNUNET_memcmp (claim_token,
- pud.claim_token))))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Order pay uri does not match\n");
- TALER_TESTING_interpreter_fail (gos->is);
- TALER_MERCHANT_parse_pay_uri_free (&pud);
- return;
+ if (GNUNET_OK !=
+ TALER_MERCHANT_parse_pay_uri (osr->details.unpaid.taler_pay_uri,
+ &pud))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Taler pay uri is malformed\n");
+ TALER_TESTING_interpreter_fail (gos->is);
+ return;
+ }
+
+ order_cmd = TALER_TESTING_interpreter_lookup_command (
+ gos->is,
+ gos->order_reference);
+
+ if (GNUNET_OK !=
+ TALER_TESTING_get_trait_order_id (order_cmd,
+ 0,
+ &order_id))
+ TALER_TESTING_FAIL (gos->is);
+
+ if (GNUNET_OK !=
+ TALER_TESTING_get_trait_claim_token (order_cmd,
+ 0,
+ &claim_token))
+ TALER_TESTING_FAIL (gos->is);
+
+ if ((0 != strcmp ("localhost:8080",
+ pud.merchant_host)) ||
+ (NULL != pud.merchant_prefix_path) ||
+ (0 != strcmp (order_id,
+ pud.order_id)) ||
+ (NULL != pud.ssid))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Order pay uri does not match\n");
+ TALER_TESTING_interpreter_fail (gos->is);
+ TALER_MERCHANT_parse_pay_uri_free (&pud);
+ return;
+ }
+ /* The claim token is not given in the pay uri if the order
+ has been claimed already. */
+ if ((NULL != pud.claim_token) &&
+ ((NULL == claim_token) ||
+ (0 != GNUNET_memcmp (claim_token,
+ pud.claim_token))))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Order pay uri does not match\n");
+ TALER_TESTING_interpreter_fail (gos->is);
+ TALER_MERCHANT_parse_pay_uri_free (&pud);
+ return;
+ }
}
+ break;
}
- break;
default:
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
"Unhandled HTTP status.\n");
@@ -602,7 +611,7 @@ merchant_get_order_cleanup (void *cls,
* @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 paid whether the order has been paid for or not.
+ * @param osc expected order status code
* @param refunded whether the order has been refunded.
* @param http_status expected HTTP response code for the request.
* @param ... NULL-terminated list of labels (const char *) of
@@ -614,7 +623,7 @@ struct TALER_TESTING_Command
TALER_TESTING_cmd_merchant_get_order (const char *label,
const char *merchant_url,
const char *order_reference,
- bool paid,
+ enum TALER_MERCHANT_OrderStatusCode osc,
bool refunded,
unsigned int http_status,
...)
@@ -624,7 +633,7 @@ TALER_TESTING_cmd_merchant_get_order (const char *label,
gos = GNUNET_new (struct MerchantGetOrderState);
gos->merchant_url = merchant_url;
gos->order_reference = order_reference;
- gos->paid = paid;
+ gos->osc = osc;
gos->refunded = refunded;
gos->http_status = http_status;
if (refunded)
@@ -661,7 +670,7 @@ TALER_TESTING_cmd_merchant_get_order (const char *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 paid whether the order has been paid for or not.
+ * @param osc expected order status
* @param wired whether the order has been wired or not.
* @param transfers NULL-terminated list of labels (const char *) of
* wire transfers (commands) we expect to be aggregated in the order
@@ -681,7 +690,7 @@ struct TALER_TESTING_Command
TALER_TESTING_cmd_merchant_get_order2 (const char *label,
const char *merchant_url,
const char *order_reference,
- bool paid,
+ enum TALER_MERCHANT_OrderStatusCode osc,
bool wired,
const char **transfers,
bool refunded,
@@ -694,7 +703,7 @@ TALER_TESTING_cmd_merchant_get_order2 (const char *label,
gos = GNUNET_new (struct MerchantGetOrderState);
gos->merchant_url = merchant_url;
gos->order_reference = order_reference;
- gos->paid = paid;
+ gos->osc = osc;
gos->wired = wired;
gos->refunded = refunded;
gos->http_status = http_status;
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [taler-merchant] branch master updated: implement #6616 claim status in /private/orders/ID handler,
gnunet <=