mirror of
https://github.com/Matysh/houseplan-card
synced 2026-07-31 08:28:31 +00:00
T1: demo/serve.mjs exports check/checkAll/finish — all 48 smokes now assert named facts and exit non-zero on a mismatch or an uncaught in-card exception (verified by breaking the kiosk guard on purpose). Informational values were frozen from a v1.43.1 run and cross-read against the source; timings assert budgets, not exact numbers. T2: new CI job 'smoke' gated on 'frontend', builds a FRESH bundle before running (the committed demo/srv/assets copy is a snapshot) and uploads per-file logs on failure. T3: [auto] now means 'a named failing check exists' and each line names it (43 lines); 72 aspirational markers honestly downgraded to [manual]. Fixed the 'ZERO edit buttons' contradiction (wrong since v1.30.1) and the opening-click line (true again since v1.43.1). Three smokes carried pre-v1.39.0/v1.25 expectations and were testing old behaviour: tap defaults for lights, card-wide tap action, label drag requiring plan mode. DEVELOPMENT.md documents the harness contract.
38 lines
1.9 KiB
JavaScript
38 lines
1.9 KiB
JavaScript
import { launch, checkAll, finish } from './serve.mjs';
|
|
const { page, browser } = await launch();
|
|
const res = await page.evaluate(async () => {
|
|
const out = {};
|
|
const c = window.__card;
|
|
const sr = () => c.shadowRoot || c.renderRoot;
|
|
const grid = () => !!sr().querySelector('rect[fill="url(#hp-grid)"]');
|
|
// Просмотр: сетки нет
|
|
out.noGridInView = !grid();
|
|
// все три редактора: сетка есть
|
|
c._setMode('plan'); await c.updateComplete; out.gridInPlan = grid();
|
|
c._setMode('devices'); await c.updateComplete; out.gridInDevices = grid();
|
|
c._setMode('decor'); await c.updateComplete; out.gridInDecor = grid();
|
|
await new Promise((r) => setTimeout(r, 250)); // transition .room 0.12s
|
|
// decor: комнаты и устройства полупрозрачны
|
|
const room = sr().querySelector('.room');
|
|
out.roomFaded = room ? Number(getComputedStyle(room).opacity) < 0.5 : null;
|
|
const dl = sr().querySelector('.devlayer');
|
|
out.devsFaded = dl ? Number(getComputedStyle(dl).opacity) < 0.5 : null;
|
|
// а декор-слой — нет
|
|
c._curSpaceCfg.decor = [{ id: 'd1', kind: 'line', x1: 0.1, y1: 0.1, x2: 0.3, y2: 0.1, color: '#ff0000', width: 3 }];
|
|
c.requestUpdate(); await c.updateComplete;
|
|
const shp = sr().querySelector('.decorlayer .dshape');
|
|
out.decorNotFaded = shp ? Number(getComputedStyle(shp).opacity) > 0.9 : null;
|
|
// в других редакторах прозрачности нет
|
|
c._setMode('devices'); await c.updateComplete;
|
|
await new Promise((r) => setTimeout(r, 250));
|
|
const room2 = sr().querySelector('.room');
|
|
out.notFadedInDevices = room2 ? Number(getComputedStyle(room2).opacity) > 0.9 : null;
|
|
c._setMode('view'); await c.updateComplete;
|
|
await new Promise((r) => setTimeout(r, 250));
|
|
const room3 = sr().querySelector('.room');
|
|
out.notFadedInView = room3 ? Number(getComputedStyle(room3).opacity) > 0.9 : null;
|
|
return out;
|
|
});
|
|
checkAll(res);
|
|
await finish(browser, res);
|