gnunet-svn
[Top][All Lists]
Advanced

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

[taler-wallet-core] branch master updated: wallet-core: emit missing bal


From: gnunet
Subject: [taler-wallet-core] branch master updated: wallet-core: emit missing balance-change notification, test for it
Date: Mon, 19 Feb 2024 23:34:30 +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 a4d0ad427 wallet-core: emit missing balance-change notification, test 
for it
a4d0ad427 is described below

commit a4d0ad4274c79803f75d53a3642cec163ccf4e53
Author: Florian Dold <florian@dold.me>
AuthorDate: Mon Feb 19 23:34:30 2024 +0100

    wallet-core: emit missing balance-change notification, test for it
---
 .../test-wallet-balance-notifications.ts           | 85 ++++++++++++++++++++++
 .../src/integrationtests/testrunner.ts             |  2 +
 packages/taler-wallet-core/src/withdraw.ts         | 10 +++
 3 files changed, 97 insertions(+)

diff --git 
a/packages/taler-harness/src/integrationtests/test-wallet-balance-notifications.ts
 
b/packages/taler-harness/src/integrationtests/test-wallet-balance-notifications.ts
new file mode 100644
index 000000000..66093410f
--- /dev/null
+++ 
b/packages/taler-harness/src/integrationtests/test-wallet-balance-notifications.ts
@@ -0,0 +1,85 @@
+/*
+ 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 {
+  NotificationType,
+  TalerCorebankApiClient,
+  TransactionMajorState,
+} from "@gnu-taler/taler-util";
+import { WalletApiOperation } from "@gnu-taler/taler-wallet-core";
+import { GlobalTestState } from "../harness/harness.js";
+import { createSimpleTestkudosEnvironmentV2 } from "../harness/helpers.js";
+
+/**
+ * Test behavior when an order is deleted while the wallet is paying for it.
+ */
+export async function runWalletBalanceNotificationsTest(t: GlobalTestState) {
+  // Set up test environment
+
+  const { walletClient, bank, exchange, merchant } =
+    await createSimpleTestkudosEnvironmentV2(t);
+
+  const amount = "TESTKUDOS:20";
+
+  const bankClient = new TalerCorebankApiClient(bank.corebankApiBaseUrl);
+
+  const user = await bankClient.createRandomBankUser();
+  const wop = await bankClient.createWithdrawalOperation(user.username, 
amount);
+
+  // Hand it to the wallet
+
+  await walletClient.call(WalletApiOperation.GetWithdrawalDetailsForUri, {
+    talerWithdrawUri: wop.taler_withdraw_uri,
+  });
+
+  // Withdraw (AKA select)
+
+  const balanceChangedNotif1 = walletClient.waitForNotificationCond(
+    (x) => x.type === NotificationType.BalanceChange,
+  );
+
+  const acceptRes = await walletClient.call(
+    WalletApiOperation.AcceptBankIntegratedWithdrawal,
+    {
+      exchangeBaseUrl: exchange.baseUrl,
+      talerWithdrawUri: wop.taler_withdraw_uri,
+    },
+  );
+
+  t.logStep("wait-balance-notif-1");
+  await balanceChangedNotif1;
+  t.logStep("done-wait-balance-notif-1");
+
+  const withdrawalFinishedCond = walletClient.waitForNotificationCond(
+    (x) =>
+      x.type === NotificationType.TransactionStateTransition &&
+      x.newTxState.major === TransactionMajorState.Done &&
+      x.transactionId === acceptRes.transactionId,
+  );
+
+  // Confirm it
+
+  await bankClient.confirmWithdrawalOperation(user.username, {
+    withdrawalOperationId: wop.withdrawal_id,
+  });
+
+  await withdrawalFinishedCond;
+}
+
+runWalletBalanceNotificationsTest.suites = ["wallet"];
diff --git a/packages/taler-harness/src/integrationtests/testrunner.ts 
b/packages/taler-harness/src/integrationtests/testrunner.ts
index f4401c63c..1fb987802 100644
--- a/packages/taler-harness/src/integrationtests/testrunner.ts
+++ b/packages/taler-harness/src/integrationtests/testrunner.ts
@@ -85,6 +85,7 @@ import { runTimetravelWithdrawTest } from 
"./test-timetravel-withdraw.js";
 import { runTermOfServiceFormatTest } from "./test-tos-format.js";
 import { runWalletBackupBasicTest } from "./test-wallet-backup-basic.js";
 import { runWalletBackupDoublespendTest } from 
"./test-wallet-backup-doublespend.js";
+import { runWalletBalanceNotificationsTest } from 
"./test-wallet-balance-notifications.js";
 import { runWalletBalanceTest } from "./test-wallet-balance.js";
 import { runWalletCliTerminationTest } from "./test-wallet-cli-termination.js";
 import { runWalletCryptoWorkerTest } from "./test-wallet-cryptoworker.js";
@@ -192,6 +193,7 @@ const allTests: TestMainFunction[] = [
   runWalletRefreshTest,
   runWalletCliTerminationTest,
   runOtpTest,
+  runWalletBalanceNotificationsTest,
 ];
 
 export interface TestRunSpec {
diff --git a/packages/taler-wallet-core/src/withdraw.ts 
b/packages/taler-wallet-core/src/withdraw.ts
index bfcf23588..2e05f1221 100644
--- a/packages/taler-wallet-core/src/withdraw.ts
+++ b/packages/taler-wallet-core/src/withdraw.ts
@@ -2644,6 +2644,11 @@ export async function acceptWithdrawalFromUri(
 
   const ctx = new WithdrawTransactionContext(ws, withdrawalGroupId);
 
+  ws.notify({
+    type: NotificationType.BalanceChange,
+    hintTransactionId: ctx.transactionId,
+  });
+
   await waitWithdrawalRegistered(ws, ctx);
 
   ws.taskScheduler.startShepherdTask(ctx.taskId);
@@ -2896,6 +2901,11 @@ export async function createManualWithdrawal(
     },
   );
 
+  ws.notify({
+    type: NotificationType.BalanceChange,
+    hintTransactionId: ctx.transactionId,
+  });
+
   ws.taskScheduler.startShepherdTask(ctx.taskId);
 
   return {

-- 
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]