taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit da4989f6aa179322fa0111146ab18acbc38e667a
parent ca493c76f40e9d9e7c6b28a3bfb528a7ef8362a1
Author: Florian Dold <dold@taler.net>
Date:   Mon,  2 Nov 2026 20:45:28 +0100

taler-harness: wait for peer actions after terms acceptance

Diffstat:
Mpackages/taler-harness/src/integrationtests/test-wallet-web-ui-pwa-peer-tos.ts | 41+++++++++++++++++++++++++++++++++--------
1 file changed, 33 insertions(+), 8 deletions(-)

diff --git a/packages/taler-harness/src/integrationtests/test-wallet-web-ui-pwa-peer-tos.ts b/packages/taler-harness/src/integrationtests/test-wallet-web-ui-pwa-peer-tos.ts @@ -22,6 +22,7 @@ import { withdrawViaBankV4, } from "../harness/environments.js"; import { GlobalTestState } from "../harness/harness.js"; +import type { Locator, Page } from "playwright-core"; import { Stage } from "../stagefright/stage.js"; import { acknowledgeBestEffortStorageForTest, @@ -30,6 +31,28 @@ import { waitForPwa, } from "./wallet-web-ui-test-support.js"; +/** + * Wait until `button` is no longer disabled. + * + * Accepting the exchange's terms comes back to the previous screen before + * wallet-core has re-reported the exchange, so the screen keeps its blocked + * rendering for a moment after the heading is back. `isDisabled()` does not + * wait, so sampling it right away reports a block that is already going away. + */ +async function waitUntilEnabled( + page: Page, + button: Locator, + message: string, +): Promise<void> { + try { + await button + .and(page.locator("button:not([disabled])")) + .waitFor({ timeout: 15_000 }); + } catch (cause) { + throw Error(message, { cause }); + } +} + /** Prove that a prepared peer request survives exchange ToS acceptance. */ export async function runWalletWebUiPwaPeerTosTest(t: GlobalTestState) { const termsDirectory = path.join(t.testDir, "wallet-webui-peer-terms"); @@ -153,11 +176,11 @@ export async function runWalletWebUiPwaPeerTosTest(t: GlobalTestState) { const resumedReceive = page.getByRole("button", { name: "Receive money", }); - if (await resumedReceive.isDisabled()) { - throw Error( - "incoming peer payment stayed blocked after accepting terms", - ); - } + await waitUntilEnabled( + page, + resumedReceive, + "incoming peer payment stayed blocked after accepting terms", + ); await resumedReceive.click(); await page .getByRole("heading", { name: "First incoming browser payment" }) @@ -214,9 +237,11 @@ export async function runWalletWebUiPwaPeerTosTest(t: GlobalTestState) { await page.getByText("You receive", { exact: true }).waitFor(); const create = page.getByRole("button", { name: "Create link" }); await create.waitFor(); - if (await create.isDisabled()) { - throw Error("peer request stayed blocked after accepting terms"); - } + await waitUntilEnabled( + page, + create, + "peer request stayed blocked after accepting terms", + ); await create.click(); await page .getByRole("heading", { name: "Share payment request" })