commit 3641e4cf0cfdd1569e4a85582676699f92aabfe3
parent 143a4fe4ac5b8724cf6e13a704e88daa99dd4202
Author: Florian Dold <florian@dold.me>
Date: Wed, 11 Jan 2023 17:16:15 +0100
-check in integration test
Diffstat:
1 file changed, 27 insertions(+), 18 deletions(-)
diff --git a/packages/taler-wallet-core/src/operations/pay-merchant.ts b/packages/taler-wallet-core/src/operations/pay-merchant.ts
@@ -2811,34 +2811,43 @@ export async function abortPay(
if (!purchase) {
throw Error("purchase not found");
}
+ const oldStatus = purchase.purchaseStatus;
if (purchase.timestampFirstSuccessfulPay) {
// No point in aborting it. We don't even report an error.
logger.warn(`tried to abort successful payment`);
return;
}
- if (purchase.purchaseStatus === PurchaseStatus.Paying) {
+ if (oldStatus === PurchaseStatus.Paying) {
purchase.purchaseStatus = PurchaseStatus.AbortingWithRefund;
}
+ if (
+ cancelImmediately &&
+ oldStatus === PurchaseStatus.AbortingWithRefund
+ ) {
+ purchase.purchaseStatus = PurchaseStatus.PaymentAbortFinished;
+ }
await tx.purchases.put(purchase);
- await tx.operationRetries.delete(opId);
- if (purchase.payInfo) {
- const coinSel = purchase.payInfo.payCoinSelection;
- const currency = Amounts.currencyOf(purchase.payInfo.totalPayCost);
- const refreshCoins: CoinRefreshRequest[] = [];
- for (let i = 0; i < coinSel.coinPubs.length; i++) {
- refreshCoins.push({
- amount: coinSel.coinContributions[i],
- coinPub: coinSel.coinPubs[i],
- });
+ if (oldStatus === PurchaseStatus.Paying) {
+ if (purchase.payInfo) {
+ const coinSel = purchase.payInfo.payCoinSelection;
+ const currency = Amounts.currencyOf(purchase.payInfo.totalPayCost);
+ const refreshCoins: CoinRefreshRequest[] = [];
+ for (let i = 0; i < coinSel.coinPubs.length; i++) {
+ refreshCoins.push({
+ amount: coinSel.coinContributions[i],
+ coinPub: coinSel.coinPubs[i],
+ });
+ }
+ await createRefreshGroup(
+ ws,
+ tx,
+ currency,
+ refreshCoins,
+ RefreshReason.AbortPay,
+ );
}
- await createRefreshGroup(
- ws,
- tx,
- currency,
- refreshCoins,
- RefreshReason.AbortPay,
- );
}
+ await tx.operationRetries.delete(opId);
});
runOperationWithErrorReporting(ws, opId, async () => {