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:
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`,