summaryrefslogtreecommitdiff
path: root/packages/taler-integrationtests/src
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2020-09-04 02:20:20 +0530
committerFlorian Dold <florian.dold@gmail.com>2020-09-04 02:20:20 +0530
commit9ec6018efef9b45ee42ccda33ed7093881534141 (patch)
tree3b7b0a8bb78cb959531f965152c8307607a05d92 /packages/taler-integrationtests/src
parent54c0d1c2589951be26a83575b77dbb80f3a08b79 (diff)
downloadwallet-core-9ec6018efef9b45ee42ccda33ed7093881534141.tar.gz
wallet-core-9ec6018efef9b45ee42ccda33ed7093881534141.tar.bz2
wallet-core-9ec6018efef9b45ee42ccda33ed7093881534141.zip
test recoup, fix bug in reserve state machine, fix bug in recoup-refresh
Diffstat (limited to 'packages/taler-integrationtests/src')
-rw-r--r--packages/taler-integrationtests/src/harness.ts44
-rw-r--r--packages/taler-integrationtests/src/helpers.ts85
-rw-r--r--packages/taler-integrationtests/src/test-payment.ts57
3 files changed, 140 insertions, 46 deletions
diff --git a/packages/taler-integrationtests/src/harness.ts b/packages/taler-integrationtests/src/harness.ts
index cc30df618..dbb416b48 100644
--- a/packages/taler-integrationtests/src/harness.ts
+++ b/packages/taler-integrationtests/src/harness.ts
@@ -69,6 +69,9 @@ import {
ApplyRefundRequest,
codecForApplyRefundResponse,
codecForAny,
+ CoinDumpJson,
+ ForceExchangeUpdateRequest,
+ ForceRefreshRequest,
} from "taler-wallet-core";
import { URL } from "url";
import axios, { AxiosError } from "axios";
@@ -1077,6 +1080,23 @@ export class ExchangeService implements ExchangeServiceInterface {
);
}
+ async revokeDenomination(denomPubHash: string) {
+ if (this.isRunning()) {
+ throw Error("exchange must be stopped when revoking denominations");
+ }
+ await runCommand(
+ this.globalState,
+ "exchange-keyup",
+ "taler-exchange-keyup",
+ [
+ "-c", this.configFilename,
+ ...this.timetravelArgArr,
+ "--revoke",
+ denomPubHash,
+ ],
+ );
+ }
+
async start(): Promise<void> {
if (this.isRunning()) {
throw Error("exchange is already running");
@@ -1540,6 +1560,14 @@ export class WalletCli {
throw new OperationFailedError(resp.error);
}
+ async dumpCoins(): Promise<CoinDumpJson> {
+ const resp = await this.apiRequest("dumpCoins", {});
+ if (resp.type === "response") {
+ return codecForAny().decode(resp.result);
+ }
+ throw new OperationFailedError(resp.error);
+ }
+
async addExchange(req: AddExchangeRequest): Promise<void> {
const resp = await this.apiRequest("addExchange", req);
if (resp.type === "response") {
@@ -1548,6 +1576,22 @@ export class WalletCli {
throw new OperationFailedError(resp.error);
}
+ async forceUpdateExchange(req: ForceExchangeUpdateRequest): Promise<void> {
+ const resp = await this.apiRequest("forceUpdateExchange", req);
+ if (resp.type === "response") {
+ return;
+ }
+ throw new OperationFailedError(resp.error);
+ }
+
+ async forceRefresh(req: ForceRefreshRequest): Promise<void> {
+ const resp = await this.apiRequest("forceRefresh", req);
+ if (resp.type === "response") {
+ return;
+ }
+ throw new OperationFailedError(resp.error);
+ }
+
async listExchanges(): Promise<ExchangesListRespose> {
const resp = await this.apiRequest("listExchanges", {});
if (resp.type === "response") {
diff --git a/packages/taler-integrationtests/src/helpers.ts b/packages/taler-integrationtests/src/helpers.ts
index d47d5f7b0..ca9b57abf 100644
--- a/packages/taler-integrationtests/src/helpers.ts
+++ b/packages/taler-integrationtests/src/helpers.ts
@@ -36,8 +36,9 @@ import {
MerchantServiceInterface,
BankApi,
BankAccessApi,
+ MerchantPrivateApi,
} from "./harness";
-import { AmountString } from "taler-wallet-core";
+import { AmountString, Duration, PreparePayResultType, ConfirmPayResultType, ContractTerms } from "taler-wallet-core";
import { FaultInjectedMerchantService } from "./faultInjection";
export interface SimpleTestEnvironment {
@@ -280,3 +281,85 @@ export async function withdrawViaBank(
const balApiResp = await wallet.apiRequest("getBalances", {});
t.assertTrue(balApiResp.type === "response");
}
+
+export async function applyTimeTravel(
+ timetravelDuration: Duration,
+ s: {
+ exchange?: ExchangeService;
+ merchant?: MerchantService;
+ wallet?: WalletCli;
+ },
+): Promise<void> {
+ if (s.exchange) {
+ await s.exchange.stop();
+ s.exchange.setTimetravel(timetravelDuration);
+ await s.exchange.start();
+ await s.exchange.pingUntilAvailable();
+ }
+
+ if (s.merchant) {
+ await s.merchant.stop();
+ s.merchant.setTimetravel(timetravelDuration);
+ await s.merchant.start();
+ await s.merchant.pingUntilAvailable();
+ }
+
+ if (s.wallet) {
+ s.wallet.setTimetravel(timetravelDuration);
+ }
+}
+
+
+/**
+ * Make a simple payment and check that it succeeded.
+ */
+export async function makeTestPayment(t: GlobalTestState, args: {
+ merchant: MerchantServiceInterface,
+ wallet: WalletCli,
+ order: Partial<ContractTerms>,
+ instance?: string
+}): Promise<void> {
+ // Set up order.
+
+ const { wallet, merchant } = args;
+ const instance = args.instance ?? "default";
+
+ const orderResp = await MerchantPrivateApi.createOrder(merchant, instance, {
+ order: {
+ summary: "Buy me!",
+ amount: "TESTKUDOS:5",
+ fulfillment_url: "taler://fulfillment-success/thx",
+ },
+ });
+
+ let orderStatus = await MerchantPrivateApi.queryPrivateOrderStatus(merchant, {
+ orderId: orderResp.order_id,
+ });
+
+ t.assertTrue(orderStatus.order_status === "unpaid");
+
+ // Make wallet pay for the order
+
+ const preparePayResult = await wallet.preparePay({
+ talerPayUri: orderStatus.taler_pay_uri,
+ });
+
+ t.assertTrue(
+ preparePayResult.status === PreparePayResultType.PaymentPossible,
+ );
+
+ const r2 = await wallet.confirmPay({
+ proposalId: preparePayResult.proposalId,
+ });
+
+ t.assertTrue(r2.type === ConfirmPayResultType.Done);
+
+ // Check if payment was successful.
+
+ orderStatus = await MerchantPrivateApi.queryPrivateOrderStatus(merchant, {
+ orderId: orderResp.order_id,
+ instance,
+ });
+
+ t.assertTrue(orderStatus.order_status === "paid");
+} \ No newline at end of file
diff --git a/packages/taler-integrationtests/src/test-payment.ts b/packages/taler-integrationtests/src/test-payment.ts
index a099e9f23..4f44fc146 100644
--- a/packages/taler-integrationtests/src/test-payment.ts
+++ b/packages/taler-integrationtests/src/test-payment.ts
@@ -20,14 +20,15 @@
import {
runTest,
GlobalTestState,
- MerchantPrivateApi,
- WalletCli,
} from "./harness";
-import { createSimpleTestkudosEnvironment, withdrawViaBank } from "./helpers";
-import { PreparePayResultType } from "taler-wallet-core";
+import {
+ createSimpleTestkudosEnvironment,
+ withdrawViaBank,
+ makeTestPayment,
+} from "./helpers";
/**
- * Run test for basic, bank-integrated withdrawal.
+ * Run test for basic, bank-integrated withdrawal and payment.
*/
runTest(async (t: GlobalTestState) => {
// Set up test environment
@@ -43,45 +44,11 @@ runTest(async (t: GlobalTestState) => {
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",
- },
- });
-
- let orderStatus = await MerchantPrivateApi.queryPrivateOrderStatus(merchant, {
- orderId: orderResp.order_id,
- });
-
- t.assertTrue(orderStatus.order_status === "unpaid");
-
- // Make wallet pay for the order
-
- const preparePayResult = await wallet.preparePay({
- talerPayUri: orderStatus.taler_pay_uri,
- });
-
- t.assertTrue(
- preparePayResult.status === PreparePayResultType.PaymentPossible,
- );
-
- const r2 = await wallet.apiRequest("confirmPay", {
- // FIXME: should be validated, don't cast!
- proposalId: preparePayResult.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 order = {
+ summary: "Buy me!",
+ amount: "TESTKUDOS:5",
+ fulfillment_url: "taler://fulfillment-success/thx",
+ };
- await t.shutdown();
+ await makeTestPayment(t, { wallet, merchant, order });
});