diff options
author | Florian Dold <florian.dold@gmail.com> | 2020-08-19 20:56:10 +0530 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2020-08-19 20:56:40 +0530 |
commit | d9b73a30c1ce67f611f9d605bdf163c3e868f2c2 (patch) | |
tree | ffdbf9d5e1556df5d1a57a8870fa8057c7ba4ef5 /packages/taler-integrationtests/src/harness.ts | |
parent | 082498b20d2a73009bb4193cd95ab409159fb972 (diff) | |
download | wallet-core-d9b73a30c1ce67f611f9d605bdf163c3e868f2c2.tar.xz |
test case for /paid API, implement fault-injected merchant
Diffstat (limited to 'packages/taler-integrationtests/src/harness.ts')
-rw-r--r-- | packages/taler-integrationtests/src/harness.ts | 112 |
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})`); |