use new auth token for merchant in integration tests
This commit is contained in:
parent
83937a7198
commit
f262b28812
@ -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[];
|
||||
|
@ -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.
|
||||
|
@ -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",
|
||||
});
|
||||
|
@ -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");
|
||||
|
||||
|
@ -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(
|
||||
|
@ -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");
|
||||
|
Loading…
Reference in New Issue
Block a user