aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-cli/src/harness
diff options
context:
space:
mode:
authorMS <ms@taler.net>2022-12-09 10:51:33 +0100
committerMS <ms@taler.net>2022-12-09 10:55:52 +0100
commitd4710ba700b37948f61b1b841962b73379423c04 (patch)
tree5bcd64b5125045417314a2af0a5c498a9a52e5a7 /packages/taler-wallet-cli/src/harness
parent68811cc5f59e9f7f3e46e5a35edc3e4470a295db (diff)
downloadwallet-core-d4710ba700b37948f61b1b841962b73379423c04.tar.xz
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.
Diffstat (limited to 'packages/taler-wallet-cli/src/harness')
-rw-r--r--packages/taler-wallet-cli/src/harness/libeufin-apis.ts34
-rw-r--r--packages/taler-wallet-cli/src/harness/libeufin.ts94
2 files changed, 82 insertions, 46 deletions
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<any> {
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<void> {
+ 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<void> {
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");