commit 56882e4319661025c9db2c6aa8d8a86605f943ea
parent 3b49e260c1e71eb72e4a78cf3ab9d033b391e715
Author: Florian Dold <florian@dold.me>
Date: Thu, 25 Sep 2025 16:05:28 +0200
harness: multiple payments in donau test
Diffstat:
1 file changed, 77 insertions(+), 64 deletions(-)
diff --git a/packages/taler-harness/src/integrationtests/test-donau.ts b/packages/taler-harness/src/integrationtests/test-donau.ts
@@ -120,41 +120,20 @@ export async function runDonauTest(t: GlobalTestState) {
}),
);
- // Wait for donaukeysupdate
- // We don't use -t since it doesn't seem to work at the moment.
- await delayMs(2000);
-
- const orderResp = succeedOrThrow(
- await merchantClient.createOrder(merchantAdminAccessToken, {
- order: {
- version: OrderVersion.V1,
- summary: "Test Donation",
- choices: [
- {
- amount: "TESTKUDOS:9",
- outputs: [
- {
- type: OrderOutputType.TaxReceipt,
- amount: "TESTKUDOS:9",
- donau_urls: [donau.baseUrl],
- },
- ],
- },
- ],
+ // Do it twice to check idempotency
+ succeedOrThrow(
+ await merchantClient.postDonau({
+ body: {
+ charity_id: charityId,
+ donau_url: donau.baseUrl,
},
+ token: merchantAdminAccessToken,
}),
);
- console.log(`order resp: ${j2s(orderResp)}`);
-
- let orderStatus = succeedOrThrow(
- await merchantClient.getOrderDetails(
- merchantAdminAccessToken,
- orderResp.order_id,
- ),
- );
-
- t.assertTrue(orderStatus.order_status === "unpaid");
+ // Wait for donaukeysupdate
+ // We don't use -t since it doesn't seem to work at the moment.
+ await delayMs(2000);
{
// Just test the GetDonau request (initial)
@@ -174,50 +153,84 @@ export async function runDonauTest(t: GlobalTestState) {
t.assertDeepEqual(getRes.currentDonauInfo.donauBaseUrl, donau.baseUrl);
}
- const preparePayResult = await walletClient.call(
- WalletApiOperation.PreparePayForUri,
- {
- talerPayUri: orderStatus.taler_pay_uri,
- },
- );
+ for (let i = 0; i < 3; i++) {
+ const orderResp = succeedOrThrow(
+ await merchantClient.createOrder(merchantAdminAccessToken, {
+ order: {
+ version: OrderVersion.V1,
+ summary: "Test Donation",
+ choices: [
+ {
+ amount: "TESTKUDOS:9",
+ outputs: [
+ {
+ type: OrderOutputType.TaxReceipt,
+ amount: "TESTKUDOS:9",
+ donau_urls: [donau.baseUrl],
+ },
+ ],
+ },
+ ],
+ },
+ }),
+ );
+
+ console.log(`order resp: ${j2s(orderResp)}`);
+
+ let orderStatus = succeedOrThrow(
+ await merchantClient.getOrderDetails(
+ merchantAdminAccessToken,
+ orderResp.order_id,
+ ),
+ );
+
+ t.assertTrue(orderStatus.order_status === "unpaid");
+
+ const preparePayResult = await walletClient.call(
+ WalletApiOperation.PreparePayForUri,
+ {
+ talerPayUri: orderStatus.taler_pay_uri,
+ },
+ );
- console.log(`preparePayResult: ${j2s(preparePayResult)}`);
+ console.log(`preparePayResult: ${j2s(preparePayResult)}`);
- t.assertTrue(
- preparePayResult.status === PreparePayResultType.ChoiceSelection,
- );
+ t.assertTrue(
+ preparePayResult.status === PreparePayResultType.ChoiceSelection,
+ );
- t.assertDeepEqual(
- preparePayResult.contractTerms.version,
- MerchantContractVersion.V1,
- );
- const outTok = preparePayResult.contractTerms.choices[0].outputs[0];
- t.assertDeepEqual(outTok.type, MerchantContractOutputType.TaxReceipt);
+ t.assertDeepEqual(
+ preparePayResult.contractTerms.version,
+ MerchantContractVersion.V1,
+ );
+ const outTok = preparePayResult.contractTerms.choices[0].outputs[0];
+ t.assertDeepEqual(outTok.type, MerchantContractOutputType.TaxReceipt);
- t.assertDeepEqual(outTok.donau_urls, [donau.baseUrl]);
+ t.assertDeepEqual(outTok.donau_urls, [donau.baseUrl]);
- // t.assertTrue(!!outTok.amount);
+ // t.assertTrue(!!outTok.amount);
- // t.assertAmountEquals(outTok.amount, "TESTKUDOS:5");
+ // t.assertAmountEquals(outTok.amount, "TESTKUDOS:5");
- const r2 = await walletClient.call(WalletApiOperation.ConfirmPay, {
- transactionId: preparePayResult.transactionId,
- choiceIndex: 0,
- useDonau: true,
- });
+ const r2 = await walletClient.call(WalletApiOperation.ConfirmPay, {
+ transactionId: preparePayResult.transactionId,
+ choiceIndex: 0,
+ useDonau: true,
+ });
- t.assertDeepEqual(r2.type, ConfirmPayResultType.Done);
+ t.assertDeepEqual(r2.type, ConfirmPayResultType.Done);
- // Check if payment was successful.
+ // Check if payment was successful.
- orderStatus = succeedOrThrow(
- await merchantClient.getOrderDetails(
- merchantAdminAccessToken,
- orderResp.order_id,
- ),
- );
+ orderStatus = succeedOrThrow(
+ await merchantClient.getOrderDetails(
+ merchantAdminAccessToken,
+ orderResp.order_id,
+ ),
+ );
- t.assertDeepEqual(orderStatus.order_status, "paid");
+ t.assertDeepEqual(orderStatus.order_status, "paid");
+ }
const statements = await walletClient.call(
WalletApiOperation.GetDonauStatements,