diff options
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,  | 
