taler-typescript-core

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

commit 35b0d41da52f97d0c3565cb27887688784d3d45e
parent 6b6bdcee909d4e163451f6d5a1642ea8d8f26254
Author: Florian Dold <florian@dold.me>
Date:   Sun,  8 Mar 2026 12:49:49 +0100

-missing file, fix test assertion

Diffstat:
Mpackages/taler-harness/src/integrationtests/test-merchant-deposit-large.ts | 6++++++
Apackages/taler-harness/src/integrationtests/test-wallet-deposit-large.ts | 133+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 139 insertions(+), 0 deletions(-)

diff --git a/packages/taler-harness/src/integrationtests/test-merchant-deposit-large.ts b/packages/taler-harness/src/integrationtests/test-merchant-deposit-large.ts @@ -79,6 +79,7 @@ export async function runMerchantDepositLargeTest(t: GlobalTestState) { exchangeConfig: { roundUnit: "TESTKUDOS:2", tinyAmount: "TESTKUDOS:2", + overrideWireFee: "TESTKUDOS:0", }, }); @@ -190,6 +191,11 @@ export async function runMerchantDepositLargeTest(t: GlobalTestState) { const txns = succeedOrThrow(await client.getTransactions(bankAuth)); console.log(`bank txns for exchange: ${j2s(txns)}`); if (txns.transactions.length >= 2) { + const myTx = txns.transactions.find((x) => x.direction === "debit"); + if (!myTx) { + throw Error("unexpected transaction"); + } + t.assertAmountEquals(myTx.amount, "TESTKUDOS:100"); break; } console.log("waiting for transaction..."); diff --git a/packages/taler-harness/src/integrationtests/test-wallet-deposit-large.ts b/packages/taler-harness/src/integrationtests/test-wallet-deposit-large.ts @@ -0,0 +1,133 @@ +/* + This file is part of GNU Taler + (C) 2024 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> + */ + +import { + j2s, + succeedOrThrow, + TalerCoreBankHttpClient, + TransactionMajorState, + TransactionMinorState, + UserAndToken, +} from "@gnu-taler/taler-util"; +import { WalletApiOperation } from "@gnu-taler/taler-wallet-core"; +import { CoinConfig } from "../harness/denomStructures.js"; +import { + createSimpleTestkudosEnvironmentV3, + withdrawViaBankV3, +} from "../harness/environments.js"; +import { GlobalTestState, waitMs } from "../harness/harness.js"; + +const coinCommon = { + cipher: "RSA" as const, + durationLegal: "3 years", + durationSpend: "2 years", + durationWithdraw: "7 days", + feeDeposit: "TESTKUDOS:0", + feeRefresh: "TESTKUDOS:0", + feeRefund: "TESTKUDOS:0", + feeWithdraw: "TESTKUDOS:0", + rsaKeySize: 1024, +}; + +const coinConfigList: CoinConfig[] = [ + { + ...coinCommon, + name: "n1", + value: "TESTKUDOS:1", + }, +]; + +/** + * Test deposit with a large number of coins. + * + * In particular, this checks that the wallet properly + * splits deposits into batches with <=64 coins per batch. + * + * Since we use an artificially large number of coins, this + * test is a bit slower than other tests. + */ +export async function runWalletDepositLargeTest(t: GlobalTestState) { + // Set up test environment + const { walletClient, bankClient, exchange, bank } = + await createSimpleTestkudosEnvironmentV3(t, coinConfigList, { + exchangeConfig: { + overrideWireFee: "TESTKUDOS:0", + }, + }); + + // Withdraw digital cash into the wallet. + const withdrawRes = await withdrawViaBankV3(t, { + walletClient, + bankClient, + exchange, + amount: "TESTKUDOS:200", + }); + + await withdrawRes.withdrawalFinishedCond; + + const depositResp = await walletClient.call( + WalletApiOperation.CreateDepositGroup, + { + amount: "TESTKUDOS:100", + depositPaytoUri: withdrawRes.accountPaytoUri, + }, + ); + + await walletClient.call(WalletApiOperation.TestingWaitTransactionState, { + transactionId: depositResp.transactionId, + txState: { + major: TransactionMajorState.Finalizing, + minor: TransactionMinorState.Track, + }, + }); + + const client = new TalerCoreBankHttpClient(bank.corebankApiBaseUrl); + const btok = succeedOrThrow( + await client.createAccessToken( + "exchange", + { + type: "basic", + password: "mypw-password", + }, + { + scope: "readwrite", + }, + ), + ).access_token; + const bankAuth: UserAndToken = { + token: btok, + username: "exchange", + }; + + while (1) { + const txns = succeedOrThrow(await client.getTransactions(bankAuth)); + console.log(`bank txns for exchange: ${j2s(txns)}`); + if (txns.transactions.length >= 2) { + const myTx = txns.transactions.find((x) => x.direction === "debit"); + if (!myTx) { + throw Error("unexpected transaction"); + } + t.assertAmountEquals(myTx.amount, "TESTKUDOS:100"); + break; + } + console.log("waiting for transaction..."); + await waitMs(1000); + await exchange.runAggregatorOnce(); + await exchange.runTransferOnce(); + } +} + +runWalletDepositLargeTest.suites = ["wallet", "slow"];