summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcello Stanisci <stanisci.m@gmail.com>2018-03-23 16:16:55 +0100
committerMarcello Stanisci <stanisci.m@gmail.com>2018-03-23 16:16:55 +0100
commit6d4afede86554e04fe87446a68df541234c870f3 (patch)
tree1334cc93eaa98652f46cdc1334757e9d70171e1d
parentdfd4806100b0f3dc4f5947b3a85872b08d64981b (diff)
downloadmerchant-6d4afede86554e04fe87446a68df541234c870f3.tar.gz
merchant-6d4afede86554e04fe87446a68df541234c870f3.tar.bz2
merchant-6d4afede86554e04fe87446a68df541234c870f3.zip
spending tip passes.
-rw-r--r--src/backend/taler-merchant-httpd_pay.c11
-rw-r--r--src/lib/test_merchant_api_new.c35
-rw-r--r--src/lib/testing_api_cmd_tip.c55
3 files changed, 91 insertions, 10 deletions
diff --git a/src/backend/taler-merchant-httpd_pay.c b/src/backend/taler-merchant-httpd_pay.c
index 3ac4f395..e2b2b069 100644
--- a/src/backend/taler-merchant-httpd_pay.c
+++ b/src/backend/taler-merchant-httpd_pay.c
@@ -717,7 +717,9 @@ check_payment_sufficient (struct PayContext *pc)
TALER_amount_subtract (&acc_amount,
&acc_amount,
&pc->total_refunded));
-
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Subtracting total refunds from paid amount: %s\n",
+ TALER_amount_to_string (&pc->total_refunded));
/* Now check that the customer paid enough for the full contract */
if (-1 == TALER_amount_cmp (&pc->max_fee,
&acc_fee))
@@ -775,6 +777,9 @@ check_payment_sufficient (struct PayContext *pc)
&wire_fee_customer_contribution,
&deposit_fee_savings));
/* subtract remaining wire fees from total contribution */
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Subtract remaining wire fees from total contribution: %s",
+ TALER_amount_to_string (&wire_fee_customer_contribution));
if (GNUNET_SYSERR ==
TALER_amount_subtract (&acc_amount,
&acc_amount,
@@ -790,6 +795,10 @@ check_payment_sufficient (struct PayContext *pc)
&pc->amount))
{
GNUNET_break_op (0);
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ "price vs. sent: %s vs. %s\n",
+ TALER_amount_to_string (&pc->amount),
+ TALER_amount_to_string (&acc_amount));
return TALER_EC_PAY_PAYMENT_INSUFFICIENT;
}
}
diff --git a/src/lib/test_merchant_api_new.c b/src/lib/test_merchant_api_new.c
index 2b6ad910..e83e100d 100644
--- a/src/lib/test_merchant_api_new.c
+++ b/src/lib/test_merchant_api_new.c
@@ -592,6 +592,40 @@ run (void *cls,
is->exchange,
TALER_EC_TIP_PICKUP_NO_FUNDS),
+ // TALER_TESTING_cmd_end (),
+
+ TALER_TESTING_cmd_proposal
+ ("create-proposal-tip-1",
+ merchant_url,
+ is->ctx,
+ MHD_HTTP_OK,
+ "{\"max_fee\":\
+ {\"currency\":\"EUR\",\
+ \"value\":0,\
+ \"fraction\":50000000},\
+ \"order_id\":\"1-tip\",\
+ \"refund_deadline\":\"\\/Date(0)\\/\",\
+ \"pay_deadline\":\"\\/Date(99999999999)\\/\",\
+ \"amount\":\
+ {\"currency\":\"EUR\",\
+ \"value\":5,\
+ \"fraction\":0},\
+ \"summary\": \"useful product\",\
+ \"fulfillment_url\": \"https://example.com/\",\
+ \"products\": [ {\"description\":\"ice cream\",\
+ \"value\":\"{EUR:5}\"} ] }",
+ NULL),
+
+ TALER_TESTING_cmd_pay ("deposit-tip-simple",
+ merchant_url,
+ is->ctx,
+ MHD_HTTP_OK,
+ "create-proposal-tip-1",
+ "pickup-tip-1",
+ "EUR:5", // amount + fee
+ "EUR:4.99", // amount - fee
+ "EUR:0.01"), // refund fee
+
/* Will fail here until all new
* transfers have not been checked. I.e.,
* there is now a 20.04 euro "pending" transfer. */
@@ -607,7 +641,6 @@ run (void *cls,
USER_LOGIN_PASS,
EXCHANGE_URL),
-
CMD_EXEC_WIREWATCH ("wirewatch-10"),
TALER_TESTING_cmd_check_bank_transfer
diff --git a/src/lib/testing_api_cmd_tip.c b/src/lib/testing_api_cmd_tip.c
index c784dbcc..b04db4e2 100644
--- a/src/lib/testing_api_cmd_tip.c
+++ b/src/lib/testing_api_cmd_tip.c
@@ -29,11 +29,23 @@
#include "taler_merchant_service.h"
#include "taler_merchant_testing_lib.h"
+/**
+ * Obtain the URL to use for an API request.
+ *
+ * @param h the exchange handle to query
+ * @param path Taler API path (i.e. "/reserve/withdraw")
+ * @return the full URL to use with cURL
+ */
+char *
+MAH_path_to_url (struct TALER_EXCHANGE_Handle *h,
+ const char *path);
struct TipPickupState
{
const char *merchant_url;
+ const char *exchange_url;
+
struct GNUNET_CURL_Context *ctx;
unsigned int http_status;
@@ -52,6 +64,8 @@ struct TipPickupState
const char **amounts;
+ struct TALER_Amount *amounts_obj;
+
unsigned int num_coins;
const struct TALER_EXCHANGE_DenomPublicKey **dks;
@@ -707,10 +721,10 @@ tip_pickup_run (void *cls,
unsigned int num_planchets;
const struct TALER_TESTING_Command *replay_cmd;
const struct TALER_TESTING_Command *authorize_cmd;
- struct TALER_Amount amount;
const struct GNUNET_HashCode *tip_id;
tps->is = is;
+ tps->exchange_url = MAH_path_to_url (tps->exchange, "/");
if (NULL == tps->replay_reference)
{
replay_cmd = NULL;
@@ -749,15 +763,20 @@ tip_pickup_run (void *cls,
(num_planchets,
const struct TALER_EXCHANGE_DenomPublicKey *);
+ tps->amounts_obj = GNUNET_new_array
+ (num_planchets, struct TALER_Amount);
+
for (unsigned int i=0;i<num_planchets;i++)
{
if (NULL == replay_cmd)
{
GNUNET_assert (GNUNET_OK == TALER_string_to_amount
- (tps->amounts[i], &amount));
+ (tps->amounts[i], &tps->amounts_obj[i]));
+
+ tps->dks[i] = TALER_TESTING_find_pk
+ (is->keys,
+ &tps->amounts_obj[i]);
- tps->dks[i] = TALER_TESTING_find_pk (is->keys,
- &amount);
if (NULL == tps->dks[i])
TALER_TESTING_FAIL (is);
@@ -804,7 +823,7 @@ tip_pickup_cleanup (void *cls,
const struct TALER_TESTING_Command *cmd)
{
struct TipPickupState *tps = cls;
-
+ #warning free elements *in* the state!
if (NULL != tps->tpo)
{
TALER_LOG_WARNING ("Tip-pickup operation"
@@ -835,12 +854,32 @@ tip_pickup_traits (void *cls,
unsigned int index)
{
struct TipPickupState *tps = cls;
- struct TALER_TESTING_Trait traits[tps->num_coins + 1];
+ #define NUM_TRAITS (tps->num_coins * 5) + 2
+ struct TALER_TESTING_Trait traits[NUM_TRAITS];
for (unsigned int i=0; i<tps->num_coins; i++)
+ {
traits[i] = TALER_TESTING_make_trait_planchet_secrets
- (0, &tps->psa[i]);
- traits[tps->num_coins + 1] = TALER_TESTING_trait_end ();
+ (i, &tps->psa[i]);
+
+ traits[i + tps->num_coins] =
+ TALER_TESTING_make_trait_coin_priv
+ (i, &tps->psa[i].coin_priv);
+
+ traits[i + (tps->num_coins * 2)] =
+ TALER_TESTING_make_trait_denom_pub (i, tps->dks[i]);
+
+ traits[i + (tps->num_coins *3)] =
+ TALER_TESTING_make_trait_denom_sig (i, &tps->sigs[i]);
+
+ traits[i + (tps->num_coins *4)] =
+ TALER_TESTING_make_trait_amount_obj
+ (i, &tps->amounts_obj[i]);
+
+ }
+ traits[NUM_TRAITS - 2] = TALER_TESTING_make_trait_url
+ (0, tps->exchange_url);
+ traits[NUM_TRAITS - 1] = TALER_TESTING_trait_end ();
return TALER_TESTING_get_trait (traits,
ret,