taler-typescript-core

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

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:
Mpackages/taler-harness/src/integrationtests/test-donau.ts | 141+++++++++++++++++++++++++++++++++++++++++++------------------------------------
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,