117 lines
4.5 KiB
JavaScript
117 lines
4.5 KiB
JavaScript
/**
|
|
* Verifies the read-only checklist preview in the task detail (overview tab).
|
|
* Adds a task with a checklist via WS, navigates to its detail, asserts the
|
|
* preview card with all 3 steps is in the DOM.
|
|
*/
|
|
import { setup, ws, cleanup } from "./e2e-helpers.mjs";
|
|
|
|
const RUN = Date.now().toString(36);
|
|
const OBJ_NAME = `Checklist Preview ${RUN}`;
|
|
const STEPS = ["Drain water", "Replace filter cartridge", "Run flush cycle"];
|
|
|
|
const log = (...a) => console.log(...a);
|
|
let pass = 0, fail = 0;
|
|
const check = (label, ok, detail) => {
|
|
if (ok) { pass++; log(` ✓ ${label}`); }
|
|
else { fail++; log(` ✗ ${label}${detail ? " — " + detail : ""}`); }
|
|
};
|
|
|
|
const PANEL_EVAL = `
|
|
window._ha=document.querySelector('home-assistant');
|
|
window._main=_ha.shadowRoot.querySelector('home-assistant-main');
|
|
window._drawer=_main.shadowRoot.querySelector('ha-drawer');
|
|
window._resolver=_drawer.querySelector('partial-panel-resolver');
|
|
window._custom=_resolver.querySelector('ha-panel-custom');
|
|
window._panel=_custom.querySelector('maintenance-supporter-panel');
|
|
window._sr=_panel.shadowRoot;
|
|
`;
|
|
|
|
async function main() {
|
|
const { browser, ctx, page } = await setup({ mobile: false });
|
|
|
|
log("\n== Step 1: enable Checklists feature");
|
|
await ws(page, {
|
|
type: "maintenance_supporter/global/update",
|
|
settings: { advanced_checklists_visible: true },
|
|
});
|
|
|
|
log("\n== Step 2: create object + task with checklist");
|
|
const obj = await ws(page, { type: "maintenance_supporter/object/create", name: OBJ_NAME });
|
|
const taskRes = await ws(page, {
|
|
type: "maintenance_supporter/task/create",
|
|
entry_id: obj.entry_id, name: "Filter Maintenance", interval_days: 30,
|
|
checklist: STEPS,
|
|
});
|
|
log(" created task_id =", taskRes.task_id);
|
|
|
|
log("\n== Step 3: wait for panel to refresh + select the task");
|
|
await page.waitForTimeout(2500);
|
|
await page.evaluate(({ eid, tid, fn }) => {
|
|
eval(fn);
|
|
window._panel._selectedEntryId = eid;
|
|
window._panel._selectedTaskId = tid;
|
|
window._panel._view = "task";
|
|
window._panel.requestUpdate();
|
|
}, { eid: obj.entry_id, tid: taskRes.task_id, fn: PANEL_EVAL });
|
|
await page.waitForTimeout(1500);
|
|
|
|
log("\n== Step 4: inspect overview tab DOM for the checklist preview card");
|
|
const result = await page.evaluate(({ fn }) => {
|
|
eval(fn);
|
|
const sr = window._sr;
|
|
const card = sr.querySelector(".checklist-preview-card");
|
|
const header = card?.querySelector(".checklist-preview-header")?.textContent?.trim();
|
|
const items = [...(card?.querySelectorAll("li") || [])].map((li) => li.textContent?.trim());
|
|
return {
|
|
hasCard: !!card,
|
|
header,
|
|
items,
|
|
cardOffsetTop: card?.offsetTop,
|
|
};
|
|
}, { fn: PANEL_EVAL });
|
|
log(" hasCard:", result.hasCard);
|
|
log(" header:", JSON.stringify(result.header));
|
|
log(" items:", JSON.stringify(result.items));
|
|
log(" offsetTop:", result.cardOffsetTop);
|
|
|
|
check("preview card rendered in task detail", result.hasCard === true, "");
|
|
check("header shows count = 3", result.header?.includes("(3)"), `header="${result.header}"`);
|
|
check("all 3 items rendered in order",
|
|
JSON.stringify(result.items) === JSON.stringify(STEPS),
|
|
`items=${JSON.stringify(result.items)}`);
|
|
|
|
await page.screenshot({ path: "checklist-preview.png", fullPage: false });
|
|
log(" saved checklist-preview.png");
|
|
|
|
log("\n== Step 5: verify preview is HIDDEN when checklist is empty");
|
|
const obj2 = await ws(page, { type: "maintenance_supporter/object/create", name: `Empty ${RUN}` });
|
|
const t2 = await ws(page, {
|
|
type: "maintenance_supporter/task/create",
|
|
entry_id: obj2.entry_id, name: "Bare Task", interval_days: 7,
|
|
});
|
|
await page.waitForTimeout(1500);
|
|
await page.evaluate(({ eid, tid, fn }) => {
|
|
eval(fn);
|
|
window._panel._selectedEntryId = eid;
|
|
window._panel._selectedTaskId = tid;
|
|
window._panel._view = "task";
|
|
window._panel.requestUpdate();
|
|
}, { eid: obj2.entry_id, tid: t2.task_id, fn: PANEL_EVAL });
|
|
await page.waitForTimeout(1000);
|
|
const empty = await page.evaluate(({ fn }) => {
|
|
eval(fn);
|
|
return !!window._sr.querySelector(".checklist-preview-card");
|
|
}, { fn: PANEL_EVAL });
|
|
check("preview hidden for tasks without checklist", empty === false, "");
|
|
|
|
log("\n== Cleanup");
|
|
await ws(page, { type: "maintenance_supporter/object/delete", entry_id: obj.entry_id });
|
|
await ws(page, { type: "maintenance_supporter/object/delete", entry_id: obj2.entry_id });
|
|
await cleanup(browser, ctx);
|
|
|
|
log(`\n=== ${pass} passed, ${fail} failed ===`);
|
|
process.exit(fail === 0 ? 0 : 1);
|
|
}
|
|
|
|
main().catch((e) => { console.error(e); process.exit(1); });
|