diff options
author | Florian Dold <florian@dold.me> | 2023-02-13 13:15:47 +0100 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2023-02-13 13:15:47 +0100 |
commit | 22cb8adaa6d9584ad7638b9019b6d0c3eb7158bf (patch) | |
tree | 53544a96cca4bafd9b284f53a960585e20d74d0c /packages/taler-harness/src/integrationtests | |
parent | 79b77a0c3c5a9a07d22c276a63ed81eb30507eba (diff) | |
download | wallet-core-22cb8adaa6d9584ad7638b9019b6d0c3eb7158bf.tar.xz |
wallet-core,harness: introduce reserveIsReady flag, test tx lifeycle
Diffstat (limited to 'packages/taler-harness/src/integrationtests')
-rw-r--r-- | packages/taler-harness/src/integrationtests/test-kyc.ts | 2 | ||||
-rw-r--r-- | packages/taler-harness/src/integrationtests/test-withdrawal-bank-integrated.ts | 96 |
2 files changed, 85 insertions, 13 deletions
diff --git a/packages/taler-harness/src/integrationtests/test-kyc.ts b/packages/taler-harness/src/integrationtests/test-kyc.ts index b08db66f7..490673cee 100644 --- a/packages/taler-harness/src/integrationtests/test-kyc.ts +++ b/packages/taler-harness/src/integrationtests/test-kyc.ts @@ -307,7 +307,7 @@ export async function runKycTest(t: GlobalTestState) { // Withdraw const kycNotificationCond = walletClient.waitForNotificationCond((x) => { - if (x.type === NotificationType.WithdrawalKycRequested) { + if (x.type === NotificationType.WithdrawalGroupKycRequested) { return x; } return false; diff --git a/packages/taler-harness/src/integrationtests/test-withdrawal-bank-integrated.ts b/packages/taler-harness/src/integrationtests/test-withdrawal-bank-integrated.ts index dc7298e5d..c98c18db5 100644 --- a/packages/taler-harness/src/integrationtests/test-withdrawal-bank-integrated.ts +++ b/packages/taler-harness/src/integrationtests/test-withdrawal-bank-integrated.ts @@ -18,13 +18,13 @@ * Imports. */ import { GlobalTestState } from "../harness/harness.js"; -import { createSimpleTestkudosEnvironment } from "../harness/helpers.js"; +import { createSimpleTestkudosEnvironmentV2 } from "../harness/helpers.js"; import { WalletApiOperation, BankApi, BankAccessApi, } from "@gnu-taler/taler-wallet-core"; -import { j2s } from "@gnu-taler/taler-util"; +import { j2s, NotificationType, TransactionType, WithdrawalType } from "@gnu-taler/taler-util"; /** * Run test for basic, bank-integrated withdrawal. @@ -32,7 +32,8 @@ import { j2s } from "@gnu-taler/taler-util"; export async function runWithdrawalBankIntegratedTest(t: GlobalTestState) { // Set up test environment - const { wallet, bank, exchange } = await createSimpleTestkudosEnvironment(t); + const { walletClient, bank, exchange } = + await createSimpleTestkudosEnvironmentV2(t); // Create a withdrawal operation @@ -45,46 +46,117 @@ export async function runWithdrawalBankIntegratedTest(t: GlobalTestState) { // Hand it to the wallet - const r1 = await wallet.client.call( + const r1 = await walletClient.client.call( WalletApiOperation.GetWithdrawalDetailsForUri, { talerWithdrawUri: wop.taler_withdraw_uri, }, ); - await wallet.runPending(); - // Withdraw - const r2 = await wallet.client.call( + const withdrawalBankConfirmedCond = walletClient.waitForNotificationCond( + (x) => { + return x.type === NotificationType.WithdrawalGroupBankConfirmed; + }, + ); + + const withdrawalFinishedCond = walletClient.waitForNotificationCond((x) => { + return x.type === NotificationType.WithdrawGroupFinished; + }); + + const withdrawalReserveReadyCond = walletClient.waitForNotificationCond( + (x) => { + return x.type === NotificationType.WithdrawalGroupReserveReady; + }, + ); + + const r2 = await walletClient.client.call( WalletApiOperation.AcceptBankIntegratedWithdrawal, { exchangeBaseUrl: exchange.baseUrl, talerWithdrawUri: wop.taler_withdraw_uri, }, ); + // Do it twice to check idempotency - const r3 = await wallet.client.call( + const r3 = await walletClient.client.call( WalletApiOperation.AcceptBankIntegratedWithdrawal, { exchangeBaseUrl: exchange.baseUrl, talerWithdrawUri: wop.taler_withdraw_uri, }, ); - await wallet.runPending(); + + await exchange.stopWirewatch(); + + // Check status before withdrawal is confirmed by bank. + { + const txn = await walletClient.client.call( + WalletApiOperation.GetTransactions, + {}, + ); + console.log("transactions before confirmation:", j2s(txn)); + const tx0 = txn.transactions[0]; + t.assertTrue(tx0.type === TransactionType.Withdrawal); + t.assertTrue(tx0.withdrawalDetails.type === WithdrawalType.TalerBankIntegrationApi); + t.assertTrue(tx0.withdrawalDetails.confirmed === false); + t.assertTrue(tx0.withdrawalDetails.reserveIsReady === false); + } // Confirm it await BankApi.confirmWithdrawalOperation(bank, user, wop); - await wallet.runUntilDone(); + await withdrawalBankConfirmedCond; + + // Check status after withdrawal is confirmed by bank, + // but before funds are wired to the exchange. + { + const txn = await walletClient.client.call( + WalletApiOperation.GetTransactions, + {}, + ); + console.log("transactions after confirmation:", j2s(txn)); + const tx0 = txn.transactions[0]; + t.assertTrue(tx0.type === TransactionType.Withdrawal); + t.assertTrue(tx0.withdrawalDetails.type === WithdrawalType.TalerBankIntegrationApi); + t.assertTrue(tx0.withdrawalDetails.confirmed === true); + t.assertTrue(tx0.withdrawalDetails.reserveIsReady === false); + } + + await exchange.startWirewatch(); + + await withdrawalReserveReadyCond; + + // Check status after funds were wired. + { + const txn = await walletClient.client.call( + WalletApiOperation.GetTransactions, + {}, + ); + console.log("transactions after reserve ready:", j2s(txn)); + const tx0 = txn.transactions[0]; + t.assertTrue(tx0.type === TransactionType.Withdrawal); + t.assertTrue(tx0.withdrawalDetails.type === WithdrawalType.TalerBankIntegrationApi); + t.assertTrue(tx0.withdrawalDetails.confirmed === true); + t.assertTrue(tx0.withdrawalDetails.reserveIsReady === true); + } + + await withdrawalFinishedCond; // Check balance - const balResp = await wallet.client.call(WalletApiOperation.GetBalances, {}); + const balResp = await walletClient.client.call( + WalletApiOperation.GetBalances, + {}, + ); t.assertAmountEquals("TESTKUDOS:9.72", balResp.balances[0].available); - const txn = await wallet.client.call(WalletApiOperation.GetTransactions, {}); + const txn = await walletClient.client.call( + WalletApiOperation.GetTransactions, + {}, + ); console.log(`transactions: ${j2s(txn)}`); } |