aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/operations
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2023-08-30 09:54:47 +0200
committerFlorian Dold <florian@dold.me>2023-08-30 09:54:47 +0200
commit557213f9c4fd834fadb189799073dc64cdb00a07 (patch)
tree1a018746addc7448a9de52f100c3d33ba52c6b22 /packages/taler-wallet-core/src/operations
parent1ad2f4cbe9d231f7f2324b37ae0e0cc97fbb1216 (diff)
downloadwallet-core-557213f9c4fd834fadb189799073dc64cdb00a07.tar.xz
wallet-core,harness: get p2p tests to pass again
Diffstat (limited to 'packages/taler-wallet-core/src/operations')
-rw-r--r--packages/taler-wallet-core/src/operations/testing.ts54
1 files changed, 54 insertions, 0 deletions
diff --git a/packages/taler-wallet-core/src/operations/testing.ts b/packages/taler-wallet-core/src/operations/testing.ts
index aff92622a..1962c965c 100644
--- a/packages/taler-wallet-core/src/operations/testing.ts
+++ b/packages/taler-wallet-core/src/operations/testing.ts
@@ -29,6 +29,7 @@ import {
TestPayResult,
TransactionMajorState,
TransactionMinorState,
+ TransactionType,
WithdrawTestBalanceRequest,
} from "@gnu-taler/taler-util";
import {
@@ -498,6 +499,59 @@ export async function waitUntilDone(ws: InternalWalletState): Promise<void> {
logger.info("done waiting until all transactions are in a final state");
}
+export async function waitUntilRefreshesDone(
+ ws: InternalWalletState,
+): Promise<void> {
+ logger.info("waiting until all refresh transactions are in a final state");
+ ws.ensureTaskLoopRunning();
+ let p: OpenedPromise<void> | undefined = undefined;
+ const cancelNotifs = ws.addNotificationListener((notif) => {
+ if (!p) {
+ return;
+ }
+ if (notif.type === NotificationType.TransactionStateTransition) {
+ switch (notif.newTxState.major) {
+ case TransactionMajorState.Pending:
+ case TransactionMajorState.Aborting:
+ break;
+ default:
+ p.resolve();
+ }
+ }
+ });
+ while (1) {
+ p = openPromise();
+ const txs = await getTransactions(ws, {
+ includeRefreshes: true,
+ filterByState: "nonfinal",
+ });
+ let finished = true;
+ for (const tx of txs.transactions) {
+ if (tx.type !== TransactionType.Refresh) {
+ continue;
+ }
+ switch (tx.txState.major) {
+ case TransactionMajorState.Pending:
+ case TransactionMajorState.Aborting:
+ case TransactionMajorState.Suspended:
+ case TransactionMajorState.SuspendedAborting:
+ finished = false;
+ logger.info(
+ `continuing waiting, ${tx.transactionId} in ${tx.txState.major}(${tx.txState.minor})`,
+ );
+ break;
+ }
+ }
+ if (finished) {
+ break;
+ }
+ // Wait until transaction state changed
+ await p.promise;
+ }
+ cancelNotifs();
+ logger.info("done waiting until all refreshes are in a final state");
+}
+
async function waitUntilPendingReady(
ws: InternalWalletState,
transactionId: string,