aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2021-02-04 17:13:31 +0100
committerFlorian Dold <florian@dold.me>2021-02-04 17:13:31 +0100
commitf262b288123d4198223274a3382b9a1110d3ca33 (patch)
treec94f505c0e4f3a4695f23138ed3b6a76c5befb1d
parent83937a7198c17b267714b159f0e616a2536264d3 (diff)
use new auth token for merchant in integration tests
-rw-r--r--packages/taler-wallet-cli/src/integrationtests/harness.ts2
-rw-r--r--packages/taler-wallet-cli/src/integrationtests/test-tipping.ts2
-rw-r--r--packages/taler-wallet-cli/src/integrationtests/test-wallettesting.ts98
-rw-r--r--packages/taler-wallet-core/src/headless/NodeHttpLib.ts1
-rw-r--r--packages/taler-wallet-core/src/operations/testing.ts29
-rw-r--r--packages/taler-wallet-core/src/types/walletTypes.ts8
6 files changed, 111 insertions, 29 deletions
diff --git a/packages/taler-wallet-cli/src/integrationtests/harness.ts b/packages/taler-wallet-cli/src/integrationtests/harness.ts
index aa09d5f74..ba02776e9 100644
--- a/packages/taler-wallet-cli/src/integrationtests/harness.ts
+++ b/packages/taler-wallet-cli/src/integrationtests/harness.ts
@@ -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[];
diff --git a/packages/taler-wallet-cli/src/integrationtests/test-tipping.ts b/packages/taler-wallet-cli/src/integrationtests/test-tipping.ts
index 21422c42c..a89473313 100644
--- a/packages/taler-wallet-cli/src/integrationtests/test-tipping.ts
+++ b/packages/taler-wallet-cli/src/integrationtests/test-tipping.ts
@@ -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.
diff --git a/packages/taler-wallet-cli/src/integrationtests/test-wallettesting.ts b/packages/taler-wallet-cli/src/integrationtests/test-wallettesting.ts
index cdb954858..65d8aea25 100644
--- a/packages/taler-wallet-cli/src/integrationtests/test-wallettesting.ts
+++ b/packages/taler-wallet-cli/src/integrationtests/test-wallettesting.ts
@@ -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 test for basic, bank-integrated withdrawal.
+ * Run a test case with a simple TESTKUDOS Taler environment, consisting
+ * of one exchange, one bank and one merchant.
*/
-export async function runWallettestingTest(t: GlobalTestState) {
- const {
- wallet,
- bank,
+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,
- } = await createSimpleTestkudosEnvironment(t);
+ wallet,
+ bank,
+ exchangeBankAccount,
+ };
+}
+
+/**
+ * Run test for basic, bank-integrated withdrawal.
+ */
+export async function runWallettestingTest(t: GlobalTestState) {
+ 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",
});
diff --git a/packages/taler-wallet-core/src/headless/NodeHttpLib.ts b/packages/taler-wallet-core/src/headless/NodeHttpLib.ts
index 95626cc4d..dc649a65e 100644
--- a/packages/taler-wallet-core/src/headless/NodeHttpLib.ts
+++ b/packages/taler-wallet-core/src/headless/NodeHttpLib.ts
@@ -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");
diff --git a/packages/taler-wallet-core/src/operations/testing.ts b/packages/taler-wallet-core/src/operations/testing.ts
index 0a83773ab..162e23b31 100644
--- a/packages/taler-wallet-core/src/operations/testing.ts
+++ b/packages/taler-wallet-core/src/operations/testing.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(
diff --git a/packages/taler-wallet-core/src/types/walletTypes.ts b/packages/taler-wallet-core/src/types/walletTypes.ts
index f195918ac..1b98df276 100644
--- a/packages/taler-wallet-core/src/types/walletTypes.ts
+++ b/packages/taler-wallet-core/src/types/walletTypes.ts
@@ -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");