From 9ec6018efef9b45ee42ccda33ed7093881534141 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Fri, 4 Sep 2020 02:20:20 +0530 Subject: test recoup, fix bug in reserve state machine, fix bug in recoup-refresh --- packages/taler-integrationtests/src/helpers.ts | 85 +++++++++++++++++++++++++- 1 file changed, 84 insertions(+), 1 deletion(-) (limited to 'packages/taler-integrationtests/src/helpers.ts') 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 { + 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, + instance?: string +}): Promise { + // 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 -- cgit v1.2.3