From 6a4da88719bc7a1506433c1117b2402d2bd48f36 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Tue, 14 Feb 2023 11:16:58 +0100 Subject: wallet-core: expose more info about refund query --- packages/taler-harness/src/harness/helpers.ts | 49 ++++++++++++++++++++++ .../src/integrationtests/test-refund.ts | 40 +++++++++++++----- 2 files changed, 78 insertions(+), 11 deletions(-) (limited to 'packages/taler-harness/src') diff --git a/packages/taler-harness/src/harness/helpers.ts b/packages/taler-harness/src/harness/helpers.ts index ad77ce6ca..c1ce463fa 100644 --- a/packages/taler-harness/src/harness/helpers.ts +++ b/packages/taler-harness/src/harness/helpers.ts @@ -29,6 +29,8 @@ import { MerchantContractTerms, Duration, PreparePayResultType, + NotificationType, + WithdrawalGroupFinishedNotification, } from "@gnu-taler/taler-util"; import { BankAccessApi, @@ -466,6 +468,53 @@ export async function startWithdrawViaBank( // Some tests rely on the final withdraw failing. } +export interface WithdrawViaBankResult { + withdrawalFinishedCond: Promise; +} + +export async function withdrawViaBankV2( + t: GlobalTestState, + p: { + walletClient: WalletClient; + bank: BankService; + exchange: ExchangeServiceInterface; + amount: AmountString; + restrictAge?: number; + }, +): Promise { + const { walletClient: wallet, bank, exchange, amount } = p; + + const user = await BankApi.createRandomBankUser(bank); + const wop = await BankAccessApi.createWithdrawalOperation(bank, user, amount); + + // Hand it to the wallet + + await wallet.client.call(WalletApiOperation.GetWithdrawalDetailsForUri, { + talerWithdrawUri: wop.taler_withdraw_uri, + restrictAge: p.restrictAge, + }); + + const withdrawalFinishedCond = wallet.waitForNotificationCond((x) => + x.type === NotificationType.WithdrawGroupFinished ? x : false, + ); + + // Withdraw (AKA select) + + await wallet.client.call(WalletApiOperation.AcceptBankIntegratedWithdrawal, { + exchangeBaseUrl: exchange.baseUrl, + talerWithdrawUri: wop.taler_withdraw_uri, + restrictAge: p.restrictAge, + }); + + // Confirm it + + await BankApi.confirmWithdrawalOperation(bank, user, wop); + + return { + withdrawalFinishedCond, + }; +} + /** * Withdraw balance. */ diff --git a/packages/taler-harness/src/integrationtests/test-refund.ts b/packages/taler-harness/src/integrationtests/test-refund.ts index 93850769a..4ae45b8bf 100644 --- a/packages/taler-harness/src/integrationtests/test-refund.ts +++ b/packages/taler-harness/src/integrationtests/test-refund.ts @@ -17,12 +17,16 @@ /** * Imports. */ -import { Duration, durationFromSpec } from "@gnu-taler/taler-util"; +import { + Duration, + durationFromSpec, + NotificationType, +} from "@gnu-taler/taler-util"; import { WalletApiOperation } from "@gnu-taler/taler-wallet-core"; import { GlobalTestState, MerchantPrivateApi } from "../harness/harness.js"; import { - createSimpleTestkudosEnvironment, - withdrawViaBank, + createSimpleTestkudosEnvironmentV2, + withdrawViaBankV2, } from "../harness/helpers.js"; /** @@ -31,12 +35,23 @@ import { export async function runRefundTest(t: GlobalTestState) { // Set up test environment - const { wallet, bank, exchange, merchant } = - await createSimpleTestkudosEnvironment(t); + const { + walletClient: wallet, + bank, + exchange, + merchant, + } = await createSimpleTestkudosEnvironmentV2(t); // Withdraw digital cash into the wallet. - await withdrawViaBank(t, { wallet, bank, exchange, amount: "TESTKUDOS:20" }); + const withdrawalRes = await withdrawViaBankV2(t, { + walletClient: wallet, + bank, + exchange, + amount: "TESTKUDOS:20", + }); + + await withdrawalRes.withdrawalFinishedCond; // Set up order. @@ -85,12 +100,15 @@ export async function runRefundTest(t: GlobalTestState) { console.log(ref); { + const refundFinishedCond = wallet.waitForNotificationCond( + (x) => x.type === NotificationType.RefundFinished, + ); const r = await wallet.client.call(WalletApiOperation.ApplyRefund, { talerRefundUri: ref.talerRefundUri, }); console.log(r); - await wallet.runUntilDone(); + await refundFinishedCond; } { @@ -103,6 +121,9 @@ export async function runRefundTest(t: GlobalTestState) { } { + const refundQueriedCond = wallet.waitForNotificationCond( + (x) => x.type === NotificationType.RefundQueried, + ); const r3 = await wallet.client.call( WalletApiOperation.ApplyRefundFromPurchaseId, { @@ -110,11 +131,8 @@ export async function runRefundTest(t: GlobalTestState) { }, ); console.log(r3); - - await wallet.runUntilDone(); + await refundQueriedCond; } - - await t.shutdown(); } runRefundTest.suites = ["wallet"]; -- cgit v1.2.3