aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--package.json2
-rw-r--r--src/headless/taler-wallet-cli.ts33
-rw-r--r--src/headless/taler-wallet-testing.ts155
-rw-r--r--src/index.ts3
-rw-r--r--tsconfig.json3
5 files changed, 36 insertions, 160 deletions
diff --git a/package.json b/package.json
index a1822d23e..7a4ef23c8 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "taler-wallet",
- "version": "0.0.8",
+ "version": "0.6.0",
"description": "",
"main": "dist/node/index.js",
"repository": {
diff --git a/src/headless/taler-wallet-cli.ts b/src/headless/taler-wallet-cli.ts
index 9c4a84e3e..6e2190236 100644
--- a/src/headless/taler-wallet-cli.ts
+++ b/src/headless/taler-wallet-cli.ts
@@ -17,6 +17,8 @@
import commander = require("commander");
import os = require("os");
import { getDefaultNodeWallet, withdrawTestBalance } from "./helpers";
+import { MerchantBackendConnection } from "./merchant";
+import { runIntegrationTest } from "./integrationtest";
const program = new commander.Command();
program.version("0.0.1");
@@ -36,7 +38,7 @@ program
});
program
- .command("balance", undefined, { isDefault: true })
+ .command("balance")
.description("show wallet balance")
.action(async () => {
console.log("balance command called");
@@ -49,6 +51,35 @@ program
process.exit(0);
});
+
+program
+ .command("integrationtest")
+ .option('-e, --exchange <exchange-url>', 'exchange base URL', "https://exchange.test.taler.net/")
+ .option('-m, --merchant <merchant-url>', 'merchant base URL', "https://backend.test.taler.net/")
+ .option('-m, --merchant-instance <merchant-instance>', 'merchant instance', "default")
+ .option('-m, --merchant-api-key <merchant-api-key>', 'merchant API key', "sandbox")
+ .option('-b, --bank <bank-url>', 'bank base URL', "https://bank.test.taler.net/")
+ .option('-w, --withdraw-amount <withdraw-amt>', 'amount to withdraw', "TESTKUDOS:10")
+ .option('-s, --spend-amount <spend-amt>', 'amount to spend', "TESTKUDOS:5")
+ .description("Run integration test with bank, exchange and merchant.")
+ .action(async (cmdObj) => {
+
+ await runIntegrationTest({
+ amountToSpend: cmdObj.spendAmount,
+ amountToWithdraw: cmdObj.withdrawAmount,
+ bankBaseUrl: cmdObj.bank,
+ exchangeBaseUrl: cmdObj.exchange,
+ merchantApiKey: cmdObj.merchantApiKey,
+ merchantBaseUrl: cmdObj.merchant,
+ merchantInstance: cmdObj.merchantInstance,
+ }).catch(err => {
+ console.error("Failed with exception:");
+ console.error(err);
+ });
+
+ process.exit(0);
+ });
+
// error on unknown commands
program.on("command:*", function() {
console.error(
diff --git a/src/headless/taler-wallet-testing.ts b/src/headless/taler-wallet-testing.ts
deleted file mode 100644
index cb0cfeacc..000000000
--- a/src/headless/taler-wallet-testing.ts
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2019 GNUnet e.V.
-
- 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/>
- */
-
-/**
- * Integration tests against real Taler bank/exchange/merchant deployments.
- */
-
-import { Wallet } from "../wallet";
-import * as amounts from "../amounts";
-import Axios from "axios";
-import URI = require("urijs");
-
-import { CheckPaymentResponse } from "../talerTypes";
-import { getDefaultNodeWallet, withdrawTestBalance } from "./helpers";
-import { Bank } from "./bank";
-
-const enableTracing = false;
-
-class MerchantBackendConnection {
- constructor(
- public merchantBaseUrl: string,
- public merchantInstance: string,
- public apiKey: string,
- ) {}
-
- async createOrder(
- amount: string,
- summary: string,
- fulfillmentUrl: string,
- ): Promise<{ orderId: string }> {
- const reqUrl = new URI("order").absoluteTo(this.merchantBaseUrl).href();
- const orderReq = {
- order: {
- amount,
- summary,
- fulfillment_url: fulfillmentUrl,
- instance: this.merchantInstance,
- },
- };
- const resp = await Axios({
- method: "post",
- url: reqUrl,
- data: orderReq,
- responseType: "json",
- headers: {
- Authorization: `ApiKey ${this.apiKey}`,
- },
- });
- if (resp.status != 200) {
- throw Error("failed to create bank reserve");
- }
- const orderId = resp.data.order_id;
- if (!orderId) {
- throw Error("no order id in response");
- }
- return { orderId };
- }
-
- async checkPayment(orderId: string): Promise<CheckPaymentResponse> {
- const reqUrl = new URI("check-payment")
- .absoluteTo(this.merchantBaseUrl)
- .href();
- const resp = await Axios({
- method: "get",
- url: reqUrl,
- params: { order_id: orderId, instance: this.merchantInstance },
- responseType: "json",
- headers: {
- Authorization: `ApiKey ${this.apiKey}`,
- },
- });
- if (resp.status != 200) {
- throw Error("failed to check payment");
- }
- return CheckPaymentResponse.checked(resp.data);
- }
-}
-
-export async function main() {
- const exchangeBaseUrl = "https://exchange.test.taler.net/";
- const bankBaseUrl = "https://bank.test.taler.net/";
-
- const myWallet = await getDefaultNodeWallet();
-
- await withdrawTestBalance(myWallet);
-
- const balance = await myWallet.getBalances();
-
- console.log(JSON.stringify(balance, null, 2));
-
- const myMerchant = new MerchantBackendConnection(
- "https://backend.test.taler.net/",
- "default",
- "sandbox",
- );
-
- const orderResp = await myMerchant.createOrder(
- "TESTKUDOS:5",
- "hello world",
- "https://example.com/",
- );
-
- console.log("created order with orderId", orderResp.orderId);
-
- const paymentStatus = await myMerchant.checkPayment(orderResp.orderId);
-
- console.log("payment status", paymentStatus);
-
- const contractUrl = paymentStatus.contract_url;
- if (!contractUrl) {
- throw Error("no contract URL in payment response");
- }
-
- const proposalId = await myWallet.downloadProposal(contractUrl);
-
- console.log("proposal id", proposalId);
-
- const checkPayResult = await myWallet.checkPay(proposalId);
-
- console.log("check pay result", checkPayResult);
-
- const confirmPayResult = await myWallet.confirmPay(proposalId, undefined);
-
- console.log("confirmPayResult", confirmPayResult);
-
- const paymentStatus2 = await myMerchant.checkPayment(orderResp.orderId);
-
- console.log("payment status after wallet payment:", paymentStatus2);
-
- if (!paymentStatus2.paid) {
- throw Error("payment did not succeed");
- }
-
- myWallet.stop();
-}
-
-if (require.main === module) {
- main().catch(err => {
- console.error("Failed with exception:");
- console.error(err);
- });
-}
diff --git a/src/index.ts b/src/index.ts
index 44f030d71..6b04c7e4f 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -19,5 +19,4 @@
*/
export { Wallet } from "./wallet";
-
-export { main as runIntegrationTest } from "./headless/taler-wallet-testing";
+export { runIntegrationTest } from "./headless/integrationtest";
diff --git a/tsconfig.json b/tsconfig.json
index 3e6a0aa14..2b1fe6b05 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -39,8 +39,9 @@
"src/dbTypes.ts",
"src/headless/bank.ts",
"src/headless/helpers.ts",
+ "src/headless/integrationtest.ts",
+ "src/headless/merchant.ts",
"src/headless/taler-wallet-cli.ts",
- "src/headless/taler-wallet-testing.ts",
"src/helpers-test.ts",
"src/helpers.ts",
"src/http.ts",