diff options
-rw-r--r-- | src/backenddb/pg_insert_account.c | 10 | ||||
-rwxr-xr-x | src/testing/test_merchant_accounts.sh | 132 |
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 |