TWG refund tests.
Arriving to the point where Libeufin services get launched and configured with multiple users. The configuration provides: bank accounts, bank connections and facades; all being created via the abstraction "bundling" layer of one Libeufin 'user'.
This commit is contained in:
parent
118975fee3
commit
7a2ab04da8
@ -21,9 +21,11 @@ import axios from "axios";
|
||||
import { URL } from "@gnu-taler/taler-wallet-core";
|
||||
import {
|
||||
GlobalTestState,
|
||||
DbInfo,
|
||||
pingProc,
|
||||
ProcessWrapper,
|
||||
runCommand,
|
||||
setupDb,
|
||||
sh,
|
||||
} from "./harness";
|
||||
|
||||
@ -35,6 +37,12 @@ export interface LibeufinNexusServiceInterface {
|
||||
baseUrl: string;
|
||||
}
|
||||
|
||||
export interface LibeufinServices {
|
||||
libeufinSandbox: LibeufinSandboxServiceInterface;
|
||||
libeufinNexus: LibeufinNexusServiceInterface;
|
||||
commonDb: DbInfo;
|
||||
}
|
||||
|
||||
export interface LibeufinSandboxConfig {
|
||||
httpPort: number;
|
||||
databaseJdbcUri: string;
|
||||
@ -255,11 +263,13 @@ export interface SimulateIncomingTransactionRequest {
|
||||
export class NexusUserBundle {
|
||||
userReq: CreateNexusUserRequest;
|
||||
connReq: CreateEbicsBankConnectionRequest;
|
||||
twg: CreateTalerWireGatewayFacadeRequest;
|
||||
twgReq: CreateTalerWireGatewayFacadeRequest;
|
||||
twgTransferPermission: PostNexusPermissionRequest;
|
||||
twgHistoryPermission: PostNexusPermissionRequest;
|
||||
localAccountName: string;
|
||||
remoteAccountName: string;
|
||||
|
||||
constructor(ebicsURL: string, salt: string) {
|
||||
constructor(salt: string, ebicsURL: string) {
|
||||
this.userReq = {
|
||||
username: `username-${salt}`,
|
||||
password: `password-${salt}`,
|
||||
@ -268,12 +278,12 @@ export class NexusUserBundle {
|
||||
this.connReq = {
|
||||
name: `connection-${salt}`,
|
||||
ebicsURL: ebicsURL,
|
||||
hostID: `ebicshost-${salt}`,
|
||||
partnerID: `ebicspartner-${salt}`,
|
||||
userID: `ebicsuser-${salt}`,
|
||||
hostID: `ebicshost,${salt}`,
|
||||
partnerID: `ebicspartner,${salt}`,
|
||||
userID: `ebicsuser,${salt}`,
|
||||
};
|
||||
|
||||
this.twg = {
|
||||
this.twgReq = {
|
||||
currency: "EUR",
|
||||
name: `twg-${salt}`,
|
||||
reserveTransferLevel: "report",
|
||||
@ -282,6 +292,26 @@ export class NexusUserBundle {
|
||||
};
|
||||
this.remoteAccountName = `remote-account-${salt}`;
|
||||
this.localAccountName = `local-account-${salt}`;
|
||||
this.twgTransferPermission = {
|
||||
action: "grant",
|
||||
permission: {
|
||||
subjectType: `username-${salt}`,
|
||||
subjectId: "twguser",
|
||||
resourceType: "facade",
|
||||
resourceId: `twg-${salt}`,
|
||||
permissionName: "facade.talerWireGateway.transfer",
|
||||
},
|
||||
};
|
||||
this.twgHistoryPermission = {
|
||||
action: "grant",
|
||||
permission: {
|
||||
subjectType: `username-${salt}`,
|
||||
subjectId: "twguser",
|
||||
resourceType: "facade",
|
||||
resourceId: `twg-${salt}`,
|
||||
permissionName: "facade.talerWireGateway.history",
|
||||
},
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@ -303,9 +333,9 @@ export class SandboxUserBundle {
|
||||
label: `remote-account-${salt}`,
|
||||
name: `Taler Exchange: ${salt}`,
|
||||
subscriber: {
|
||||
hostID: `ebicshost-${salt}`,
|
||||
partnerID: `ebicspartner-${salt}`,
|
||||
userID: `ebicsuser-${salt}`,
|
||||
hostID: `ebicshost,${salt}`,
|
||||
partnerID: `ebicspartner,${salt}`,
|
||||
userID: `ebicsuser,${salt}`,
|
||||
},
|
||||
};
|
||||
}
|
||||
@ -873,3 +903,81 @@ export namespace LibeufinNexusApi {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Launch Nexus and Sandbox.
|
||||
*/
|
||||
export async function launchLibeufinServices(
|
||||
t: GlobalTestState,
|
||||
nexusUserBundle: NexusUserBundle[],
|
||||
sandboxUserBundle: SandboxUserBundle[],
|
||||
): Promise<LibeufinServices> {
|
||||
const db = await setupDb(t);
|
||||
|
||||
const libeufinSandbox = await LibeufinSandboxService.create(t, {
|
||||
httpPort: 5010,
|
||||
databaseJdbcUri: `jdbc:sqlite:${t.testDir}/libeufin-sandbox.sqlite3`,
|
||||
});
|
||||
|
||||
await libeufinSandbox.start();
|
||||
await libeufinSandbox.pingUntilAvailable();
|
||||
|
||||
const libeufinNexus = await LibeufinNexusService.create(t, {
|
||||
httpPort: 5011,
|
||||
databaseJdbcUri: `jdbc:sqlite:${t.testDir}/libeufin-nexus.sqlite3`,
|
||||
});
|
||||
|
||||
await libeufinNexus.start();
|
||||
await libeufinNexus.pingUntilAvailable();
|
||||
console.log("Libeufin services launched!");
|
||||
|
||||
for (let sb of sandboxUserBundle) {
|
||||
await LibeufinSandboxApi.createEbicsHost(
|
||||
libeufinSandbox,
|
||||
sb.ebicsBankAccount.subscriber.hostID,
|
||||
);
|
||||
await LibeufinSandboxApi.createEbicsSubscriber(
|
||||
libeufinSandbox,
|
||||
sb.ebicsBankAccount.subscriber,
|
||||
);
|
||||
await LibeufinSandboxApi.createEbicsBankAccount(
|
||||
libeufinSandbox,
|
||||
sb.ebicsBankAccount,
|
||||
);
|
||||
}
|
||||
console.log("Sandbox user(s) / account(s) / subscriber(s): created");
|
||||
|
||||
for (let nb of nexusUserBundle) {
|
||||
await LibeufinNexusApi.createEbicsBankConnection(libeufinNexus, nb.connReq);
|
||||
await LibeufinNexusApi.connectBankConnection(
|
||||
libeufinNexus,
|
||||
nb.connReq.name,
|
||||
);
|
||||
await LibeufinNexusApi.fetchAccounts(libeufinNexus, nb.connReq.name);
|
||||
await LibeufinNexusApi.importConnectionAccount(
|
||||
libeufinNexus,
|
||||
nb.connReq.name,
|
||||
nb.remoteAccountName,
|
||||
nb.localAccountName,
|
||||
);
|
||||
await LibeufinNexusApi.createTwgFacade(libeufinNexus, nb.twgReq);
|
||||
await LibeufinNexusApi.createUser(libeufinNexus, nb.userReq);
|
||||
await LibeufinNexusApi.postPermission(
|
||||
libeufinNexus,
|
||||
nb.twgTransferPermission,
|
||||
);
|
||||
await LibeufinNexusApi.postPermission(
|
||||
libeufinNexus,
|
||||
nb.twgHistoryPermission,
|
||||
);
|
||||
}
|
||||
console.log(
|
||||
"Nexus user(s) / connection(s) / facade(s) / permission(s): created",
|
||||
);
|
||||
|
||||
return {
|
||||
commonDb: db,
|
||||
libeufinNexus: libeufinNexus,
|
||||
libeufinSandbox: libeufinSandbox,
|
||||
};
|
||||
}
|
||||
|
@ -0,0 +1,49 @@
|
||||
/*
|
||||
This file is part of GNU Taler
|
||||
(C) 2020 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/>
|
||||
*/
|
||||
|
||||
/**
|
||||
* Imports.
|
||||
*/
|
||||
import { CoreApiResponse } from "@gnu-taler/taler-wallet-core";
|
||||
import { CoinConfig, defaultCoinConfig } from "./denomStructures";
|
||||
import { GlobalTestState } from "./harness";
|
||||
import {
|
||||
SandboxUserBundle,
|
||||
NexusUserBundle,
|
||||
launchLibeufinServices,
|
||||
} from "./libeufin";
|
||||
|
||||
/**
|
||||
* Run basic test with LibEuFin.
|
||||
*/
|
||||
export async function runLibeufinRefundTest(t: GlobalTestState) {
|
||||
const user01nexus = new NexusUserBundle(
|
||||
"01",
|
||||
"http://localhost:5010/ebicsweb",
|
||||
);
|
||||
const user01sandbox = new SandboxUserBundle("01");
|
||||
const user02nexus = new NexusUserBundle(
|
||||
"02",
|
||||
"http://localhost:5010/ebicsweb",
|
||||
);
|
||||
const user02sandbox = new SandboxUserBundle("02");
|
||||
|
||||
await launchLibeufinServices(
|
||||
t,
|
||||
[user01nexus, user02nexus],
|
||||
[user01sandbox, user02sandbox],
|
||||
);
|
||||
}
|
@ -55,6 +55,7 @@ import { runWithdrawalBankIntegratedTest } from "./test-withdrawal-bank-integrat
|
||||
import M from "minimatch";
|
||||
import { runMerchantExchangeConfusionTest } from "./test-merchant-exchange-confusion";
|
||||
import { runLibeufinBasicTest } from "./test-libeufin-basic";
|
||||
import { runLibeufinRefundTest } from "./test-libeufin-refund";
|
||||
import { runLibeufinTutorialTest } from "./test-libeufin-tutorial";
|
||||
import { runDepositTest } from "./test-deposit";
|
||||
import CancellationToken from "cancellationtoken";
|
||||
@ -79,6 +80,7 @@ const allTests: TestMainFunction[] = [
|
||||
runFeeRegressionTest,
|
||||
runLibeufinBasicTest,
|
||||
runLibeufinTutorialTest,
|
||||
runLibeufinRefundTest,
|
||||
runMerchantExchangeConfusionTest,
|
||||
runMerchantLongpollingTest,
|
||||
runMerchantRefundApiTest,
|
||||
|
Loading…
Reference in New Issue
Block a user