introducing a health check for demo.taler.net.
This commit is contained in:
parent
ebfc79756f
commit
ba995882ba
@ -118,6 +118,10 @@ export async function delayMs(ms: number): Promise<void> {
|
||||
});
|
||||
}
|
||||
|
||||
export interface WithAuthorization {
|
||||
Authorization?: string,
|
||||
} ;
|
||||
|
||||
interface WaitResult {
|
||||
code: number | null;
|
||||
signal: NodeJS.Signals | null;
|
||||
@ -1258,16 +1262,18 @@ export namespace MerchantPrivateApi {
|
||||
merchantService: MerchantServiceInterface,
|
||||
instanceName: string,
|
||||
req: PostOrderRequest,
|
||||
withAuthorization: WithAuthorization = {},
|
||||
): Promise<PostOrderResponse> {
|
||||
const baseUrl = merchantService.makeInstanceBaseUrl(instanceName);
|
||||
let url = new URL("private/orders", baseUrl);
|
||||
const resp = await axios.post(url.href, req);
|
||||
const resp = await axios.post(url.href, req, { headers: withAuthorization });
|
||||
return codecForPostOrderResponse().decode(resp.data);
|
||||
}
|
||||
|
||||
export async function queryPrivateOrderStatus(
|
||||
merchantService: MerchantServiceInterface,
|
||||
query: PrivateOrderStatusQuery,
|
||||
withAuthorization: WithAuthorization = {},
|
||||
): Promise<MerchantOrderPrivateStatusResponse> {
|
||||
const reqUrl = new URL(
|
||||
`private/orders/${query.orderId}`,
|
||||
@ -1276,7 +1282,7 @@ export namespace MerchantPrivateApi {
|
||||
if (query.sessionId) {
|
||||
reqUrl.searchParams.set("session_id", query.sessionId);
|
||||
}
|
||||
const resp = await axios.get(reqUrl.href);
|
||||
const resp = await axios.get(reqUrl.href, { headers: withAuthorization });
|
||||
return codecForMerchantOrderPrivateStatusResponse().decode(resp.data);
|
||||
}
|
||||
|
||||
|
@ -49,6 +49,7 @@ import {
|
||||
MerchantServiceInterface,
|
||||
MerchantPrivateApi,
|
||||
HarnessExchangeBankAccount,
|
||||
WithAuthorization,
|
||||
} from "./harness.js";
|
||||
import { WalletApiOperation } from "@gnu-taler/taler-wallet-core";
|
||||
|
||||
@ -345,6 +346,7 @@ export async function makeTestPayment(
|
||||
order: Partial<ContractTerms>;
|
||||
instance?: string;
|
||||
},
|
||||
auth: WithAuthorization = {},
|
||||
): Promise<void> {
|
||||
// Set up order.
|
||||
|
||||
@ -353,11 +355,11 @@ export async function makeTestPayment(
|
||||
|
||||
const orderResp = await MerchantPrivateApi.createOrder(merchant, instance, {
|
||||
order: args.order,
|
||||
});
|
||||
}, auth);
|
||||
|
||||
let orderStatus = await MerchantPrivateApi.queryPrivateOrderStatus(merchant, {
|
||||
orderId: orderResp.order_id,
|
||||
});
|
||||
}, auth);
|
||||
|
||||
t.assertTrue(orderStatus.order_status === "unpaid");
|
||||
|
||||
@ -385,7 +387,7 @@ export async function makeTestPayment(
|
||||
orderStatus = await MerchantPrivateApi.queryPrivateOrderStatus(merchant, {
|
||||
orderId: orderResp.order_id,
|
||||
instance,
|
||||
});
|
||||
}, auth);
|
||||
|
||||
t.assertTrue(orderStatus.order_status === "paid");
|
||||
}
|
||||
|
@ -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 {
|
||||
GlobalTestState,
|
||||
BankApi,
|
||||
WalletCli,
|
||||
BankAccessApi
|
||||
} from "./harness";
|
||||
import {
|
||||
createSimpleTestkudosEnvironment,
|
||||
withdrawViaBank,
|
||||
makeTestPayment,
|
||||
} from "./helpers";
|
||||
import { WalletApiOperation } from "@gnu-taler/taler-wallet-core";
|
||||
|
||||
/**
|
||||
* Run test for basic, bank-integrated withdrawal and payment.
|
||||
*/
|
||||
export async function runPaymentDemoTest(t: GlobalTestState) {
|
||||
|
||||
// Withdraw digital cash into the wallet.
|
||||
let bankInterface = {
|
||||
baseUrl: "https://bank.demo.taler.net/",
|
||||
port: 0 // unused.
|
||||
};
|
||||
let user = await BankApi.createRandomBankUser(bankInterface);
|
||||
let wop = await BankAccessApi.createWithdrawalOperation(bankInterface, user, "KUDOS:20");
|
||||
|
||||
let wallet = new WalletCli(t);
|
||||
await wallet.client.call(WalletApiOperation.GetWithdrawalDetailsForUri, {
|
||||
talerWithdrawUri: wop.taler_withdraw_uri,
|
||||
});
|
||||
|
||||
await wallet.runPending();
|
||||
|
||||
// Confirm it
|
||||
|
||||
await BankApi.confirmWithdrawalOperation(bankInterface, user, wop);
|
||||
|
||||
// Withdraw
|
||||
|
||||
await wallet.client.call(WalletApiOperation.AcceptBankIntegratedWithdrawal, {
|
||||
exchangeBaseUrl: "https://exchange.demo.taler.net/",
|
||||
talerWithdrawUri: wop.taler_withdraw_uri,
|
||||
});
|
||||
await wallet.runUntilDone();
|
||||
|
||||
let balanceBefore = await wallet.client.call(WalletApiOperation.GetBalances, {});
|
||||
t.assertTrue(balanceBefore["balances"].length == 1);
|
||||
|
||||
const order = {
|
||||
summary: "Buy me!",
|
||||
amount: "KUDOS:5",
|
||||
fulfillment_url: "taler://fulfillment-success/thx",
|
||||
};
|
||||
|
||||
let merchant = {
|
||||
makeInstanceBaseUrl: function(instanceName?: string) {
|
||||
return "https://backend.demo.taler.net/instances/donations/";
|
||||
},
|
||||
port: 0,
|
||||
name: "donations",
|
||||
};
|
||||
|
||||
t.assertTrue("TALER_MERCHANT_TOKEN" in process.env);
|
||||
|
||||
await makeTestPayment(
|
||||
t,
|
||||
{
|
||||
merchant, wallet, order
|
||||
},
|
||||
{
|
||||
"Authorization": `Bearer ${process.env["TALER_MERCHANT_TOKEN"]}`,
|
||||
});
|
||||
|
||||
await wallet.runUntilDone();
|
||||
|
||||
let balanceAfter = await wallet.client.call(WalletApiOperation.GetBalances, {});
|
||||
t.assertTrue(balanceAfter["balances"].length == 1);
|
||||
t.assertTrue(balanceBefore["balances"][0]["available"] > balanceAfter["balances"][0]["available"]);
|
||||
}
|
||||
runPaymentDemoTest.suites = ["buildbot"];
|
@ -22,6 +22,7 @@ import {
|
||||
TestRunResult,
|
||||
} from "./harness";
|
||||
import { runPaymentTest } from "./test-payment";
|
||||
import { runPaymentDemoTest } from "./test-payment-on-demo";
|
||||
import * as fs from "fs";
|
||||
import * as path from "path";
|
||||
import * as os from "os";
|
||||
@ -115,6 +116,7 @@ const allTests: TestMainFunction[] = [
|
||||
runPaymentIdempotencyTest,
|
||||
runPaymentMultipleTest,
|
||||
runPaymentTest,
|
||||
runPaymentDemoTest,
|
||||
runPaymentTransientTest,
|
||||
runPayPaidTest,
|
||||
runPaywallFlowTest,
|
||||
|
Loading…
Reference in New Issue
Block a user