taler-typescript-core

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

commit 1fa86832fe20cc201bb18d4757eb55dc6f99a363
parent 2edf82dc34ed576e802824fb9deb83565d82916b
Author: Iván Ávalos <avalos@disroot.org>
Date:   Wed, 30 Jul 2025 12:44:38 +0200

harness: add p2p + deposit + kyc-auth test

Diffstat:
Apackages/taler-harness/src/integrationtests/test-kyc-deposit-kycauth.ts | 165+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mpackages/taler-harness/src/integrationtests/testrunner.ts | 2++
2 files changed, 167 insertions(+), 0 deletions(-)

diff --git a/packages/taler-harness/src/integrationtests/test-kyc-deposit-kycauth.ts b/packages/taler-harness/src/integrationtests/test-kyc-deposit-kycauth.ts @@ -0,0 +1,165 @@ +import { + AbsoluteTime, + AmountString, + Configuration, + Duration, + TransactionMajorState, + TransactionMinorState, + TransactionType, +} from "@gnu-taler/taler-util"; +import { + configureCommonKyc, + createKycTestkudosEnvironment, + createWalletDaemonWithClient, + withdrawViaBankV3, +} from "../harness/environments.js"; +import { + GlobalTestState, + getTestHarnessPaytoForLabel, +} from "../harness/harness.js"; +import { WalletApiOperation } from "@gnu-taler/taler-wallet-core"; + +function adjustExchangeConfig(config: Configuration) { + configureCommonKyc(config); + + config.setString("KYC-RULE-R1", "operation_type", "deposit"); + config.setString("KYC-RULE-R1", "enabled", "yes"); + config.setString("KYC-RULE-R1", "exposed", "yes"); + config.setString("KYC-RULE-R1", "is_and_combinator", "yes"); + config.setString("KYC-RULE-R1", "threshold", "TESTKUDOS:5"); + config.setString("KYC-RULE-R1", "timeframe", "1d"); + config.setString("KYC-RULE-R1", "next_measures", "M1"); + + config.setString("KYC-MEASURE-M1", "check_name", "C1"); + config.setString("KYC-MEASURE-M1", "context", "{}"); + config.setString("KYC-MEASURE-M1", "program", "NONE"); + + config.setString("KYC-CHECK-C1", "type", "INFO"); + config.setString("KYC-CHECK-C1", "description", "my check!"); + config.setString("KYC-CHECK-C1", "fallback", "FREEZE"); +} + +export async function runKycDepositKycauthTest(t: GlobalTestState) { + // Set up test environment + + // wallet that will send p2p transfer + const { walletClient: w0, bankClient, exchange } = + await createKycTestkudosEnvironment(t, { adjustExchangeConfig }); + + // wallet that will receive p2p transfer and do kyc + deposit + const w1 = await createWalletDaemonWithClient(t, { + name: "w0", + }); + + await withdrawViaBankV3(t, { + bankClient, + amount: "TESTKUDOS:50", + exchange: exchange, + walletClient: w0, + }); + + await w1.walletClient.call(WalletApiOperation.AddExchange, { + exchangeBaseUrl: exchange.baseUrl, + }); + + await w1.walletClient.call(WalletApiOperation.SetExchangeTosAccepted, { + exchangeBaseUrl: exchange.baseUrl, + }); + + const initRes = await w1.walletClient.call( + WalletApiOperation.InitiatePeerPullCredit, + { + partialContractTerms: { + amount: "TESTKUDOS:40", + summary: "P2P payment", + purse_expiration: AbsoluteTime.toProtocolTimestamp( + AbsoluteTime.addDuration( + AbsoluteTime.now(), + Duration.fromSpec({ days: 2}), + ), + ), + }, + }, + ); + + await w1.walletClient.call(WalletApiOperation.TestingWaitTransactionState, { + transactionId: initRes.transactionId, + txState: { + major: TransactionMajorState.Pending, + minor: TransactionMinorState.Ready, + }, + }); + + const txPullCredit = await w1.walletClient.call( + WalletApiOperation.GetTransactionById, + { + transactionId: initRes.transactionId, + }, + ); + + t.assertDeepEqual(txPullCredit.type, TransactionType.PeerPullCredit); + + const txPullDebit = await w0.call(WalletApiOperation.PreparePeerPullDebit, { + talerUri: txPullCredit.talerUri!, + }); + + await w0.call(WalletApiOperation.ConfirmPeerPullDebit, { + transactionId: txPullDebit.transactionId, + }); + + await w1.walletClient.call(WalletApiOperation.TestingWaitTransactionState, { + transactionId: txPullCredit.transactionId, + txState: { + major: TransactionMajorState.Done, + }, + }); + + const { transactionId: depositTxId } = await w1.walletClient.call( + WalletApiOperation.GenerateDepositGroupTxId, + {}, + ); + + const deposit = await w1.walletClient.call( + WalletApiOperation.CreateDepositGroup, + { + amount: "TESTKUDOS:10" as AmountString, + depositPaytoUri: getTestHarnessPaytoForLabel("foo"), + transactionId: depositTxId, + }, + ); + + await w1.walletClient.call(WalletApiOperation.TestingWaitTransactionState, { + transactionId: depositTxId, + txState: { + major: TransactionMajorState.Pending, + minor: TransactionMinorState.KycInit, + }, + }); + + t.logStep("deposit pending(kyc-init)"); + + await w1.walletClient.call(WalletApiOperation.TestingWaitTransactionState, { + transactionId: depositTxId, + txState: { + major: TransactionMajorState.Pending, + minor: TransactionMinorState.KycAuthRequired, + }, + }); + + t.logStep("deposit pending(kyc-auth)"); + + const depositTx = await w1.walletClient.call( + WalletApiOperation.GetTransactionById, + { transactionId: depositTxId }, + ); + + t.assertDeepEqual(depositTx.type, TransactionType.Deposit); + t.assertDeepEqual(depositTx.txState.minor, + TransactionMinorState.KycAuthRequired); + t.assertTrue(depositTx.kycAuthTransferInfo !== undefined); + t.assertTrue(depositTx.kycAuthTransferInfo.creditPaytoUris.length > 0); + + // TODO: fulfill kyc-auth +} + +runKycDepositKycauthTest.suites = ["wallet"]; diff --git a/packages/taler-harness/src/integrationtests/testrunner.ts b/packages/taler-harness/src/integrationtests/testrunner.ts @@ -189,6 +189,7 @@ import { runWithdrawalHugeTest } from "./test-withdrawal-huge.js"; import { runWithdrawalIdempotentTest } from "./test-withdrawal-idempotent.js"; import { runWithdrawalManualTest } from "./test-withdrawal-manual.js"; import { runWithdrawalPrepareTest } from "./test-withdrawal-prepare.js"; +import { runKycDepositKycauthTest } from "./test-kyc-deposit-kycauth.js"; /** * Test runner. @@ -318,6 +319,7 @@ const allTests: TestMainFunction[] = [ runKycFailRecoverDoubleTest, runKycFailRecoverSimpleTest, runKycDepositDepositTest, + runKycDepositKycauthTest, runKycMerchantDepositTest, runKycMerchantDepositRewriteTest, runKycMerchantAggregateTest,