commit 7115e363e18b91ed1f3fdeb96c69a5cf3fab2953
parent bd595927c041e93cd0fb881304abf4fcc0539624
Author: Florian Dold <florian@dold.me>
Date: Sat, 14 Feb 2026 00:57:16 +0100
-missing test file
Diffstat:
1 file changed, 131 insertions(+), 0 deletions(-)
diff --git a/packages/taler-harness/src/integrationtests/test-wallet-refresh-redenominate.ts b/packages/taler-harness/src/integrationtests/test-wallet-refresh-redenominate.ts
@@ -0,0 +1,131 @@
+/*
+ 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 {
+ Duration,
+ FlightRecordEvent,
+ j2s,
+ TalerMerchantApi,
+ TransactionMajorState,
+} from "@gnu-taler/taler-util";
+import { WalletApiOperation } from "@gnu-taler/taler-wallet-core";
+import { defaultCoinConfig } from "../harness/denomStructures.js";
+import {
+ applyTimeTravelV2,
+ createSimpleTestkudosEnvironmentV3,
+ makeTestPaymentV2,
+ withdrawViaBankV3,
+} from "../harness/environments.js";
+import { GlobalTestState } from "../harness/harness.js";
+
+/**
+ * Run test for refresh after a payment.
+ */
+export async function runWalletRefreshRedenominateTest(t: GlobalTestState) {
+ // Set up test environment
+
+ const {
+ walletClient,
+ bankClient,
+ exchange,
+ merchant,
+ merchantAdminAccessToken,
+ } = await createSimpleTestkudosEnvironmentV3(
+ t,
+ defaultCoinConfig.map((x) => x("TESTKUDOS")),
+ {
+ walletConfig: {
+ testing: {
+ devModeActive: true,
+ },
+ },
+ },
+ );
+
+ // Withdraw digital cash into the wallet.
+
+ await withdrawViaBankV3(t, {
+ walletClient,
+ bankClient,
+ exchange,
+ amount: "TESTKUDOS:20",
+ });
+
+ await walletClient.call(WalletApiOperation.TestingWaitTransactionsFinal, {});
+
+ const order: TalerMerchantApi.Order = {
+ summary: "Buy me!",
+ amount: "TESTKUDOS:5",
+ fulfillment_url: "taler://fulfillment-success/thx",
+ };
+
+ await walletClient.call(WalletApiOperation.ApplyDevExperiment, {
+ devExperimentUri: "taler://dev-experiment/start-block-refresh",
+ });
+
+ const payRes = await makeTestPaymentV2(t, {
+ walletClient,
+ merchant,
+ order,
+ merchantAdminAccessToken,
+ });
+ await walletClient.call(WalletApiOperation.TestingWaitTransactionState, {
+ transactionId: payRes.transactionId,
+ txState: {
+ major: TransactionMajorState.Done,
+ },
+ });
+
+ const txns = await walletClient.call(WalletApiOperation.GetTransactionsV2, {
+ includeAll: true,
+ });
+ console.log(j2s(txns));
+
+ await applyTimeTravelV2(
+ Duration.toMilliseconds(
+ Duration.fromSpec({
+ days: 14,
+ }),
+ ),
+ {
+ exchange,
+ merchant,
+ walletClient,
+ },
+ );
+
+ await walletClient.call(WalletApiOperation.ApplyDevExperiment, {
+ devExperimentUri: "taler://dev-experiment/stop-block-refresh",
+ });
+
+ await walletClient.call(WalletApiOperation.TestingWaitTransactionsFinal, {});
+
+ const recs = await walletClient.call(
+ WalletApiOperation.TestingGetFlightRecords,
+ {},
+ );
+
+ // Check that the wallet encountered the "Gone" response from the exchange.
+ const myRec = recs.flightRecords.find(
+ (x) => x.event === FlightRecordEvent.MeltGone,
+ );
+ t.assertTrue(myRec != null);
+}
+
+runWalletRefreshRedenominateTest.suites = ["wallet"];