diff options
author | Florian Dold <florian@dold.me> | 2022-06-10 13:03:47 +0200 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2022-06-10 13:03:47 +0200 |
commit | f57dc7bf7a1e3a14c67512ba67d92fa350c95c0e (patch) | |
tree | c4f94cd64373e787d8b43645e9fdca469e713a98 /packages/taler-wallet-core/src/operations/testing.ts | |
parent | 3ebb1d18154375471e329f2bad40534d858cbe1e (diff) | |
download | wallet-core-f57dc7bf7a1e3a14c67512ba67d92fa350c95c0e.tar.xz |
wallet-core: implement and test forced coin/denom selection
Diffstat (limited to 'packages/taler-wallet-core/src/operations/testing.ts')
-rw-r--r-- | packages/taler-wallet-core/src/operations/testing.ts | 76 |
1 files changed, 55 insertions, 21 deletions
diff --git a/packages/taler-wallet-core/src/operations/testing.ts b/packages/taler-wallet-core/src/operations/testing.ts index 555e2d73d..d609011ca 100644 --- a/packages/taler-wallet-core/src/operations/testing.ts +++ b/packages/taler-wallet-core/src/operations/testing.ts @@ -17,7 +17,12 @@ /** * Imports. */ -import { Logger } from "@gnu-taler/taler-util"; +import { + ConfirmPayResultType, + Logger, + TestPayResult, + WithdrawTestBalanceRequest, +} from "@gnu-taler/taler-util"; import { HttpRequestLibrary, readSuccessResponseJsonOrThrow, @@ -39,6 +44,7 @@ import { InternalWalletState } from "../internal-wallet-state.js"; import { confirmPay, preparePayForUri } from "./pay.js"; import { getBalances } from "./balance.js"; import { applyRefund } from "./refund.js"; +import { checkLogicInvariant } from "../util/invariants.js"; const logger = new Logger("operations/testing.ts"); @@ -82,10 +88,12 @@ function makeBasicAuthHeader(username: string, password: string): string { export async function withdrawTestBalance( ws: InternalWalletState, - amount = "TESTKUDOS:10", - bankBaseUrl = "https://bank.test.taler.net/", - exchangeBaseUrl = "https://exchange.test.taler.net/", + req: WithdrawTestBalanceRequest, ): Promise<void> { + const bankBaseUrl = req.bankBaseUrl; + const amount = req.amount; + const exchangeBaseUrl = req.exchangeBaseUrl; + const bankUser = await registerRandomBankUser(ws.http, bankBaseUrl); logger.trace(`Registered bank user ${JSON.stringify(bankUser)}`); @@ -100,6 +108,9 @@ export async function withdrawTestBalance( ws, wresp.taler_withdraw_uri, exchangeBaseUrl, + { + forcedDenomSel: req.forcedDenomSel, + }, ); await confirmBankWithdrawalUri( @@ -140,7 +151,10 @@ export async function createDemoBankWithdrawalUri( }, { headers: { - Authorization: makeBasicAuthHeader(bankUser.username, bankUser.password), + Authorization: makeBasicAuthHeader( + bankUser.username, + bankUser.password, + ), }, }, ); @@ -163,7 +177,10 @@ async function confirmBankWithdrawalUri( {}, { headers: { - Authorization: makeBasicAuthHeader(bankUser.username, bankUser.password), + Authorization: makeBasicAuthHeader( + bankUser.username, + bankUser.password, + ), }, }, ); @@ -331,12 +348,11 @@ export async function runIntegrationTest( const currency = parsedSpendAmount.currency; logger.info("withdrawing test balance"); - await withdrawTestBalance( - ws, - args.amountToWithdraw, - args.bankBaseUrl, - args.exchangeBaseUrl, - ); + await withdrawTestBalance(ws, { + amount: args.amountToWithdraw, + bankBaseUrl: args.bankBaseUrl, + exchangeBaseUrl: args.exchangeBaseUrl, + }); await ws.runUntilDone(); logger.info("done withdrawing test balance"); @@ -360,12 +376,11 @@ export async function runIntegrationTest( const refundAmount = Amounts.parseOrThrow(`${currency}:6`); const spendAmountThree = Amounts.parseOrThrow(`${currency}:3`); - await withdrawTestBalance( - ws, - Amounts.stringify(withdrawAmountTwo), - args.bankBaseUrl, - args.exchangeBaseUrl, - ); + await withdrawTestBalance(ws, { + amount: Amounts.stringify(withdrawAmountTwo), + bankBaseUrl: args.bankBaseUrl, + exchangeBaseUrl: args.exchangeBaseUrl, + }); // Wait until the withdraw is done await ws.runUntilDone(); @@ -410,7 +425,10 @@ export async function runIntegrationTest( logger.trace("integration test: all done!"); } -export async function testPay(ws: InternalWalletState, args: TestPayArgs) { +export async function testPay( + ws: InternalWalletState, + args: TestPayArgs, +): Promise<TestPayResult> { logger.trace("creating order"); const merchant = { authToken: args.merchantAuthToken, @@ -429,12 +447,28 @@ export async function testPay(ws: InternalWalletState, args: TestPayArgs) { if (!talerPayUri) { console.error("fatal: no taler pay URI received from backend"); process.exit(1); - return; } logger.trace("taler pay URI:", talerPayUri); const result = await preparePayForUri(ws, talerPayUri); if (result.status !== PreparePayResultType.PaymentPossible) { throw Error(`unexpected prepare pay status: ${result.status}`); } - await confirmPay(ws, result.proposalId, undefined); + const r = await confirmPay( + ws, + result.proposalId, + undefined, + args.forcedCoinSel, + ); + if (r.type != ConfirmPayResultType.Done) { + throw Error("payment not done"); + } + const purchase = await ws.db + .mktx((x) => ({ purchases: x.purchases })) + .runReadOnly(async (tx) => { + return tx.purchases.get(result.proposalId); + }); + checkLogicInvariant(!!purchase); + return { + payCoinSelection: purchase.payCoinSelection, + }; } |