commit 05b5f26049c254e875a5accbe6002b5ef94ee492
parent 9edbc1b05504cad2fcdd7980c218f0820e2fa16a
Author: Christian Grothoff <grothoff@gnunet.org>
Date: Sat, 9 Aug 2025 16:51:29 +0200
also force status update on UPDATE, as we only set the credit_amount with the UPDATE and usually not with the INSERT
Diffstat:
2 files changed, 41 insertions(+), 32 deletions(-)
diff --git a/src/backenddb/merchant-0022.sql b/src/backenddb/merchant-0022.sql
@@ -50,4 +50,31 @@ CREATE INDEX merchant_instances_validation_expiration_gc
(validation_expiration ASC)
WHERE validation_needed;
+
+-- Create triggers to set confirmed/expected status on UPDATE.
+CREATE FUNCTION merchant_expected_transfers_update_trigger()
+RETURNS trigger
+LANGUAGE plpgsql
+AS $$
+BEGIN
+ UPDATE merchant_transfers
+ SET expected = TRUE
+ WHERE wtid = NEW.wtid
+ AND exchange_url = NEW.exchange_url
+ AND credit_amount = NEW.expected_credit_amount
+ AND NOT expected;
+ NEW.confirmed = NEW.confirmed OR FOUND;
+ RETURN NEW;
+END $$;
+COMMENT ON FUNCTION merchant_expected_transfers_update_trigger
+ IS 'Sets "confirmed" to TRUE for the new record if the expected transfer was already confirmed, and updates the already confirmed transfer to "expected"';
+
+-- Whenever an expected transfer is added, check if it was already confirmed
+CREATE TRIGGER merchant_expected_transfers_on_update
+ BEFORE UPDATE
+ ON merchant.merchant_expected_transfers
+ FOR EACH ROW EXECUTE FUNCTION merchant_expected_transfers_update_trigger();
+
+
+
COMMIT;
diff --git a/src/testing/test_reconciliation.c b/src/testing/test_reconciliation.c
@@ -122,31 +122,6 @@ static const char *order_1_transfers[] = {
/**
- * Execute the taler-exchange-wirewatch command with
- * our configuration file.
- *
- * @param label label to use for the command.
- */
-static struct TALER_TESTING_Command
-cmd_exec_wirewatch (const char *label)
-{
- return TALER_TESTING_cmd_exec_wirewatch (label,
- config_file);
-}
-
-
-/**
- * Execute the taler-exchange-aggregator, closer and transfer commands with
- * our configuration file.
- *
- * @param label label to use for the command.
- */
-#define CMD_EXEC_AGGREGATOR(label) \
- TALER_TESTING_cmd_exec_aggregator (label "-aggregator", config_file), \
- TALER_TESTING_cmd_exec_transfer (label "-transfer", config_file)
-
-
-/**
* Run wire transfer of funds from some user's account to the
* exchange.
*
@@ -184,7 +159,8 @@ run (void *cls,
/**
* Make a reserve exist, according to the previous transfer.
*/
- cmd_exec_wirewatch ("wirewatch-1"),
+ TALER_TESTING_cmd_exec_wirewatch ("wirewatch-1",
+ config_file),
TALER_TESTING_cmd_check_bank_admin_transfer ("check_bank_transfer-2",
"EUR:5.01",
payer_payto,
@@ -207,9 +183,9 @@ run (void *cls,
merchant_url,
MHD_HTTP_OK,
"1",
- GNUNET_TIME_UNIT_ZERO_TS,
- GNUNET_TIME_UNIT_FOREVER_TS,
- true,
+ GNUNET_TIME_UNIT_ZERO_TS, /* refund deadline */
+ GNUNET_TIME_UNIT_FOREVER_TS, /* pay deadline */
+ true, /* use claim token */
"EUR:5.0",
"x-taler-bank",
"",
@@ -249,7 +225,10 @@ run (void *cls,
false,
MHD_HTTP_OK,
NULL),
- CMD_EXEC_AGGREGATOR ("run-aggregator"),
+ TALER_TESTING_cmd_exec_aggregator ("run-aggregator",
+ config_file),
+ TALER_TESTING_cmd_exec_transfer ("run-transfer",
+ config_file),
TALER_TESTING_cmd_check_bank_transfer ("check_bank_transfer-498c",
EXCHANGE_URL,
"EUR:4.98",
@@ -264,8 +243,9 @@ run (void *cls,
MHD_HTTP_NO_CONTENT,
"deposit-simple",
NULL),
- TALER_TESTING_cmd_depositcheck ("run taler-merchant-depositcheck-1",
+ TALER_TESTING_cmd_depositcheck ("run-depositcheck",
config_file),
+#if 0
TALER_TESTING_cmd_run_tme ("run taler-merchant-reconciliation-1",
config_file),
TALER_TESTING_cmd_merchant_get_order2 ("get-order-merchant-1-2b",
@@ -280,6 +260,7 @@ run (void *cls,
NULL,
MHD_HTTP_OK),
TALER_TESTING_cmd_check_bank_empty ("check_bank_empty-2"),
+#endif
TALER_TESTING_cmd_end ()
};
@@ -292,7 +273,7 @@ run (void *cls,
TALER_TESTING_cmd_system_start (
"start-taler",
config_file,
- "-ema",
+ "-em",
"-u", "exchange-account-exchange",
"-r", "merchant-exchange-test",
NULL),
@@ -316,6 +297,7 @@ run (void *cls,
merchant_url,
"admin",
MHD_HTTP_NO_CONTENT),
+ // FIXME: setup full account for taler-merchant-wirewatch
TALER_TESTING_cmd_merchant_post_account (
"instance-create-default-account",
merchant_url,