[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-wallet-core] branch master updated: add auto-refund test case, f
From: |
gnunet |
Subject: |
[taler-wallet-core] branch master updated: add auto-refund test case, fix bug detected by it |
Date: |
Thu, 20 Aug 2020 08:29:17 +0200 |
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 57000c22 add auto-refund test case, fix bug detected by it
57000c22 is described below
commit 57000c22141afde7eb7b13ccbd16f06d6b6eb5cd
Author: Florian Dold <florian.dold@gmail.com>
AuthorDate: Thu Aug 20 11:59:06 2020 +0530
add auto-refund test case, fix bug detected by it
---
.../taler-integrationtests/src/test-refund-auto.ts | 99 ++++++++++++++++++++++
.../taler-wallet-core/src/operations/refresh.ts | 9 ++
.../taler-wallet-core/src/operations/refund.ts | 4 +-
.../src/operations/transactions.ts | 2 +-
.../taler-wallet-webextension/src/pages/popup.tsx | 39 ++++++++-
packages/taler-wallet-webextension/src/wxApi.ts | 8 ++
6 files changed, 155 insertions(+), 6 deletions(-)
diff --git a/packages/taler-integrationtests/src/test-refund-auto.ts
b/packages/taler-integrationtests/src/test-refund-auto.ts
new file mode 100644
index 00000000..ed80c1c3
--- /dev/null
+++ b/packages/taler-integrationtests/src/test-refund-auto.ts
@@ -0,0 +1,99 @@
+/*
+ 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 { runTest, GlobalTestState, MerchantPrivateApi } from "./harness";
+import { createSimpleTestkudosEnvironment, withdrawViaBank } from "./helpers";
+import { CoreApiResponse } from "taler-wallet-core";
+
+/**
+ * Run test for basic, bank-integrated withdrawal.
+ */
+runTest(async (t: GlobalTestState) => {
+ // Set up test environment
+
+ const {
+ wallet,
+ bank,
+ exchange,
+ merchant,
+ } = await createSimpleTestkudosEnvironment(t);
+
+ // Withdraw digital cash into the wallet.
+
+ await withdrawViaBank(t, { wallet, bank, exchange, amount: "TESTKUDOS:20" });
+
+ // Set up order.
+ const orderResp = await MerchantPrivateApi.createOrder(merchant, "default", {
+ order: {
+ summary: "Buy me!",
+ amount: "TESTKUDOS:5",
+ fulfillment_url: "taler://fulfillment-success/thx",
+ auto_refund: {
+ d_ms: 3000,
+ }
+ },
+ });
+
+ let orderStatus = await MerchantPrivateApi.queryPrivateOrderStatus(merchant,
{
+ orderId: orderResp.order_id,
+ });
+
+ t.assertTrue(orderStatus.order_status === "unpaid");
+
+ // Make wallet pay for the order
+
+ const r1 = await wallet.apiRequest("preparePay", {
+ talerPayUri: orderStatus.taler_pay_uri,
+ });
+ t.assertTrue(r1.type === "response");
+
+ const r2 = await wallet.apiRequest("confirmPay", {
+ // FIXME: should be validated, don't cast!
+ proposalId: (r1.result as any).proposalId,
+ });
+ t.assertTrue(r2.type === "response");
+
+ // Check if payment was successful.
+
+ orderStatus = await MerchantPrivateApi.queryPrivateOrderStatus(merchant, {
+ orderId: orderResp.order_id,
+ });
+
+ t.assertTrue(orderStatus.order_status === "paid");
+
+ const ref = await MerchantPrivateApi.giveRefund(merchant, {
+ amount: "TESTKUDOS:5",
+ instance: "default",
+ justification: "foo",
+ orderId: orderResp.order_id,
+ });
+
+ console.log(ref);
+
+ // The wallet should now automatically pick up the refund.
+ await wallet.runUntilDone();
+
+ const transactions = await wallet.getTransactions()
+ console.log(JSON.stringify(transactions, undefined, 2));
+
+ const transactionTypes = transactions.transactions.map((x) => x.type);
+ t.assertDeepEqual(transactionTypes, ["withdrawal", "payment", "refund"]);
+
+ await t.shutdown();
+});
diff --git a/packages/taler-wallet-core/src/operations/refresh.ts
b/packages/taler-wallet-core/src/operations/refresh.ts
index 409ae58c..43067532 100644
--- a/packages/taler-wallet-core/src/operations/refresh.ts
+++ b/packages/taler-wallet-core/src/operations/refresh.ts
@@ -571,10 +571,19 @@ export async function createRefreshGroup(
retryInfo: initRetryInfo(),
};
+ if (oldCoinPubs.length == 0) {
+ logger.warn("created refresh group with zero coins");
+ refreshGroup.timestampFinished = getTimestampNow();
+ }
+
await tx.put(Stores.refreshGroups, refreshGroup);
logger.trace(`created refresh group ${refreshGroupId}`);
+ processRefreshGroup(ws, refreshGroupId).catch((e) => {
+ logger.warn(`processing refresh group ${refreshGroupId} failed`);
+ });
+
return {
refreshGroupId,
};
diff --git a/packages/taler-wallet-core/src/operations/refund.ts
b/packages/taler-wallet-core/src/operations/refund.ts
index e9324712..0d6b9ec8 100644
--- a/packages/taler-wallet-core/src/operations/refund.ts
+++ b/packages/taler-wallet-core/src/operations/refund.ts
@@ -259,7 +259,9 @@ async function acceptRefunds(
}
const refreshCoinsPubs = Object.values(refreshCoinsMap);
- await createRefreshGroup(ws, tx, refreshCoinsPubs, RefreshReason.Refund);
+ if (refreshCoinsPubs.length > 0) {
+ await createRefreshGroup(ws, tx, refreshCoinsPubs,
RefreshReason.Refund);
+ }
// Are we done with querying yet, or do we need to do another round
// after a retry delay?
diff --git a/packages/taler-wallet-core/src/operations/transactions.ts
b/packages/taler-wallet-core/src/operations/transactions.ts
index e17dfac3..8d0558db 100644
--- a/packages/taler-wallet-core/src/operations/transactions.ts
+++ b/packages/taler-wallet-core/src/operations/transactions.ts
@@ -265,7 +265,7 @@ export async function getTransactions(
refundGroupKeys.forEach((groupKey: string) => {
const refundTransactionId = makeEventId(
- TransactionType.Payment,
+ TransactionType.Refund,
pr.proposalId,
groupKey,
);
diff --git a/packages/taler-wallet-webextension/src/pages/popup.tsx
b/packages/taler-wallet-webextension/src/pages/popup.tsx
index e833f595..d7cdd548 100644
--- a/packages/taler-wallet-webextension/src/pages/popup.tsx
+++ b/packages/taler-wallet-webextension/src/pages/popup.tsx
@@ -33,9 +33,11 @@ import {
Balance,
classifyTalerUri,
TalerUriType,
+ TransactionsResponse,
+ Transaction,
+ TransactionType,
} from "taler-wallet-core";
-
import { abbrev, renderAmount, PageLink } from "../renderHtml";
import * as wxApi from "../wxApi";
@@ -309,9 +311,37 @@ function formatAndCapitalize(text: string): string {
return text;
}
-const HistoryComponent = (props: any): JSX.Element => {
- return <span>TBD</span>;
-};
+function TransactionItem(props: { tx: Transaction }): JSX.Element {
+ const tx = props.tx;
+ return <pre>{JSON.stringify(tx)}</pre>
+}
+
+function WalletHistory(props: any): JSX.Element {
+ const [transactions, setTransactions] = useState<
+ TransactionsResponse | undefined
+ >();
+
+ useEffect(() => {
+ const fetchData = async (): Promise<void> => {
+ const res = await wxApi.getTransactions();
+ setTransactions(res);
+ };
+ fetchData();
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, []);
+
+ if (!transactions) {
+ return <div>Loading ...</div>;
+ }
+
+ return (
+ <div>
+ {transactions.transactions.map((tx) => (
+ <TransactionItem tx={tx} />
+ ))}
+ </div>
+ );
+}
class WalletSettings extends React.Component<any, any> {
render(): JSX.Element {
@@ -492,6 +522,7 @@ function WalletPopup(): JSX.Element {
<WalletBalanceView route="/balance" default />
<WalletSettings route="/settings" />
<WalletDebug route="/debug" />
+ <WalletHistory route="/history" />
</Router>
</div>
</div>
diff --git a/packages/taler-wallet-webextension/src/wxApi.ts
b/packages/taler-wallet-webextension/src/wxApi.ts
index dc78686a..455d0b8a 100644
--- a/packages/taler-wallet-webextension/src/wxApi.ts
+++ b/packages/taler-wallet-webextension/src/wxApi.ts
@@ -35,6 +35,7 @@ import {
OperationFailedError,
GetWithdrawalDetailsForUriRequest,
WithdrawUriInfoResponse,
+ TransactionsResponse,
} from "taler-wallet-core";
export interface ExtendedPermissionsResponse {
@@ -122,6 +123,13 @@ export function getBalance(): Promise<BalancesResponse> {
return callBackend("getBalances", {});
}
+/**
+ * Get balances for all currencies/exchanges.
+ */
+export function getTransactions(): Promise<TransactionsResponse> {
+ return callBackend("getTransactions", {});
+}
+
/**
* Return coins to a bank account.
*/
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [taler-wallet-core] branch master updated: add auto-refund test case, fix bug detected by it,
gnunet <=