taler-typescript-core

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

commit 029492fc8dc70bab8ba259dbeddd43a60b81930c
parent a8c9c9b71dccfdae2424ce0e9323970d7dddd5de
Author: Florian Dold <dold@taler.net>
Date:   Tue,  3 Nov 2026 22:14:02 +0100

merchant web UI: test validation dismissal

Check retained field errors, repeated validation, and correction in
Chromium at desktop and mobile widths.

Diffstat:
Mpackages/taler-merchant-webui/contrib/qa/save-feedback-check.mjs | 36++++++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+), 0 deletions(-)

diff --git a/packages/taler-merchant-webui/contrib/qa/save-feedback-check.mjs b/packages/taler-merchant-webui/contrib/qa/save-feedback-check.mjs @@ -246,6 +246,42 @@ try { } await performAction(); await page.waitForSelector(`${form} ${errorSelector}`); + if (screen === "product") { + const setName = (value) => + page.$eval( + "#prod_name_input", + (el, value) => { + el.value = value; + el.dispatchEvent(new Event("input", { bubbles: true })); + }, + value, + ); + await setName(" "); + await performAction(); + await page.waitForSelector("#prod_name_input-error"); + await page.$eval(`${form} [data-dismiss-error]`, (el) => el.click()); + await page.waitForFunction( + () => + !document.querySelector("[data-form-action-footer] [role=alert]"), + ); + assert.equal( + await page.$eval("#prod_name_input", (el) => + el.getAttribute("aria-invalid"), + ), + "true", + ); + assert.match( + await page.$eval("#prod_name_input-error", (el) => el.textContent), + /product name/, + ); + await performAction(); + await page.waitForSelector(`${form} [data-dismiss-error]`); + await setName("Corrected product"); + await performAction(); + await page.waitForFunction( + () => !document.querySelector("#prod_name_input-error"), + ); + } assert.deepEqual(errors, []); console.log( `${screen} ${width}px: persistent feedback, repeated failure and layout passed`,