aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMS <ms@taler.net>2021-05-12 09:58:17 +0200
committerMS <ms@taler.net>2021-05-12 09:58:17 +0200
commit41b65e90b9eb1a0a4a999bce75df29a0ea3aedcc (patch)
treeff5b799cf720358b6bb0d64edbaf846d3f80b073
parent2d2bdb7afeeda899250ab3c857bc62864087d248 (diff)
Libeufin API testing.
Testing CRUD operations of the 'bankaccount' resource.
-rw-r--r--packages/taler-wallet-cli/src/integrationtests/libeufin.ts90
-rw-r--r--packages/taler-wallet-cli/src/integrationtests/test-libeufin-api-bankaccount.ts126
-rw-r--r--packages/taler-wallet-cli/src/integrationtests/testrunner.ts2
3 files changed, 214 insertions, 4 deletions
diff --git a/packages/taler-wallet-cli/src/integrationtests/libeufin.ts b/packages/taler-wallet-cli/src/integrationtests/libeufin.ts
index 638926a43..eb9d63f12 100644
--- a/packages/taler-wallet-cli/src/integrationtests/libeufin.ts
+++ b/packages/taler-wallet-cli/src/integrationtests/libeufin.ts
@@ -54,6 +54,52 @@ export interface LibeufinNexusConfig {
databaseJdbcUri: string;
}
+interface LibeufinNexusMoneyMovement {
+ amount: string;
+ creditDebitIndicator: string;
+ details: {
+ debtor: {
+ name: string;
+ };
+ debtorAccount: {
+ iban: string;
+ };
+ debtorAgent: {
+ bic: string;
+ };
+ creditor: {
+ name: string;
+ };
+ creditorAccount: {
+ iban: string;
+ };
+ creditorAgent: {
+ bic: string;
+ };
+ endToEndId: string;
+ unstructuredRemittanceInformation: string;
+ }
+}
+
+interface LibeufinNexusBatches {
+ batchTransactions: Array<LibeufinNexusMoneyMovement>;
+}
+
+interface LibeufinNexusTransaction {
+ amount: string;
+ creditDebitIndicator: string;
+ status: string;
+ bankTransactionCode: string;
+ valueDate: string;
+ bookingDate: string;
+ accountServicerRef: string;
+ batches: Array<LibeufinNexusBatches>;
+}
+
+interface LibeufinNexusTransactions {
+ transactions: Array<LibeufinNexusTransaction>;
+}
+
export interface LibeufinCliDetails {
nexusUrl: string;
sandboxUrl: string;
@@ -667,6 +713,15 @@ export namespace LibeufinSandboxApi {
await axios.post(url.href, req);
}
+ export async function bookPayment2(
+ libeufinSandboxService: LibeufinSandboxService,
+ req: LibeufinSandboxAddIncomingRequest,
+ ) {
+ const baseUrl = libeufinSandboxService.baseUrl;
+ let url = new URL("admin/payments", baseUrl);
+ await axios.post(url.href, req);
+ }
+
export async function bookPayment(
libeufinSandboxService: LibeufinSandboxService,
creditorBundle: SandboxUserBundle,
@@ -688,9 +743,7 @@ export namespace LibeufinSandboxApi {
uid: getRandomString(),
direction: "CRDT",
};
- const baseUrl = libeufinSandboxService.baseUrl;
- let url = new URL("admin/payments", baseUrl);
- await axios.post(url.href, req);
+ await bookPayment2(libeufinSandboxService, req);
}
export async function simulateIncomingTransaction(
@@ -783,6 +836,7 @@ export interface PostNexusPermissionRequest {
}
export namespace LibeufinNexusApi {
+
export async function createEbicsBankConnection(
libeufinNexusService: LibeufinNexusServiceInterface,
req: CreateEbicsBankConnectionRequest,
@@ -943,7 +997,7 @@ export namespace LibeufinNexusApi {
accountName: string,
username: string = "admin",
password: string = "test",
- ): Promise<void> {
+ ): Promise<any> {
const baseUrl = libeufinNexusService.baseUrl;
let url = new URL(
`/bank-accounts/${accountName}/transactions`,
@@ -958,6 +1012,7 @@ export namespace LibeufinNexusApi {
},
},
);
+ return response;
}
export async function fetchAllTransactions(
@@ -1173,3 +1228,30 @@ export async function launchLibeufinServices(
libeufinSandbox: libeufinSandbox,
};
}
+
+/**
+ * Helper function that searches a payment among
+ * a list, as returned by Nexus. The key is just
+ * the payment subject.
+ */
+export function findNexusPayment(
+ key: string,
+ payments: LibeufinNexusTransactions,
+): LibeufinNexusMoneyMovement | void {
+
+ let transactions = payments["transactions"];
+ for (let i = 0; i < transactions.length; i++) {
+
+ let batches = transactions[i]["batches"];
+ for (let y = 0; y < batches.length; y++) {
+
+ let movements = batches[y]["batchTransactions"];
+ for (let z = 0; z < movements.length; z++) {
+
+ let movement = movements[z];
+ if (movement["details"]["unstructuredRemittanceInformation"] == key)
+ return movement;
+ }
+ }
+ }
+}
diff --git a/packages/taler-wallet-cli/src/integrationtests/test-libeufin-api-bankaccount.ts b/packages/taler-wallet-cli/src/integrationtests/test-libeufin-api-bankaccount.ts
new file mode 100644
index 000000000..6f7c47512
--- /dev/null
+++ b/packages/taler-wallet-cli/src/integrationtests/test-libeufin-api-bankaccount.ts
@@ -0,0 +1,126 @@
+/*
+ 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 { GlobalTestState } from "./harness";
+import {
+ NexusUserBundle,
+ LibeufinNexusApi,
+ LibeufinNexusService,
+ LibeufinSandboxService,
+ LibeufinSandboxApi,
+ findNexusPayment,
+} from "./libeufin";
+
+/**
+ * Run basic test with LibEuFin.
+ */
+export async function runLibeufinApiBankaccountTest(t: GlobalTestState) {
+ const nexus = await LibeufinNexusService.create(t, {
+ httpPort: 5011,
+ databaseJdbcUri: `jdbc:sqlite:${t.testDir}/libeufin-nexus.sqlite3`,
+ });
+ await nexus.start();
+ await nexus.pingUntilAvailable();
+
+ await LibeufinNexusApi.createUser(
+ nexus,
+ {
+ username: "one",
+ password: "testing-the-bankaccount-api",
+ }
+ );
+ const sandbox = await LibeufinSandboxService.create(t, {
+ httpPort: 5012,
+ databaseJdbcUri: `jdbc:sqlite:${t.testDir}/libeufin-sandbox.sqlite3`,
+ });
+ await sandbox.start();
+ await sandbox.pingUntilAvailable();
+ await LibeufinSandboxApi.createEbicsHost(sandbox, "mock");
+ await LibeufinSandboxApi.createEbicsSubscriber(
+ sandbox,
+ {
+ hostID: "mock",
+ userID: "mock",
+ partnerID: "mock",
+ }
+ );
+ await LibeufinSandboxApi.createEbicsBankAccount(
+ sandbox,
+ {
+ subscriber: {
+ hostID: "mock",
+ partnerID: "mock",
+ userID: "mock",
+ },
+ iban: "DE71500105179674997361",
+ bic: "BELADEBEXXX",
+ name: "mock",
+ currency: "mock",
+ label: "mock",
+ },
+ );
+ await LibeufinNexusApi.createEbicsBankConnection(
+ nexus,
+ {
+ name: "bankaccount-api-test-connection",
+ ebicsURL: "http://localhost:5012/ebicsweb",
+ hostID: "mock",
+ userID: "mock",
+ partnerID: "mock",
+ }
+ );
+ await LibeufinNexusApi.connectBankConnection(
+ nexus, "bankaccount-api-test-connection"
+ );
+ await LibeufinNexusApi.fetchAccounts(nexus, "bankaccount-api-test-connection");
+
+ await LibeufinNexusApi.importConnectionAccount(
+ nexus,
+ "bankaccount-api-test-connection",
+ "mock",
+ "local-mock",
+ );
+
+ await LibeufinSandboxApi.bookPayment2(
+ sandbox,
+ {
+ creditorIban: "DE71500105179674997361",
+ creditorBic: "BELADEBEXXX",
+ creditorName: "mock",
+ debitorIban: "DE84500105176881385584",
+ debitorBic: "BELADEBEXXX",
+ debitorName: "mock2",
+ subject: "mock subject",
+ currency: "EUR",
+ amount: "1",
+ uid: "mock",
+ direction: "CRDT",
+ }
+ );
+ await LibeufinNexusApi.fetchAllTransactions(
+ nexus,
+ "local-mock"
+ );
+ let transactions = await LibeufinNexusApi.getAccountTransactions(
+ nexus,
+ "local-mock"
+ );
+ let el = findNexusPayment("mock subject", transactions.data);
+ t.assertTrue(el instanceof Object);
+}
diff --git a/packages/taler-wallet-cli/src/integrationtests/testrunner.ts b/packages/taler-wallet-cli/src/integrationtests/testrunner.ts
index c57cd8d1f..44b0a728f 100644
--- a/packages/taler-wallet-cli/src/integrationtests/testrunner.ts
+++ b/packages/taler-wallet-cli/src/integrationtests/testrunner.ts
@@ -60,6 +60,7 @@ import { runLibeufinRefundMultipleUsersTest } from "./test-libeufin-refund-multi
import { runLibeufinTutorialTest } from "./test-libeufin-tutorial";
import { runLibeufinApiPermissionsTest } from "./test-libeufin-api-permissions";
import { runLibeufinApiUsersTest } from "./test-libeufin-api-users";
+import { runLibeufinApiBankaccountTest } from "./test-libeufin-api-bankaccount";
import { runDepositTest } from "./test-deposit";
import CancellationToken from "cancellationtoken";
import { runMerchantInstancesTest } from "./test-merchant-instances";
@@ -93,6 +94,7 @@ const allTests: TestMainFunction[] = [
runLibeufinRefundMultipleUsersTest,
runLibeufinApiPermissionsTest,
runLibeufinApiUsersTest,
+ runLibeufinApiBankaccountTest,
runMerchantExchangeConfusionTest,
runMerchantInstancesTest,
runMerchantInstancesDeleteTest,