diff options
author | MS <ms@taler.net> | 2021-02-15 10:43:05 +0100 |
---|---|---|
committer | MS <ms@taler.net> | 2021-02-15 10:43:05 +0100 |
commit | 7a2ab04da8548d9b409df1ab183c785c7bde7e48 (patch) | |
tree | 509a735d420d0020b15c59f757d4a79b5d992045 | |
parent | 118975fee3568f773c75b26753086ecdde182db4 (diff) | |
download | wallet-core-7a2ab04da8548d9b409df1ab183c785c7bde7e48.tar.xz |
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'.
3 files changed, 168 insertions, 9 deletions
diff --git a/packages/taler-wallet-cli/src/integrationtests/libeufin.ts b/packages/taler-wallet-cli/src/integrationtests/libeufin.ts index c96125d7c..1bced0bec 100644 --- a/packages/taler-wallet-cli/src/integrationtests/libeufin.ts +++ b/packages/taler-wallet-cli/src/integrationtests/libeufin.ts @@ -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, + }; +} diff --git a/packages/taler-wallet-cli/src/integrationtests/test-libeufin-refund.ts b/packages/taler-wallet-cli/src/integrationtests/test-libeufin-refund.ts new file mode 100644 index 000000000..2d5103dce --- /dev/null +++ b/packages/taler-wallet-cli/src/integrationtests/test-libeufin-refund.ts @@ -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], + ); +} diff --git a/packages/taler-wallet-cli/src/integrationtests/testrunner.ts b/packages/taler-wallet-cli/src/integrationtests/testrunner.ts index e220e45e4..a11b45878 100644 --- a/packages/taler-wallet-cli/src/integrationtests/testrunner.ts +++ b/packages/taler-wallet-cli/src/integrationtests/testrunner.ts @@ -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, |