summaryrefslogtreecommitdiff
path: root/packages/taler-integrationtests/src/harness.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/taler-integrationtests/src/harness.ts')
-rw-r--r--packages/taler-integrationtests/src/harness.ts112
1 files changed, 64 insertions, 48 deletions
diff --git a/packages/taler-integrationtests/src/harness.ts b/packages/taler-integrationtests/src/harness.ts
index df2d9f2e7..77914af66 100644
--- a/packages/taler-integrationtests/src/harness.ts
+++ b/packages/taler-integrationtests/src/harness.ts
@@ -909,7 +909,62 @@ export interface PrivateOrderStatusQuery {
sessionId?: string;
}
-export class MerchantService {
+export interface MerchantServiceInterface {
+ makeInstanceBaseUrl(instanceName?: string): string;
+ readonly port: number;
+ readonly name: string;
+}
+
+export namespace MerchantPrivateApi {
+ export async function createOrder(
+ merchantService: MerchantServiceInterface,
+ instanceName: string,
+ req: PostOrderRequest,
+ ): Promise<PostOrderResponse> {
+ const baseUrl = merchantService.makeInstanceBaseUrl(instanceName);
+ let url = new URL("private/orders", baseUrl);
+ const resp = await axios.post(url.href, req);
+ return codecForPostOrderResponse().decode(resp.data);
+ }
+
+ export async function queryPrivateOrderStatus(
+ merchantService: MerchantServiceInterface,
+ query: PrivateOrderStatusQuery,
+ ): Promise<MerchantOrderPrivateStatusResponse> {
+ const reqUrl = new URL(
+ `private/orders/${query.orderId}`,
+ merchantService.makeInstanceBaseUrl(query.instance),
+ );
+ if (query.sessionId) {
+ reqUrl.searchParams.set("session_id", query.sessionId);
+ }
+ const resp = await axios.get(reqUrl.href);
+ return codecForMerchantOrderPrivateStatusResponse().decode(resp.data);
+ }
+
+ export async function giveRefund(
+ merchantService: MerchantServiceInterface,
+ r: {
+ instance: string;
+ orderId: string;
+ amount: string;
+ justification: string;
+ }): Promise<{ talerRefundUri: string }> {
+ const reqUrl = new URL(
+ `private/orders/${r.orderId}/refund`,
+ merchantService.makeInstanceBaseUrl(r.instance),
+ );
+ const resp = await axios.post(reqUrl.href, {
+ refund: r.amount,
+ reason: r.justification,
+ });
+ return {
+ talerRefundUri: resp.data.taler_refund_uri,
+ };
+ }
+}
+
+export class MerchantService implements MerchantServiceInterface {
static fromExistingConfig(gc: GlobalTestState, name: string) {
const cfgFilename = gc.testDir + `/merchant-${name}.conf`;
const config = Configuration.load(cfgFilename);
@@ -930,6 +985,14 @@ export class MerchantService {
private configFilename: string,
) {}
+ get port(): number {
+ return this.merchantConfig.httpPort;
+ }
+
+ get name(): string {
+ return this.merchantConfig.name;
+ }
+
async start(): Promise<void> {
await exec(`taler-merchant-dbinit -c "${this.configFilename}"`);
@@ -1005,20 +1068,6 @@ export class MerchantService {
});
}
- async queryPrivateOrderStatus(
- query: PrivateOrderStatusQuery,
- ): Promise<MerchantOrderPrivateStatusResponse> {
- const reqUrl = new URL(
- `private/orders/${query.orderId}`,
- this.makeInstanceBaseUrl(query.instance),
- );
- if (query.sessionId) {
- reqUrl.searchParams.set("session_id", query.sessionId);
- }
- const resp = await axios.get(reqUrl.href);
- return codecForMerchantOrderPrivateStatusResponse().decode(resp.data);
- }
-
makeInstanceBaseUrl(instanceName?: string): string {
if (instanceName === undefined || instanceName === "default") {
return `http://localhost:${this.merchantConfig.httpPort}/`;
@@ -1027,39 +1076,6 @@ export class MerchantService {
}
}
- async giveRefund(r: {
- instance: string;
- orderId: string;
- amount: string;
- justification: string;
- }): Promise<{ talerRefundUri: string }> {
- const reqUrl = new URL(
- `private/orders/${r.orderId}/refund`,
- this.makeInstanceBaseUrl(r.instance),
- );
- const resp = await axios.post(reqUrl.href, {
- refund: r.amount,
- reason: r.justification,
- });
- return {
- talerRefundUri: resp.data.taler_refund_uri,
- };
- }
-
- async createOrder(
- instanceName: string,
- req: PostOrderRequest,
- ): Promise<PostOrderResponse> {
- let url;
- if (instanceName === "default") {
- url = `http://localhost:${this.merchantConfig.httpPort}/private/orders`;
- } else {
- url = `http://localhost:${this.merchantConfig.httpPort}/instances/${instanceName}/private/orders`;
- }
- const resp = await axios.post(url, req);
- return codecForPostOrderResponse().decode(resp.data);
- }
-
async pingUntilAvailable(): Promise<void> {
const url = `http://localhost:${this.merchantConfig.httpPort}/config`;
await pingProc(this.proc, url, `merchant (${this.merchantConfig.name})`);