From d4710ba700b37948f61b1b841962b73379423c04 Mon Sep 17 00:00:00 2001 From: MS Date: Fri, 9 Dec 2022 10:51:33 +0100 Subject: Adapt libeufin test suite to recent API. The new libeufin-sandbox API enforces every bank account to be owned by one bank customer; this change therefore provides every test user a customer profile before trying the banking operations. --- .../taler-wallet-cli/src/harness/libeufin-apis.ts | 34 +++++--- packages/taler-wallet-cli/src/harness/libeufin.ts | 94 ++++++++++++++-------- 2 files changed, 82 insertions(+), 46 deletions(-) (limited to 'packages/taler-wallet-cli/src/harness') diff --git a/packages/taler-wallet-cli/src/harness/libeufin-apis.ts b/packages/taler-wallet-cli/src/harness/libeufin-apis.ts index 538d8e93f..f55275927 100644 --- a/packages/taler-wallet-cli/src/harness/libeufin-apis.ts +++ b/packages/taler-wallet-cli/src/harness/libeufin-apis.ts @@ -7,7 +7,7 @@ import axiosImp from "axios"; const axios = axiosImp.default; -import { URL } from "@gnu-taler/taler-util"; +import { Logger, URL } from "@gnu-taler/taler-util"; export interface LibeufinSandboxServiceInterface { baseUrl: string; @@ -167,13 +167,12 @@ function getRandomString(): string { return Math.random().toString(36).substring(2); } +/** + * APIs spread accross Legacy and Access, it is therefore + * the "base URL" relative to which API every call addresses. + */ export namespace LibeufinSandboxApi { - /** - * Return balance and payto-address of 'accountLabel'. - * Note: the demobank serving the request is hard-coded - * inside the base URL, and therefore contained in - * 'libeufinSandboxService'. - */ + // Need Access API base URL. export async function demobankAccountInfo( username: string, password: string, @@ -193,18 +192,24 @@ export namespace LibeufinSandboxApi { } // Creates one bank account via the Access API. + // Need the /demobanks/$id/access-api as the base URL export async function createDemobankAccount( username: string, password: string, libeufinSandboxService: LibeufinSandboxServiceInterface, + iban: string|null = null, ) { - let url = new URL("testing/register", libeufinSandboxService.baseUrl); + let url = new URL( + "testing/register", + libeufinSandboxService.baseUrl + ); await axios.post(url.href, { username: username, password: password, + iban: iban }); } - + // Need /demobanks/$id as the base URL export async function createDemobankEbicsSubscriber( req: CreateEbicsSubscriberRequest, demobankAccountLabel: string, @@ -213,7 +218,10 @@ export namespace LibeufinSandboxApi { password: string = "secret", ) { // baseUrl should already be pointed to one demobank. - let url = new URL("ebics/subscribers", libeufinSandboxService.baseUrl); + let url = new URL( + "ebics/subscribers", + libeufinSandboxService.baseUrl + ); await axios.post( url.href, { @@ -301,6 +309,10 @@ export namespace LibeufinSandboxApi { }); } + /** + * Create a new bank account and associate it to + * a existing EBICS subscriber. + */ export async function createEbicsBankAccount( libeufinSandboxService: LibeufinSandboxServiceInterface, req: CreateEbicsBankAccountRequest, @@ -712,7 +724,7 @@ export namespace LibeufinNexusApi { ): Promise { const baseUrl = libeufinNexusService.baseUrl; let url = new URL(`/bank-accounts/${bankAccountName}/schedule`, baseUrl); - if (taskName) url = new URL(taskName, `${url}/`); + if (taskName) url = new URL(taskName, `${url.href}/`); // It's caller's responsibility to interpret the response. return await axios.get(url.href, { diff --git a/packages/taler-wallet-cli/src/harness/libeufin.ts b/packages/taler-wallet-cli/src/harness/libeufin.ts index bc210d132..638c8ed90 100644 --- a/packages/taler-wallet-cli/src/harness/libeufin.ts +++ b/packages/taler-wallet-cli/src/harness/libeufin.ts @@ -27,7 +27,7 @@ * Imports. */ import axios from "axios"; -import { URL } from "@gnu-taler/taler-util"; +import { URL, Logger } from "@gnu-taler/taler-util"; import { GlobalTestState, DbInfo, @@ -56,6 +56,9 @@ import { CreateNexusUserRequest, } from "../harness/libeufin-apis.js"; + +const logger = new Logger("libeufin.ts"); + export { LibeufinSandboxApi, LibeufinNexusApi }; export interface LibeufinServices { @@ -125,7 +128,7 @@ export interface LibeufinCliDetails { sandboxUrl: string; nexusDatabaseUri: string; sandboxDatabaseUri: string; - user: LibeufinNexusUser; + nexusUser: LibeufinNexusUser; } export interface LibeufinEbicsSubscriberDetails { @@ -448,6 +451,21 @@ export class LibeufinCli { ); } + async registerBankCustomer(username: string, password: string): Promise { + const stdout = await sh( + this.globalTestState, + "libeufin-cli-registercustomer", + "libeufin-cli sandbox demobank register --name='Test Customer'", + { + ...process.env, + LIBEUFIN_SANDBOX_URL: this.cliDetails.sandboxUrl + "/demobanks/default", + LIBEUFIN_SANDBOX_USERNAME: username, + LIBEUFIN_SANDBOX_PASSWORD: password, + }, + ); + console.log(stdout); + } + async createEbicsHost(hostId: string): Promise { const stdout = await sh( this.globalTestState, @@ -528,8 +546,8 @@ export class LibeufinCli { { ...process.env, LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl, - LIBEUFIN_NEXUS_USERNAME: this.cliDetails.user.username, - LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.user.password, + LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username, + LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password, }, ); console.log(stdout); @@ -546,8 +564,8 @@ export class LibeufinCli { { ...process.env, LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl, - LIBEUFIN_NEXUS_USERNAME: this.cliDetails.user.username, - LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.user.password, + LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username, + LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password, }, ); console.log(stdout); @@ -562,8 +580,8 @@ export class LibeufinCli { { ...process.env, LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl, - LIBEUFIN_NEXUS_USERNAME: this.cliDetails.user.username, - LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.user.password, + LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username, + LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password, }, ); console.log(stdout); @@ -577,8 +595,8 @@ export class LibeufinCli { { ...process.env, LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl, - LIBEUFIN_NEXUS_USERNAME: this.cliDetails.user.username, - LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.user.password, + LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username, + LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password, }, ); console.log(stdout); @@ -592,8 +610,8 @@ export class LibeufinCli { { ...process.env, LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl, - LIBEUFIN_NEXUS_USERNAME: this.cliDetails.user.username, - LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.user.password, + LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username, + LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password, }, ); console.log(stdout); @@ -607,8 +625,8 @@ export class LibeufinCli { { ...process.env, LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl, - LIBEUFIN_NEXUS_USERNAME: this.cliDetails.user.username, - LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.user.password, + LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username, + LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password, }, ); console.log(stdout); @@ -627,8 +645,8 @@ export class LibeufinCli { { ...process.env, LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl, - LIBEUFIN_NEXUS_USERNAME: this.cliDetails.user.username, - LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.user.password, + LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username, + LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password, }, ); console.log(stdout); @@ -642,8 +660,8 @@ export class LibeufinCli { { ...process.env, LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl, - LIBEUFIN_NEXUS_USERNAME: this.cliDetails.user.username, - LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.user.password, + LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username, + LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password, }, ); console.log(stdout); @@ -657,8 +675,8 @@ export class LibeufinCli { { ...process.env, LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl, - LIBEUFIN_NEXUS_USERNAME: this.cliDetails.user.username, - LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.user.password, + LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username, + LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password, }, ); console.log(stdout); @@ -678,8 +696,8 @@ export class LibeufinCli { { ...process.env, LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl, - LIBEUFIN_NEXUS_USERNAME: this.cliDetails.user.username, - LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.user.password, + LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username, + LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password, }, ); console.log(stdout); @@ -698,8 +716,8 @@ export class LibeufinCli { { ...process.env, LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl, - LIBEUFIN_NEXUS_USERNAME: this.cliDetails.user.username, - LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.user.password, + LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username, + LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password, }, ); console.log(stdout); @@ -716,8 +734,8 @@ export class LibeufinCli { { ...process.env, LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl, - LIBEUFIN_NEXUS_USERNAME: this.cliDetails.user.username, - LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.user.password, + LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username, + LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password, }, ); console.log(stdout); @@ -734,8 +752,8 @@ export class LibeufinCli { { ...process.env, LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl, - LIBEUFIN_NEXUS_USERNAME: this.cliDetails.user.username, - LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.user.password, + LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username, + LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password, }, ); console.log(stdout); @@ -749,8 +767,8 @@ export class LibeufinCli { { ...process.env, LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl, - LIBEUFIN_NEXUS_USERNAME: this.cliDetails.user.username, - LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.user.password, + LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username, + LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password, }, ); console.log(stdout); @@ -773,7 +791,7 @@ interface NewTalerWireGatewayReq { /** * Launch Nexus and Sandbox AND creates users / facades / bank accounts / - * .. all that's required to start making banking traffic. + * .. all that's required to start making bank traffic. */ export async function launchLibeufinServices( t: GlobalTestState, @@ -799,7 +817,7 @@ export async function launchLibeufinServices( await libeufinNexus.start(); await libeufinNexus.pingUntilAvailable(); console.log("Libeufin services launched!"); - + for (let sb of sandboxUserBundle) { await LibeufinSandboxApi.createEbicsHost( libeufinSandbox, @@ -809,9 +827,15 @@ export async function launchLibeufinServices( libeufinSandbox, sb.ebicsBankAccount.subscriber, ); - await LibeufinSandboxApi.createEbicsBankAccount( - libeufinSandbox, - sb.ebicsBankAccount, + await LibeufinSandboxApi.createDemobankAccount( + sb.ebicsBankAccount.label, + "password-unused", + { baseUrl: libeufinSandbox.baseUrl + "/demobanks/default/access-api/" } + ); + await LibeufinSandboxApi.createDemobankEbicsSubscriber( + sb.ebicsBankAccount.subscriber, + sb.ebicsBankAccount.label, + { baseUrl: libeufinSandbox.baseUrl + "/demobanks/default/" } ); } console.log("Sandbox user(s) / account(s) / subscriber(s): created"); -- cgit v1.2.3