aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/operations/testing.ts
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2023-10-16 13:19:10 +0200
committerFlorian Dold <florian@dold.me>2023-10-16 13:19:10 +0200
commit925a97c2e3a52222cb28b2b64d80c0b01305defe (patch)
treeb0d6ec9e63f4020be59ca2c286166efecfa08ac1 /packages/taler-wallet-core/src/operations/testing.ts
parent9504687813d3ee47131f5b7f66c1426f9ccffd41 (diff)
downloadwallet-core-925a97c2e3a52222cb28b2b64d80c0b01305defe.tar.xz
-fix tests
Diffstat (limited to 'packages/taler-wallet-core/src/operations/testing.ts')
-rw-r--r--packages/taler-wallet-core/src/operations/testing.ts74
1 files changed, 59 insertions, 15 deletions
diff --git a/packages/taler-wallet-core/src/operations/testing.ts b/packages/taler-wallet-core/src/operations/testing.ts
index 607d03470..f5bed13dd 100644
--- a/packages/taler-wallet-core/src/operations/testing.ts
+++ b/packages/taler-wallet-core/src/operations/testing.ts
@@ -74,6 +74,7 @@ import {
import { initiatePeerPushDebit } from "./pay-peer-push-debit.js";
import { OpenedPromise, openPromise } from "../index.js";
import { getTransactionById, getTransactions } from "./transactions.js";
+import { getPendingOperations } from "./pending.js";
const logger = new Logger("operations/testing.ts");
@@ -290,7 +291,7 @@ export async function runIntegrationTest(
corebankApiBaseUrl: args.corebankApiBaseUrl,
exchangeBaseUrl: args.exchangeBaseUrl,
});
- await waitUntilDone(ws);
+ await waitUntilTransactionsFinal(ws);
logger.info("done withdrawing test balance");
const balance = await getBalances(ws);
@@ -305,7 +306,7 @@ export async function runIntegrationTest(
await makePayment(ws, myMerchant, args.amountToSpend, "hello world");
// Wait until the refresh is done
- await waitUntilDone(ws);
+ await waitUntilTransactionsFinal(ws);
logger.trace("withdrawing test balance for refund");
const withdrawAmountTwo = Amounts.parseOrThrow(`${currency}:18`);
@@ -320,7 +321,7 @@ export async function runIntegrationTest(
});
// Wait until the withdraw is done
- await waitUntilDone(ws);
+ await waitUntilTransactionsFinal(ws);
const { orderId: refundOrderId } = await makePayment(
ws,
@@ -344,7 +345,7 @@ export async function runIntegrationTest(
logger.trace("integration test: applied refund");
// Wait until the refund is done
- await waitUntilDone(ws);
+ await waitUntilTransactionsFinal(ws);
logger.trace("integration test: making payment after refund");
@@ -357,12 +358,17 @@ export async function runIntegrationTest(
logger.trace("integration test: make payment done");
- await waitUntilDone(ws);
+ await waitUntilTransactionsFinal(ws);
logger.trace("integration test: all done!");
}
-export async function waitUntilDone(ws: InternalWalletState): Promise<void> {
+/**
+ * Wait until all transactions are in a final state.
+ */
+export async function waitUntilTransactionsFinal(
+ ws: InternalWalletState,
+): Promise<void> {
logger.info("waiting until all transactions are in a final state");
ws.ensureTaskLoopRunning();
let p: OpenedPromise<void> | undefined = undefined;
@@ -410,6 +416,44 @@ export async function waitUntilDone(ws: InternalWalletState): Promise<void> {
logger.info("done waiting until all transactions are in a final state");
}
+/**
+ * Wait until pending work is processed.
+ */
+export async function waitUntilTasksProcessed(
+ ws: InternalWalletState,
+): Promise<void> {
+ logger.info("waiting until pending work is processed");
+ ws.ensureTaskLoopRunning();
+ let p: OpenedPromise<void> | undefined = undefined;
+ const cancelNotifs = ws.addNotificationListener((notif) => {
+ if (!p) {
+ return;
+ }
+ if (notif.type === NotificationType.PendingOperationProcessed) {
+ p.resolve();
+ }
+ });
+ while (1) {
+ p = openPromise();
+ const pendingTasksResp = await getPendingOperations(ws);
+ logger.info(`waiting on pending ops: ${j2s(pendingTasksResp)}`);
+ let finished = true;
+ for (const task of pendingTasksResp.pendingOperations) {
+ if (task.isDue) {
+ finished = false;
+ }
+ logger.info(`continuing waiting for task ${task.id}`);
+ }
+ if (finished) {
+ break;
+ }
+ // Wait until task is done
+ await p.promise;
+ }
+ logger.info("done waiting until pending work is processed");
+ cancelNotifs();
+}
+
export async function waitUntilRefreshesDone(
ws: InternalWalletState,
): Promise<void> {
@@ -463,7 +507,7 @@ export async function waitUntilRefreshesDone(
logger.info("done waiting until all refreshes are in a final state");
}
-async function waitUntilPendingReady(
+async function waitUntilTransactionPendingReady(
ws: InternalWalletState,
transactionId: string,
): Promise<void> {
@@ -560,7 +604,7 @@ export async function runIntegrationTest2(
corebankApiBaseUrl: args.corebankApiBaseUrl,
exchangeBaseUrl: args.exchangeBaseUrl,
});
- await waitUntilDone(ws);
+ await waitUntilTransactionsFinal(ws);
logger.info("done withdrawing test balance");
const balance = await getBalances(ws);
@@ -580,7 +624,7 @@ export async function runIntegrationTest2(
);
// Wait until the refresh is done
- await waitUntilDone(ws);
+ await waitUntilTransactionsFinal(ws);
logger.trace("withdrawing test balance for refund");
const withdrawAmountTwo = Amounts.parseOrThrow(`${currency}:18`);
@@ -595,7 +639,7 @@ export async function runIntegrationTest2(
});
// Wait until the withdraw is done
- await waitUntilDone(ws);
+ await waitUntilTransactionsFinal(ws);
const { orderId: refundOrderId } = await makePayment(
ws,
@@ -619,7 +663,7 @@ export async function runIntegrationTest2(
logger.trace("integration test: applied refund");
// Wait until the refund is done
- await waitUntilDone(ws);
+ await waitUntilTransactionsFinal(ws);
logger.trace("integration test: making payment after refund");
@@ -632,7 +676,7 @@ export async function runIntegrationTest2(
logger.trace("integration test: make payment done");
- await waitUntilDone(ws);
+ await waitUntilTransactionsFinal(ws);
const peerPushInit = await initiatePeerPushDebit(ws, {
partialContractTerms: {
@@ -647,7 +691,7 @@ export async function runIntegrationTest2(
},
});
- await waitUntilPendingReady(ws, peerPushInit.transactionId);
+ await waitUntilTransactionPendingReady(ws, peerPushInit.transactionId);
const peerPushCredit = await preparePeerPushCredit(ws, {
talerUri: peerPushInit.talerUri,
@@ -670,7 +714,7 @@ export async function runIntegrationTest2(
},
});
- await waitUntilPendingReady(ws, peerPullInit.transactionId);
+ await waitUntilTransactionPendingReady(ws, peerPullInit.transactionId);
const peerPullInc = await preparePeerPullDebit(ws, {
talerUri: peerPullInit.talerUri,
@@ -680,7 +724,7 @@ export async function runIntegrationTest2(
peerPullDebitId: peerPullInc.peerPullDebitId,
});
- await waitUntilDone(ws);
+ await waitUntilTransactionsFinal(ws);
logger.trace("integration test: all done!");
}