aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backenddb/pg_insert_account.c10
-rwxr-xr-xsrc/testing/test_merchant_accounts.sh132
2 files changed, 140 insertions, 2 deletions
diff --git a/src/backenddb/pg_insert_account.c b/src/backenddb/pg_insert_account.c
index 3b57b0ba..04b0637c 100644
--- a/src/backenddb/pg_insert_account.c
+++ b/src/backenddb/pg_insert_account.c
@@ -51,7 +51,7 @@ TMH_PG_insert_account (
check_connection (pg);
PREPARE (pg,
"insert_account",
- "INSERT INTO merchant_accounts"
+ "INSERT INTO merchant_accounts AS ma"
"(merchant_serial"
",h_wire"
",salt"
@@ -61,7 +61,13 @@ TMH_PG_insert_account (
",active)"
" SELECT merchant_serial, $2, $3, $4, $5, $6, $7"
" FROM merchant_instances"
- " WHERE merchant_id=$1");
+ " WHERE merchant_id=$1"
+ " ON CONFLICT(merchant_serial,payto_uri)"
+ " DO UPDATE SET"
+ " active = true"
+ ",credit_facade_url = EXCLUDED.credit_facade_url"
+ ",credit_facade_credentials = EXCLUDED.credit_facade_credentials"
+ " WHERE NOT ma.active");
return GNUNET_PQ_eval_prepared_non_select (pg->conn,
"insert_account",
params);
diff --git a/src/testing/test_merchant_accounts.sh b/src/testing/test_merchant_accounts.sh
new file mode 100755
index 00000000..df9a80ad
--- /dev/null
+++ b/src/testing/test_merchant_accounts.sh
@@ -0,0 +1,132 @@
+#!/bin/bash
+# This file is part of TALER
+# Copyright (C) 2014-2023 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/>
+#
+
+# Cleanup to run whenever we exit
+function my_cleanup()
+{
+ for n in $(jobs -p)
+ do
+ kill "$n" 2> /dev/null || true
+ done
+ wait
+ if [ -n "${LAST_RESPONSE+x}" ]
+ then
+ rm -f "${LAST_RESPONSE}"
+ fi
+}
+
+. setup.sh
+
+setup -c test_template.conf -m
+CONF="test_template.conf.edited"
+LAST_RESPONSE=$(mktemp -p "${TMPDIR:-/tmp}" test_response.conf-XXXXXX)
+
+echo -n "Configuring 'default' instance ..." >&2
+
+STATUS=$(curl -H "Content-Type: application/json" -X POST \
+ http://localhost:9966/management/instances \
+ -d '{"auth":{"method":"token","token":"secret-token:new_value"},"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"use_stefan":true,"default_wire_transfer_delay":{"d_us" : 3600000000},"default_pay_delay":{"d_us": 3600000000}}' \
+ -w "%{http_code}" -s -o /dev/null)
+
+if [ "$STATUS" != "204" ]
+then
+ exit_fail "Expected 204, instance created. got: $STATUS" >&2
+fi
+
+echo "OK" >&2
+
+echo -n "creating first account ..." >&2
+
+STATUS=$(curl -H "Content-Type: application/json" -X POST \
+ -H 'Authorization: Bearer secret-token:new_value' \
+ http://localhost:9966/private/accounts \
+ -d '{"payto_uri":"payto://x-taler-bank/localhost:8082/43?receiver-name=user43"}' \
+ -w "%{http_code}" -s -o "$LAST_RESPONSE")
+
+
+if [ "$STATUS" != "200" ]
+then
+ exit_fail "Expected 200 OK. Got: $STATUS"
+fi
+
+echo "OK" >&2
+
+
+ACCOUNT_ID=$(jq -r .h_wire $LAST_RESPONSE)
+
+STATUS=$(curl -H "Content-Type: application/json" -X GET \
+ -H 'Authorization: Bearer secret-token:new_value' \
+ http://localhost:9966/private/accounts/$ACCOUNT_ID \
+ -w "%{http_code}" -s -o "$LAST_RESPONSE")
+
+if [ "$STATUS" != "200" ]
+then
+ exit_fail "Expected 200 OK. Got: $STATUS"
+fi
+
+ACTIVE=$(jq -r .active $LAST_RESPONSE)
+
+if [ "$ACTIVE" != "true" ]
+then
+ exit_fail "Expected account active."
+fi
+
+echo -n "deleting account ..." >&2
+
+STATUS=$(curl -H "Content-Type: application/json" -X DELETE \
+ -H 'Authorization: Bearer secret-token:new_value' \
+ http://localhost:9966/private/accounts/$ACCOUNT_ID \
+ -w "%{http_code}" -s )
+
+if [ "$STATUS" != "204" ]
+then
+ exit_fail "Expected 204 OK. Got: $STATUS"
+fi
+
+echo "OK" >&2
+
+echo -n "creating same account again to make it active ..." >&2
+
+
+STATUS=$(curl -H "Content-Type: application/json" -X POST \
+ -H 'Authorization: Bearer secret-token:new_value' \
+ http://localhost:9966/private/accounts \
+ -d '{"payto_uri":"payto://x-taler-bank/localhost:8082/43?receiver-name=user43"}' \
+ -w "%{http_code}" -s -o "$LAST_RESPONSE")
+
+
+if [ "$STATUS" != "200" ]
+then
+ exit_fail "Expected 200 OK. Got: $STATUS"
+fi
+
+STATUS=$(curl -H "Content-Type: application/json" -X GET \
+ -H 'Authorization: Bearer secret-token:new_value' \
+ http://localhost:9966/private/accounts/$ACCOUNT_ID \
+ -w "%{http_code}" -s -o "$LAST_RESPONSE")
+
+ACTIVE=$(jq -r .active $LAST_RESPONSE)
+
+if [ "$ACTIVE" != "true" ]
+then
+ exit_fail "Expected account active."
+fi
+
+
+echo " OK" >&2