use new auth token for merchant in integration tests

This commit is contained in:
Florian Dold 2021-02-04 17:13:31 +01:00
parent 83937a7198
commit f262b28812
No known key found for this signature in database
GPG Key ID: D2E4F00F29D02A4B
6 changed files with 111 additions and 29 deletions

View File

@ -1427,6 +1427,7 @@ export class MerchantService implements MerchantServiceInterface {
console.log("adding instance");
const url = `http://localhost:${this.merchantConfig.httpPort}/private/instances`;
await axios.post(url, {
auth_token: instanceConfig.authToken,
payto_uris: instanceConfig.paytoUris,
id: instanceConfig.id,
name: instanceConfig.name,
@ -1462,6 +1463,7 @@ export class MerchantService implements MerchantServiceInterface {
}
export interface MerchantInstanceConfig {
authToken?: string;
id: string;
name: string;
paytoUris: string[];

View File

@ -18,7 +18,7 @@
* Imports.
*/
import { GlobalTestState, MerchantPrivateApi, BankApi } from "./harness";
import { createSimpleTestkudosEnvironment, withdrawViaBank } from "./helpers";
import { createSimpleTestkudosEnvironment } from "./helpers";
/**
* Run test for basic, bank-integrated withdrawal.

View File

@ -22,26 +22,104 @@
/**
* Imports.
*/
import { GlobalTestState } from "./harness";
import { createSimpleTestkudosEnvironment, withdrawViaBank } from "./helpers";
import { CoinConfig, defaultCoinConfig } from "./denomStructures";
import {
BankService,
ExchangeService,
GlobalTestState,
MerchantService,
setupDb,
WalletCli,
} from "./harness";
import { SimpleTestEnvironment } from "./helpers";
const merchantAuthToken = "secret-token:sandbox";
/**
* Run a test case with a simple TESTKUDOS Taler environment, consisting
* of one exchange, one bank and one merchant.
*/
export async function createMyEnvironment(
t: GlobalTestState,
coinConfig: CoinConfig[] = defaultCoinConfig.map((x) => x("TESTKUDOS")),
): Promise<SimpleTestEnvironment> {
const db = await setupDb(t);
const bank = await BankService.create(t, {
allowRegistrations: true,
currency: "TESTKUDOS",
database: db.connStr,
httpPort: 8082,
});
const exchange = ExchangeService.create(t, {
name: "testexchange-1",
currency: "TESTKUDOS",
httpPort: 8081,
database: db.connStr,
});
const merchant = await MerchantService.create(t, {
name: "testmerchant-1",
currency: "TESTKUDOS",
httpPort: 8083,
database: db.connStr,
});
const exchangeBankAccount = await bank.createExchangeAccount(
"MyExchange",
"x",
);
exchange.addBankAccount("1", exchangeBankAccount);
bank.setSuggestedExchange(exchange, exchangeBankAccount.accountPaytoUri);
await bank.start();
await bank.pingUntilAvailable();
exchange.addCoinConfigList(coinConfig);
await exchange.start();
await exchange.pingUntilAvailable();
merchant.addExchange(exchange);
await merchant.start();
await merchant.pingUntilAvailable();
await merchant.addInstance({
id: "default",
name: "Default Instance",
paytoUris: [`payto://x-taler-bank/merchant-default`],
});
console.log("setup done!");
const wallet = new WalletCli(t);
return {
commonDb: db,
exchange,
merchant,
wallet,
bank,
exchangeBankAccount,
};
}
/**
* Run test for basic, bank-integrated withdrawal.
*/
export async function runWallettestingTest(t: GlobalTestState) {
const {
wallet,
bank,
exchange,
merchant,
} = await createSimpleTestkudosEnvironment(t);
const { wallet, bank, exchange, merchant } = await createMyEnvironment(t);
await wallet.runIntegrationTest({
amountToSpend: "TESTKUDOS:5",
amountToWithdraw: "TESTKUDOS:10",
bankBaseUrl: bank.baseUrl,
exchangeBaseUrl: exchange.baseUrl,
merchantApiKey: "sandbox",
merchantAuthToken: merchantAuthToken,
merchantBaseUrl: merchant.makeInstanceBaseUrl(),
});
@ -70,7 +148,7 @@ export async function runWallettestingTest(t: GlobalTestState) {
await wallet.testPay({
amount: "TESTKUDOS:5",
merchantApiKey: "sandbox",
merchantAuthToken: merchantAuthToken,
merchantBaseUrl: merchant.makeInstanceBaseUrl(),
summary: "foo",
});

View File

@ -32,6 +32,7 @@ import { TalerErrorCode } from "../TalerErrorCode";
import { URL } from "../util/url";
import { Logger } from "../util/logging";
import { bytesToString } from "../crypto/talerCrypto";
import { j2s } from "../util/helpers";
const logger = new Logger("NodeHttpLib.ts");

View File

@ -31,8 +31,6 @@ import { createTalerWithdrawReserve } from "./reserves";
import { URL } from "../util/url";
import { Wallet } from "../wallet";
import { Amounts } from "../util/amounts";
import { NodeHttpLib } from "../headless/NodeHttpLib";
import { getDefaultNodeWallet } from "../headless/helpers";
import {
TestPayArgs,
PreparePayResultType,
@ -53,7 +51,7 @@ interface BankWithdrawalResponse {
interface MerchantBackendInfo {
baseUrl: string;
apikey: string;
authToken?: string;
}
/**
@ -109,6 +107,15 @@ export async function withdrawTestBalance(
);
}
function getMerchantAuthHeader(m: MerchantBackendInfo): Record<string, string> {
if (m.authToken) {
return {
"Authorization": `Bearer ${m.authToken}`,
}
}
return {};
}
async function createBankWithdrawalUri(
http: HttpRequestLibrary,
bankBaseUrl: string,
@ -190,9 +197,7 @@ async function refund(
refund: refundAmount,
};
const resp = await http.postJson(reqUrl.href, refundReq, {
headers: {
Authorization: `ApiKey ${merchantBackend.apikey}`,
},
headers: getMerchantAuthHeader(merchantBackend),
});
const r = await readSuccessResponseJsonOrThrow(resp, codecForAny());
const refundUri = r.taler_refund_uri;
@ -221,9 +226,7 @@ async function createOrder(
},
};
const resp = await http.postJson(reqUrl, orderReq, {
headers: {
Authorization: `ApiKey ${merchantBackend.apikey}`,
},
headers: getMerchantAuthHeader(merchantBackend),
});
const r = await readSuccessResponseJsonOrThrow(resp, codecForAny());
const orderId = r.order_id;
@ -241,9 +244,7 @@ async function checkPayment(
const reqUrl = new URL(`/private/orders/${orderId}`, merchantBackend.baseUrl);
reqUrl.searchParams.set("order_id", orderId);
const resp = await http.get(reqUrl.href, {
headers: {
Authorization: `ApiKey ${merchantBackend.apikey}`,
},
headers: getMerchantAuthHeader(merchantBackend),
});
return readSuccessResponseJsonOrThrow(resp, codecForCheckPaymentResponse());
}
@ -337,7 +338,7 @@ export async function runIntegrationTest(
const myMerchant: MerchantBackendInfo = {
baseUrl: args.merchantBaseUrl,
apikey: args.merchantApiKey,
authToken: args.merchantAuthToken,
};
await makePayment(
@ -415,7 +416,7 @@ export async function testPay(
) {
logger.trace("creating order");
const merchant = {
apikey: args.merchantApiKey,
authToken: args.merchantAuthToken,
baseUrl: args.merchantBaseUrl,
};
const orderResp = await createOrder(

View File

@ -689,7 +689,7 @@ export interface GetExchangeTosResult {
export interface TestPayArgs {
merchantBaseUrl: string;
merchantApiKey: string;
merchantAuthToken: string;
amount: string;
summary: string;
}
@ -697,7 +697,7 @@ export interface TestPayArgs {
export const codecForTestPayArgs = (): Codec<TestPayArgs> =>
buildCodecForObject<TestPayArgs>()
.property("merchantBaseUrl", codecForString())
.property("merchantApiKey", codecForString())
.property("merchantAuthToken", codecForString())
.property("amount", codecForString())
.property("summary", codecForString())
.build("TestPayArgs");
@ -706,7 +706,7 @@ export interface IntegrationTestArgs {
exchangeBaseUrl: string;
bankBaseUrl: string;
merchantBaseUrl: string;
merchantApiKey: string;
merchantAuthToken: string;
amountToWithdraw: string;
amountToSpend: string;
}
@ -716,7 +716,7 @@ export const codecForIntegrationTestArgs = (): Codec<IntegrationTestArgs> =>
.property("exchangeBaseUrl", codecForString())
.property("bankBaseUrl", codecForString())
.property("merchantBaseUrl", codecForString())
.property("merchantApiKey", codecForString())
.property("merchantAuthToken", codecForString())
.property("amountToSpend", codecForAmountString())
.property("amountToWithdraw", codecForAmountString())
.build("IntegrationTestArgs");