taler-typescript-core

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

commit b184d177c942d9f7b401a30d8cecb42c7dacedd9
parent 9e925fe446dc67fe7cf874451bb7d8e3e4814655
Author: Florian Dold <florian@dold.me>
Date:   Wed,  8 Jan 2025 16:34:36 +0100

harness: simplify kyc test, adjust config

Diffstat:
Mpackages/taler-harness/src/integrationtests/test-kyc.ts | 338++++++++++++++++++++++----------------------------------------------------------
1 file changed, 91 insertions(+), 247 deletions(-)

diff --git a/packages/taler-harness/src/integrationtests/test-kyc.ts b/packages/taler-harness/src/integrationtests/test-kyc.ts @@ -18,10 +18,8 @@ * Imports. */ import { - Duration, Logger, NotificationType, - TalerCorebankApiClient, TransactionMajorState, TransactionMinorState, TransactionType, @@ -31,253 +29,11 @@ import { import { readResponseJsonOrThrow } from "@gnu-taler/taler-util/http"; import { WalletApiOperation } from "@gnu-taler/taler-wallet-core"; import * as http from "node:http"; -import { CoinConfig, defaultCoinConfig } from "../harness/denomStructures.js"; -import { - BankService, - ExchangeService, - GlobalTestState, - MerchantService, - WalletClient, - WalletService, - getTestHarnessPaytoForLabel, - harnessHttpLib, - setupDb, -} from "../harness/harness.js"; -import { - EnvOptions, - SimpleTestEnvironmentNg3, -} from "../harness/environments.js"; +import { createKycTestkudosEnvironment } from "../harness/environments.js"; +import { GlobalTestState, harnessHttpLib } from "../harness/harness.js"; const logger = new Logger("test-kyc.ts"); -async function createKycTestkudosEnvironment( - t: GlobalTestState, - coinConfig: CoinConfig[] = defaultCoinConfig.map((x) => x("TESTKUDOS")), - opts: EnvOptions = {}, -): Promise<SimpleTestEnvironmentNg3> { - const db = await setupDb(t); - - const bank = await BankService.create(t, { - allowRegistrations: true, - currency: "TESTKUDOS", - database: db.connStr, - httpPort: 8082, - }); - - const exchange = ExchangeService.create(t, { - name: "testexchange-1", - currency: "TESTKUDOS", - httpPort: 8081, - database: db.connStr, - }); - - const merchant = await MerchantService.create(t, { - name: "testmerchant-1", - httpPort: 8083, - database: db.connStr, - }); - - let receiverName = "Exchange"; - let exchangeBankUsername = "exchange"; - let exchangeBankPassword = "mypw-password"; - let exchangePaytoUri = getTestHarnessPaytoForLabel(exchangeBankUsername); - - await exchange.addBankAccount("1", { - accountName: exchangeBankUsername, - accountPassword: exchangeBankPassword, - wireGatewayApiBaseUrl: new URL( - "accounts/exchange/taler-wire-gateway/", - bank.baseUrl, - ).href, - accountPaytoUri: exchangePaytoUri, - }); - - bank.setSuggestedExchange(exchange, exchangePaytoUri); - - await bank.start(); - - await bank.pingUntilAvailable(); - - const bankClient = new TalerCorebankApiClient(bank.corebankApiBaseUrl, { - auth: { - username: "admin", - password: "admin-password", - }, - }); - - await bankClient.registerAccountExtended({ - name: receiverName, - password: exchangeBankPassword, - username: exchangeBankUsername, - is_taler_exchange: true, - payto_uri: exchangePaytoUri, - }); - - const ageMaskSpec = opts.ageMaskSpec; - - if (ageMaskSpec) { - exchange.enableAgeRestrictions(ageMaskSpec); - // Enable age restriction for all coins. - exchange.addCoinConfigList( - coinConfig.map((x) => ({ - ...x, - name: `${x.name}-age`, - ageRestricted: true, - })), - ); - // For mixed age restrictions, we also offer coins without age restrictions - if (opts.mixedAgeRestriction) { - exchange.addCoinConfigList( - coinConfig.map((x) => ({ ...x, ageRestricted: false })), - ); - } - } else { - exchange.addCoinConfigList(coinConfig); - } - - await exchange.modifyConfig(async (config) => { - config.setString("exchange", "enable_kyc", "yes"); - - config.setString("KYC-RULE-R1", "operation_type", "withdraw"); - 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", "P1"); - - config.setString("KYC-CHECK-C1", "type", "LINK"); - config.setString("KYC-CHECK-C1", "provider_id", "MYPROV"); - config.setString("KYC-CHECK-C1", "description", "my check!"); - config.setString("KYC-CHECK-C1", "description_i18n", "{}"); - config.setString("KYC-CHECK-C1", "outputs", "full_name birthdate"); - config.setString("KYC-CHECK-C1", "fallback", "M1"); - - config.setString( - "AML-PROGRAM-P1", - "command", - "taler-exchange-helper-measure-test-form", - ); - config.setString("AML-PROGRAM-P1", "enabled", "true"); - config.setString( - "AML-PROGRAM-P1", - "description", - "test for full_name and birthdate", - ); - config.setString("AML-PROGRAM-P1", "description_i18n", "{}"); - config.setString("AML-PROGRAM-P1", "fallback", "M1"); - - const myprov = "KYC-PROVIDER-MYPROV"; - config.setString(myprov, "logic", "oauth2"); - config.setString( - myprov, - "converter", - "taler-exchange-kyc-oauth2-test-converter.sh", - ); - config.setString(myprov, "kyc_oauth2_validity", "forever"); - config.setString( - myprov, - "kyc_oauth2_token_url", - "http://localhost:6666/oauth/v2/token", - ); - config.setString( - myprov, - "kyc_oauth2_authorize_url", - "http://localhost:6666/oauth/v2/login", - ); - config.setString( - myprov, - "kyc_oauth2_info_url", - "http://localhost:6666/oauth/v2/info", - ); - config.setString( - myprov, - "kyc_oauth2_converter_helper", - "taler-exchange-kyc-oauth2-test-converter.sh", - ); - config.setString(myprov, "kyc_oauth2_client_id", "taler-exchange"); - config.setString(myprov, "kyc_oauth2_client_secret", "exchange-secret"); - config.setString(myprov, "kyc_oauth2_post_url", "https://taler.net"); - - config.setString( - "kyc-legitimization-withdraw1", - "operation_type", - "withdraw", - ); - }); - - await exchange.start(); - await exchange.pingUntilAvailable(); - - merchant.addExchange(exchange); - - await merchant.start(); - await merchant.pingUntilAvailable(); - - await merchant.addInstanceWithWireAccount({ - id: "default", - name: "Default Instance", - paytoUris: [getTestHarnessPaytoForLabel("merchant-default")], - defaultWireTransferDelay: Duration.toTalerProtocolDuration( - Duration.fromSpec({ minutes: 1 }), - ), - }); - - await merchant.addInstanceWithWireAccount({ - id: "minst1", - name: "minst1", - paytoUris: [getTestHarnessPaytoForLabel("minst1")], - defaultWireTransferDelay: Duration.toTalerProtocolDuration( - Duration.fromSpec({ minutes: 1 }), - ), - }); - - const walletService = new WalletService(t, { - name: "wallet", - useInMemoryDb: true, - }); - await walletService.start(); - await walletService.pingUntilAvailable(); - - const walletClient = new WalletClient({ - name: "wallet", - unixPath: walletService.socketPath, - onNotification(n) { - console.log("got notification", n); - }, - }); - await walletClient.connect(); - await walletClient.client.call(WalletApiOperation.InitWallet, { - config: { - testing: { - skipDefaults: true, - }, - }, - }); - - console.log("setup done!"); - - return { - commonDb: db, - exchange, - merchant, - walletClient, - walletService, - bank, - bankClient, - exchangeBankAccount: { - accountName: "", - accountPassword: "", - accountPaytoUri: "", - wireGatewayApiBaseUrl: "", - }, - }; -} - interface TestfakeKycService { stop: () => void; } @@ -374,7 +130,95 @@ export async function runKycTest(t: GlobalTestState) { // Set up test environment const { walletClient, bankClient, exchange, merchant } = - await createKycTestkudosEnvironment(t); + await createKycTestkudosEnvironment(t, { + adjustExchangeConfig(config) { + config.setString("exchange", "enable_kyc", "yes"); + + config.setString("KYC-RULE-R1", "operation_type", "withdraw"); + 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", "P1"); + + config.setString("KYC-CHECK-C1", "type", "LINK"); + config.setString("KYC-CHECK-C1", "provider_id", "MYPROV"); + config.setString("KYC-CHECK-C1", "description", "my check!"); + config.setString("KYC-CHECK-C1", "description_i18n", "{}"); + config.setString("KYC-CHECK-C1", "outputs", "full_name birthdate"); + config.setString("KYC-CHECK-C1", "fallback", "FREEZE"); + + config.setString( + "AML-PROGRAM-P1", + "command", + "taler-exchange-helper-measure-test-form", + ); + config.setString("AML-PROGRAM-P1", "enabled", "true"); + config.setString( + "AML-PROGRAM-P1", + "description", + "test for full_name and birthdate", + ); + config.setString("AML-PROGRAM-P1", "description_i18n", "{}"); + config.setString("AML-PROGRAM-P1", "fallback", "FREEZE"); + + config.setString("KYC-MEASURE-FREEZE", "check_name", "SKIP"); + config.setString("KYC-MEASURE-FREEZE", "context", "{}"); + config.setString("KYC-MEASURE-FREEZE", "program", "FREEZE"); + config.setString( + "AML-PROGRAM-FREEZE", + "command", + "taler-exchange-helper-measure-freeze", + ); + config.setString("AML-PROGRAM-FREEZE", "enabled", "true"); + config.setString("AML-PROGRAM-FREEZE", "description", "Freeze account"); + config.setString("AML-PROGRAM-FREEZE", "description_i18n", "{}"); + config.setString("AML-PROGRAM-FREEZE", "fallback", "FREEZE"); + + const myprov = "KYC-PROVIDER-MYPROV"; + config.setString(myprov, "logic", "oauth2"); + config.setString( + myprov, + "converter", + "taler-exchange-kyc-oauth2-test-converter.sh", + ); + config.setString(myprov, "kyc_oauth2_validity", "forever"); + config.setString( + myprov, + "kyc_oauth2_token_url", + "http://localhost:6666/oauth/v2/token", + ); + config.setString( + myprov, + "kyc_oauth2_authorize_url", + "http://localhost:6666/oauth/v2/login", + ); + config.setString( + myprov, + "kyc_oauth2_info_url", + "http://localhost:6666/oauth/v2/info", + ); + config.setString( + myprov, + "kyc_oauth2_converter_helper", + "taler-exchange-kyc-oauth2-test-converter.sh", + ); + config.setString(myprov, "kyc_oauth2_client_id", "taler-exchange"); + config.setString(myprov, "kyc_oauth2_client_secret", "exchange-secret"); + config.setString(myprov, "kyc_oauth2_post_url", "https://taler.net"); + + config.setString( + "kyc-legitimization-withdraw1", + "operation_type", + "withdraw", + ); + }, + }); const kycServer = await runTestfakeKycService();