|
|
@@ -533,6 +533,32 @@ const flush = await page.evaluate(() => {
|
|
|
});
|
|
|
ok("windows end flush at the dock strip (no dead space)", Math.abs(flush) <= 1, String(flush));
|
|
|
|
|
|
+// --- 14b. power on: the two-step dialog must actually fire the request ---------
|
|
|
+// (a bug made every two-step confirm close the dialog and do nothing)
|
|
|
+await page.evaluate(() => {
|
|
|
+ const c = [...document.querySelectorAll("#clusters .chip")].find((x) => x.textContent.includes("fake"));
|
|
|
+ if (c) c.click();
|
|
|
+});
|
|
|
+await page.waitForTimeout(300);
|
|
|
+let powerReq = false;
|
|
|
+page.on("request", (r) => { if (r.method() === "POST" && r.url().includes("/api/power")) powerReq = true; });
|
|
|
+await page.click("#power-fake");
|
|
|
+await page.waitForSelector("#dlg:not([hidden])");
|
|
|
+await page.fill("#dlg-type", "fake");
|
|
|
+await page.click("#dlg-ok");
|
|
|
+// the power job lands in the jobs window as its own "power" row
|
|
|
+let powerRow = false;
|
|
|
+try {
|
|
|
+ await page.waitForFunction(
|
|
|
+ () => [...document.querySelectorAll("#jobs .jkind")].some((k) => k.textContent.trim() === "power"),
|
|
|
+ null,
|
|
|
+ { timeout: 8000 },
|
|
|
+ );
|
|
|
+ powerRow = true;
|
|
|
+} catch { /* row never appeared */ }
|
|
|
+ok("power on: confirm sends the power request", powerReq);
|
|
|
+ok("power on: the power job shows in the jobs window", powerRow);
|
|
|
+
|
|
|
// --- 15. window layout survives a reload (localStorage) ---------------------------
|
|
|
await page.evaluate(() => {
|
|
|
const t = document.querySelector("#win-topo");
|