taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit b59e472465440d95525e7e3d1225234525948b67
parent 61dbe85eec8856e2b0cc50873e0f0bb1fc59754b
Author: Florian Dold <florian@dold.me>
Date:   Mon, 17 Jun 2024 11:34:32 +0200

wallet-core: fix auto-refund state machine

Properly use the new finalizing state

Diffstat:
Mpackages/taler-harness/src/integrationtests/test-refund-auto.ts | 6+++++-
Mpackages/taler-wallet-core/src/pay-merchant.ts | 5+++--
Mpackages/taler-wallet-core/src/testing.ts | 4++++
3 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/packages/taler-harness/src/integrationtests/test-refund-auto.ts b/packages/taler-harness/src/integrationtests/test-refund-auto.ts @@ -54,6 +54,8 @@ export async function runRefundAutoTest(t: GlobalTestState) { // Test case where the auto-refund happens { + t.logStep("start-test-autorefund"); + // Set up order. const orderResp = await merchantClient.createOrder({ order: { @@ -122,6 +124,8 @@ export async function runRefundAutoTest(t: GlobalTestState) { // Now test the case where the auto-refund just expires + t.logStep("start-test-expiry"); + { // Set up order. const orderResp = await merchantClient.createOrder({ @@ -165,7 +169,7 @@ export async function runRefundAutoTest(t: GlobalTestState) { await walletClient.call(WalletApiOperation.TestingWaitTransactionState, { transactionId: r1.transactionId, txState: { - major: TransactionMajorState.Pending, + major: TransactionMajorState.Finalizing, minor: TransactionMinorState.AutoRefund, }, }); diff --git a/packages/taler-wallet-core/src/pay-merchant.ts b/packages/taler-wallet-core/src/pay-merchant.ts @@ -1060,7 +1060,7 @@ async function storeFirstPaySuccess( if (protoAr) { const ar = Duration.fromTalerProtocolDuration(protoAr); logger.info("auto_refund present"); - purchase.purchaseStatus = PurchaseStatus.PendingQueryingAutoRefund; + purchase.purchaseStatus = PurchaseStatus.FinalizingQueryingAutoRefund; purchase.autoRefundDeadline = timestampProtocolToDb( AbsoluteTime.toProtocolTimestamp( AbsoluteTime.addDuration(AbsoluteTime.now(), ar), @@ -1460,6 +1460,7 @@ async function checkPaymentByProposalId( const paid = purchase.purchaseStatus === PurchaseStatus.Done || purchase.purchaseStatus === PurchaseStatus.PendingQueryingRefund || + purchase.purchaseStatus === PurchaseStatus.FinalizingQueryingAutoRefund || purchase.purchaseStatus === PurchaseStatus.PendingQueryingAutoRefund; const download = await expectProposalDownload(wex, purchase); return { @@ -2113,8 +2114,8 @@ export async function processPurchase( case PurchaseStatus.PendingPayingReplay: return processPurchasePay(wex, proposalId); case PurchaseStatus.PendingQueryingRefund: - case PurchaseStatus.FinalizingQueryingAutoRefund: return processPurchaseQueryRefund(wex, purchase); + case PurchaseStatus.FinalizingQueryingAutoRefund: case PurchaseStatus.PendingQueryingAutoRefund: return processPurchaseAutoRefund(wex, purchase); case PurchaseStatus.AbortingWithRefund: diff --git a/packages/taler-wallet-core/src/testing.ts b/packages/taler-wallet-core/src/testing.ts @@ -410,6 +410,7 @@ export async function waitUntilAllTransactionsFinal( switch (notif.newTxState.major) { case TransactionMajorState.Pending: case TransactionMajorState.Aborting: + case TransactionMajorState.Finalizing: return false; default: return true; @@ -424,6 +425,7 @@ export async function waitUntilAllTransactionsFinal( switch (tx.txState.major) { case TransactionMajorState.Pending: case TransactionMajorState.Aborting: + case TransactionMajorState.Finalizing: case TransactionMajorState.Suspended: case TransactionMajorState.SuspendedAborting: logger.info( @@ -497,6 +499,7 @@ export async function waitUntilGivenTransactionsFinal( } switch (tx.txState.major) { case TransactionMajorState.Pending: + case TransactionMajorState.Finalizing: case TransactionMajorState.Aborting: case TransactionMajorState.Suspended: case TransactionMajorState.SuspendedAborting: @@ -542,6 +545,7 @@ export async function waitUntilRefreshesDone( } switch (tx.txState.major) { case TransactionMajorState.Pending: + case TransactionMajorState.Finalizing: case TransactionMajorState.Aborting: case TransactionMajorState.Suspended: case TransactionMajorState.SuspendedAborting: