summaryrefslogtreecommitdiff
path: root/packages/taler-integrationtests/src
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2020-08-24 20:00:15 +0530
committerFlorian Dold <florian.dold@gmail.com>2020-08-24 20:00:15 +0530
commit7deefd5b2d58a9dc2ba91b2b824d4135a4e0837e (patch)
tree00dbbafdff84fd95ff956d852fbb493ada6099dc /packages/taler-integrationtests/src
parent0e88ef9bd2ea76e5b44cc0d4459b9a2e553b8d24 (diff)
downloadwallet-core-7deefd5b2d58a9dc2ba91b2b824d4135a4e0837e.tar.gz
wallet-core-7deefd5b2d58a9dc2ba91b2b824d4135a4e0837e.tar.bz2
wallet-core-7deefd5b2d58a9dc2ba91b2b824d4135a4e0837e.zip
fix wallet DB
Diffstat (limited to 'packages/taler-integrationtests/src')
-rw-r--r--packages/taler-integrationtests/src/test-merchant-refund-api.ts189
1 files changed, 169 insertions, 20 deletions
diff --git a/packages/taler-integrationtests/src/test-merchant-refund-api.ts b/packages/taler-integrationtests/src/test-merchant-refund-api.ts
index 61f08780c..92d635b2c 100644
--- a/packages/taler-integrationtests/src/test-merchant-refund-api.ts
+++ b/packages/taler-integrationtests/src/test-merchant-refund-api.ts
@@ -17,35 +17,150 @@
/**
* Imports.
*/
-import { runTest, GlobalTestState, MerchantPrivateApi } from "./harness";
-import { createSimpleTestkudosEnvironment, withdrawViaBank } from "./helpers";
+import {
+ runTest,
+ GlobalTestState,
+ MerchantPrivateApi,
+ MerchantService,
+ BankServiceInterface,
+ MerchantServiceInterface,
+ WalletCli,
+ ExchangeServiceInterface,
+} from "./harness";
+import {
+ createSimpleTestkudosEnvironment,
+ withdrawViaBank,
+ SimpleTestEnvironment,
+} from "./helpers";
import { PreparePayResultType, URL } from "taler-wallet-core";
import axios from "axios";
-/**
- * Test case for the refund API of the merchant backend.
- */
-runTest(async (t: GlobalTestState) => {
- // Set up test environment
+async function testRefundApiWithFulfillmentUrl(
+ t: GlobalTestState,
+ env: {
+ merchant: MerchantServiceInterface;
+ bank: BankServiceInterface;
+ wallet: WalletCli;
+ exchange: ExchangeServiceInterface;
+ },
+): Promise<void> {
+ const { wallet, bank, exchange, merchant } = env;
- const {
- wallet,
- bank,
- exchange,
- merchant,
- } = await createSimpleTestkudosEnvironment(t);
+ // Set up order.
+ const orderResp = await MerchantPrivateApi.createOrder(merchant, "default", {
+ order: {
+ summary: "Buy me!",
+ amount: "TESTKUDOS:5",
+ fulfillment_url: "https://example.com/fulfillment",
+ },
+ });
- // Withdraw digital cash into the wallet.
+ let orderStatus = await MerchantPrivateApi.queryPrivateOrderStatus(merchant, {
+ orderId: orderResp.order_id,
+ });
- await withdrawViaBank(t, { wallet, bank, exchange, amount: "TESTKUDOS:20" });
+ t.assertTrue(orderStatus.order_status === "unpaid");
- // Set up order.
+ const talerPayUri = orderStatus.taler_pay_uri;
+ const orderId = orderResp.order_id;
+
+ // Make wallet pay for the order
+
+ let preparePayResult = await wallet.preparePay({
+ talerPayUri,
+ });
+
+ t.assertTrue(
+ preparePayResult.status === PreparePayResultType.PaymentPossible,
+ );
+
+ const r2 = await wallet.apiRequest("confirmPay", {
+ 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");
+
+ preparePayResult = await wallet.preparePay({
+ talerPayUri,
+ });
+
+ t.assertTrue(
+ preparePayResult.status === PreparePayResultType.AlreadyConfirmed,
+ );
+
+ await MerchantPrivateApi.giveRefund(merchant, {
+ amount: "TESTKUDOS:5",
+ instance: "default",
+ justification: "foo",
+ orderId: orderResp.order_id,
+ });
+
+ orderStatus = await MerchantPrivateApi.queryPrivateOrderStatus(merchant, {
+ orderId: orderResp.order_id,
+ });
+
+ t.assertTrue(orderStatus.order_status === "paid");
+
+ t.assertAmountEquals(orderStatus.refund_amount, "TESTKUDOS:5");
+
+ // Now test what the merchant gives as a response for various requests to the
+ // public order status URL!
+
+ let publicOrderStatusUrl = new URL(
+ `orders/${orderId}`,
+ merchant.makeInstanceBaseUrl(),
+ );
+ publicOrderStatusUrl.searchParams.set(
+ "h_contract",
+ preparePayResult.contractTermsHash,
+ );
+ let publicOrderStatusResp = await axios.get(publicOrderStatusUrl.href, {
+ validateStatus: () => true,
+ });
+ console.log(publicOrderStatusResp.data);
+ t.assertTrue(publicOrderStatusResp.status === 200);
+ t.assertAmountEquals(publicOrderStatusResp.data.refund_amount, "TESTKUDOS:5");
+
+ publicOrderStatusUrl = new URL(
+ `orders/${orderId}`,
+ merchant.makeInstanceBaseUrl(),
+ );
+
+ publicOrderStatusResp = await axios.get(publicOrderStatusUrl.href, {
+ validateStatus: () => true,
+ });
+ console.log(publicOrderStatusResp.data);
+ // We didn't give any authentication, so we should get a fulfillment URL back
+ t.assertTrue(publicOrderStatusResp.status === 202);
+ const fu = publicOrderStatusResp.data.fulfillment_url;
+ t.assertTrue(typeof fu === "string" && fu.startsWith("https://example.com"));
+}
+
+async function testRefundApiWithFulfillmentMessage(
+ t: GlobalTestState,
+ env: {
+ merchant: MerchantServiceInterface;
+ bank: BankServiceInterface;
+ wallet: WalletCli;
+ exchange: ExchangeServiceInterface;
+ },
+): Promise<void> {
+ const { wallet, bank, exchange, merchant } = env;
+
+ // Set up order.
const orderResp = await MerchantPrivateApi.createOrder(merchant, "default", {
order: {
summary: "Buy me!",
amount: "TESTKUDOS:5",
- fulfillment_url: "taler://fulfillment-success/thx",
+ fulfillment_message: "Thank you for buying foobar",
},
});
@@ -131,7 +246,41 @@ runTest(async (t: GlobalTestState) => {
publicOrderStatusResp = await axios.get(publicOrderStatusUrl.href, {
validateStatus: () => true,
});
- console.log(publicOrderStatusResp.data)
- // We didn't give any authentication, so this should be forbidden
- t.assertTrue(publicOrderStatusResp.status === 403);
+ console.log(publicOrderStatusResp.data);
+ // We didn't give any authentication, so we should get a fulfillment URL back
+ t.assertTrue(publicOrderStatusResp.status === 202);
+ const fu = publicOrderStatusResp.data.fulfillment_message;
+ t.assertTrue(typeof fu === "string" && fu.startsWith("Thank you"));
+}
+
+/**
+ * Test case for the refund API of the merchant backend.
+ */
+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" });
+
+ await testRefundApiWithFulfillmentUrl(t, {
+ wallet,
+ bank,
+ exchange,
+ merchant,
+ });
+
+ await testRefundApiWithFulfillmentMessage(t, {
+ wallet,
+ bank,
+ exchange,
+ merchant,
+ });
});