gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-wallet-core] branch master updated: harness: add integration test


From: gnunet
Subject: [taler-wallet-core] branch master updated: harness: add integration test for withdrawal fees
Date: Fri, 13 Jan 2023 01:27:08 +0100

This is an automated email from the git hooks/post-receive script.

dold pushed a commit to branch master
in repository wallet-core.

The following commit(s) were added to refs/heads/master by this push:
     new 8309f803a harness: add integration test for withdrawal fees
8309f803a is described below

commit 8309f803ab3e0bcf56617697b7cf079f996bc1d0
Author: Florian Dold <florian@dold.me>
AuthorDate: Fri Jan 13 01:27:05 2023 +0100

    harness: add integration test for withdrawal fees
---
 packages/taler-harness/src/harness/helpers.ts      |   2 +-
 .../src/integrationtests/test-withdrawal-fees.ts   | 170 +++++++++++++++++++++
 .../src/integrationtests/testrunner.ts             |   2 +
 3 files changed, 173 insertions(+), 1 deletion(-)

diff --git a/packages/taler-harness/src/harness/helpers.ts 
b/packages/taler-harness/src/harness/helpers.ts
index affaccd61..96b34f9d9 100644
--- a/packages/taler-harness/src/harness/helpers.ts
+++ b/packages/taler-harness/src/harness/helpers.ts
@@ -110,7 +110,7 @@ export async function createSimpleTestkudosEnvironment(
     "myexchange",
     "x",
   );
-  exchange.addBankAccount("1", exchangeBankAccount);
+  await exchange.addBankAccount("1", exchangeBankAccount);
 
   bank.setSuggestedExchange(exchange, exchangeBankAccount.accountPaytoUri);
 
diff --git 
a/packages/taler-harness/src/integrationtests/test-withdrawal-fees.ts 
b/packages/taler-harness/src/integrationtests/test-withdrawal-fees.ts
new file mode 100644
index 000000000..065b134c4
--- /dev/null
+++ b/packages/taler-harness/src/integrationtests/test-withdrawal-fees.ts
@@ -0,0 +1,170 @@
+/*
+ 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,
+  WalletCli,
+  setupDb,
+  ExchangeService,
+  BankService,
+} from "../harness/harness.js";
+import {
+  BankAccessApi,
+  BankApi,
+  WalletApiOperation,
+} from "@gnu-taler/taler-wallet-core";
+import { CoinConfig } from "../harness/denomStructures.js";
+import { j2s, URL } from "@gnu-taler/taler-util";
+import { withdrawViaBank } from "../harness/helpers.js";
+
+const coinRsaCommon = {
+  cipher: "RSA" as const,
+  durationLegal: "3 years",
+  durationSpend: "2 years",
+  durationWithdraw: "7 days",
+  rsaKeySize: 1024,
+};
+
+const coin_u1 = (curr: string): CoinConfig => ({
+  ...coinRsaCommon,
+  name: `${curr}_u1`,
+  value: `${curr}:1`,
+  feeDeposit: `${curr}:0`,
+  feeRefresh: `${curr}:0`,
+  feeRefund: `${curr}:0`,
+  feeWithdraw: `${curr}:1`,
+});
+
+const coin_u5 = (curr: string): CoinConfig => ({
+  ...coinRsaCommon,
+  name: `${curr}_u5`,
+  value: `${curr}:5`,
+  feeDeposit: `${curr}:0`,
+  feeRefresh: `${curr}:0`,
+  feeRefund: `${curr}:0`,
+  feeWithdraw: `${curr}:1`,
+});
+
+export const weirdCoinConfig = [coin_u1, coin_u5];
+
+/**
+ * Test withdrawal with a weird denomination structure to
+ * make sure fees are computed as expected.
+ */
+export async function runWithdrawalFeesTest(t: GlobalTestState) {
+  // Set up test environment
+
+  const db = await setupDb(t);
+
+  const bank = await BankService.create(t, {
+    allowRegistrations: true,
+    currency: "TESTKUDOS",
+    database: db.connStr,
+    httpPort: 8082,
+  });
+
+  const exchange = ExchangeService.create(t, {
+    name: "testexchange-1",
+    currency: "TESTKUDOS",
+    httpPort: 8081,
+    database: db.connStr,
+  });
+
+  const exchangeBankAccount = await bank.createExchangeAccount(
+    "myexchange",
+    "x",
+  );
+  await exchange.addBankAccount("1", exchangeBankAccount);
+
+  await bank.start();
+
+  await bank.pingUntilAvailable();
+
+  const coinConfig: CoinConfig[] = weirdCoinConfig.map((x) => x("TESTKUDOS"));
+  exchange.addCoinConfigList(coinConfig);
+
+  await exchange.start();
+  await exchange.pingUntilAvailable();
+
+  console.log("setup done!");
+
+  const wallet = new WalletCli(t);
+
+  await wallet.client.call(WalletApiOperation.AddExchange, {
+    exchangeBaseUrl: exchange.baseUrl,
+  });
+
+  const amount = "TESTKUDOS:7.5";
+
+  const user = await BankApi.createRandomBankUser(bank);
+  const wop = await BankAccessApi.createWithdrawalOperation(bank, user, 
amount);
+
+  // Hand it to the wallet
+
+  const details = await wallet.client.call(
+    WalletApiOperation.GetWithdrawalDetailsForUri,
+    {
+      talerWithdrawUri: wop.taler_withdraw_uri,
+    },
+  );
+
+  console.log(j2s(details));
+
+  const amountDetails = await wallet.client.call(
+    WalletApiOperation.GetWithdrawalDetailsForAmount,
+    {
+      amount: details.amount,
+      exchangeBaseUrl: details.possibleExchanges[0].exchangeBaseUrl,
+    },
+  );
+
+  console.log(j2s(amountDetails));
+
+  t.assertAmountEquals(amountDetails.amountEffective, "TESTKUDOS:5");
+  t.assertAmountEquals(amountDetails.amountRaw, "TESTKUDOS:7.5");
+
+  await wallet.runPending();
+
+  // Withdraw (AKA select)
+
+  await wallet.client.call(WalletApiOperation.AcceptBankIntegratedWithdrawal, {
+    exchangeBaseUrl: exchange.baseUrl,
+    talerWithdrawUri: wop.taler_withdraw_uri,
+  });
+
+  // Confirm it
+
+  await BankApi.confirmWithdrawalOperation(bank, user, wop);
+
+  await exchange.runWirewatchOnce();
+
+  await wallet.runUntilDone();
+
+  // Check balance
+
+  const balResp = await wallet.client.call(WalletApiOperation.GetBalances, {});
+  console.log(j2s(balResp));
+
+  t.assertAmountEquals(balResp.balances[0].available, "TESTKUDOS:5");
+
+  const txns = await wallet.client.call(WalletApiOperation.GetTransactions, 
{});
+  console.log(j2s(txns));
+}
+
+runWithdrawalFeesTest.suites = ["wallet"];
diff --git a/packages/taler-harness/src/integrationtests/testrunner.ts 
b/packages/taler-harness/src/integrationtests/testrunner.ts
index b5afa5d5b..780fcf394 100644
--- a/packages/taler-harness/src/integrationtests/testrunner.ts
+++ b/packages/taler-harness/src/integrationtests/testrunner.ts
@@ -98,6 +98,7 @@ import { runWalletCryptoWorkerTest } from 
"./test-wallet-cryptoworker.js";
 import { runWithdrawalHighTest } from "./test-withdrawal-high.js";
 import { runKycTest } from "./test-kyc.js";
 import { runPaymentAbortTest } from "./test-payment-abort.js";
+import { runWithdrawalFeesTest } from "./test-withdrawal-fees.js";
 
 /**
  * Test runner.
@@ -185,6 +186,7 @@ const allTests: TestMainFunction[] = [
   runWithdrawalAbortBankTest,
   runWithdrawalBankIntegratedTest,
   runWithdrawalFakebankTest,
+  runWithdrawalFeesTest,
   runWithdrawalHighTest,
 ];
 

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]