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 { URL } from "@gnu-taler/taler-wallet-core";
|
||||||
import {
|
import {
|
||||||
GlobalTestState,
|
GlobalTestState,
|
||||||
|
DbInfo,
|
||||||
pingProc,
|
pingProc,
|
||||||
ProcessWrapper,
|
ProcessWrapper,
|
||||||
runCommand,
|
runCommand,
|
||||||
|
setupDb,
|
||||||
sh,
|
sh,
|
||||||
} from "./harness";
|
} from "./harness";
|
||||||
|
|
||||||
@ -35,6 +37,12 @@ export interface LibeufinNexusServiceInterface {
|
|||||||
baseUrl: string;
|
baseUrl: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface LibeufinServices {
|
||||||
|
libeufinSandbox: LibeufinSandboxServiceInterface;
|
||||||
|
libeufinNexus: LibeufinNexusServiceInterface;
|
||||||
|
commonDb: DbInfo;
|
||||||
|
}
|
||||||
|
|
||||||
export interface LibeufinSandboxConfig {
|
export interface LibeufinSandboxConfig {
|
||||||
httpPort: number;
|
httpPort: number;
|
||||||
databaseJdbcUri: string;
|
databaseJdbcUri: string;
|
||||||
@ -255,11 +263,13 @@ export interface SimulateIncomingTransactionRequest {
|
|||||||
export class NexusUserBundle {
|
export class NexusUserBundle {
|
||||||
userReq: CreateNexusUserRequest;
|
userReq: CreateNexusUserRequest;
|
||||||
connReq: CreateEbicsBankConnectionRequest;
|
connReq: CreateEbicsBankConnectionRequest;
|
||||||
twg: CreateTalerWireGatewayFacadeRequest;
|
twgReq: CreateTalerWireGatewayFacadeRequest;
|
||||||
|
twgTransferPermission: PostNexusPermissionRequest;
|
||||||
|
twgHistoryPermission: PostNexusPermissionRequest;
|
||||||
localAccountName: string;
|
localAccountName: string;
|
||||||
remoteAccountName: string;
|
remoteAccountName: string;
|
||||||
|
|
||||||
constructor(ebicsURL: string, salt: string) {
|
constructor(salt: string, ebicsURL: string) {
|
||||||
this.userReq = {
|
this.userReq = {
|
||||||
username: `username-${salt}`,
|
username: `username-${salt}`,
|
||||||
password: `password-${salt}`,
|
password: `password-${salt}`,
|
||||||
@ -268,12 +278,12 @@ export class NexusUserBundle {
|
|||||||
this.connReq = {
|
this.connReq = {
|
||||||
name: `connection-${salt}`,
|
name: `connection-${salt}`,
|
||||||
ebicsURL: ebicsURL,
|
ebicsURL: ebicsURL,
|
||||||
hostID: `ebicshost-${salt}`,
|
hostID: `ebicshost,${salt}`,
|
||||||
partnerID: `ebicspartner-${salt}`,
|
partnerID: `ebicspartner,${salt}`,
|
||||||
userID: `ebicsuser-${salt}`,
|
userID: `ebicsuser,${salt}`,
|
||||||
};
|
};
|
||||||
|
|
||||||
this.twg = {
|
this.twgReq = {
|
||||||
currency: "EUR",
|
currency: "EUR",
|
||||||
name: `twg-${salt}`,
|
name: `twg-${salt}`,
|
||||||
reserveTransferLevel: "report",
|
reserveTransferLevel: "report",
|
||||||
@ -282,6 +292,26 @@ export class NexusUserBundle {
|
|||||||
};
|
};
|
||||||
this.remoteAccountName = `remote-account-${salt}`;
|
this.remoteAccountName = `remote-account-${salt}`;
|
||||||
this.localAccountName = `local-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}`,
|
label: `remote-account-${salt}`,
|
||||||
name: `Taler Exchange: ${salt}`,
|
name: `Taler Exchange: ${salt}`,
|
||||||
subscriber: {
|
subscriber: {
|
||||||
hostID: `ebicshost-${salt}`,
|
hostID: `ebicshost,${salt}`,
|
||||||
partnerID: `ebicspartner-${salt}`,
|
partnerID: `ebicspartner,${salt}`,
|
||||||
userID: `ebicsuser-${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 M from "minimatch";
|
||||||
import { runMerchantExchangeConfusionTest } from "./test-merchant-exchange-confusion";
|
import { runMerchantExchangeConfusionTest } from "./test-merchant-exchange-confusion";
|
||||||
import { runLibeufinBasicTest } from "./test-libeufin-basic";
|
import { runLibeufinBasicTest } from "./test-libeufin-basic";
|
||||||
|
import { runLibeufinRefundTest } from "./test-libeufin-refund";
|
||||||
import { runLibeufinTutorialTest } from "./test-libeufin-tutorial";
|
import { runLibeufinTutorialTest } from "./test-libeufin-tutorial";
|
||||||
import { runDepositTest } from "./test-deposit";
|
import { runDepositTest } from "./test-deposit";
|
||||||
import CancellationToken from "cancellationtoken";
|
import CancellationToken from "cancellationtoken";
|
||||||
@ -79,6 +80,7 @@ const allTests: TestMainFunction[] = [
|
|||||||
runFeeRegressionTest,
|
runFeeRegressionTest,
|
||||||
runLibeufinBasicTest,
|
runLibeufinBasicTest,
|
||||||
runLibeufinTutorialTest,
|
runLibeufinTutorialTest,
|
||||||
|
runLibeufinRefundTest,
|
||||||
runMerchantExchangeConfusionTest,
|
runMerchantExchangeConfusionTest,
|
||||||
runMerchantLongpollingTest,
|
runMerchantLongpollingTest,
|
||||||
runMerchantRefundApiTest,
|
runMerchantRefundApiTest,
|
||||||
|
Loading…
Reference in New Issue
Block a user