Files
llm-wiki/tests/browser/graph-density-preview.mjs
T
2026-07-12 21:26:08 +08:00

54 lines
2.2 KiB
JavaScript

import assert from "node:assert/strict";
import { createRequire } from "node:module";
import { pathToFileURL } from "node:url";
const require = createRequire(import.meta.url);
const { chromium } = require("playwright");
const html = process.env.GRAPH_DENSITY_PREVIEW_HTML || "";
assert.notEqual(html, "", "GRAPH_DENSITY_PREVIEW_HTML must point at generated HTML");
const browser = await chromium.launch();
try {
const page = await browser.newPage({ viewport: { width: 1440, height: 960 } });
await page.goto(pathToFileURL(html).href);
await page.waitForSelector("[data-llm-wiki-graph-root='true']");
const root = page.locator("[data-llm-wiki-graph-root='true']");
const totalNodes = await page.locator(".node").count();
const fullCards = await page.locator(".node:not(.is-compact):not(.is-point):not(.is-overview)").count();
assert.ok(totalNodes >= 120, `dense fixture should render many nodes, got ${totalNodes}`);
assert.ok(fullCards < totalNodes / 2, "dense fixture should not render every node as a full card");
const compact = page.locator(".node.is-compact").first();
await compact.waitFor();
await compact.hover();
await assertPreviewOpen(page, "compact node should open hover preview");
await page.mouse.move(20, 20);
await waitForPreviewState(page, "closed");
await page.waitForSelector(".node.is-point");
const point = page.locator(".node.is-point").first();
await point.evaluate((element) => {
element.dispatchEvent(new PointerEvent("pointerenter", { bubbles: true, pointerType: "mouse" }));
});
await assertPreviewOpen(page, "point node should open hover preview");
} finally {
await browser.close();
}
async function assertPreviewOpen(page, message) {
await page.waitForSelector(".graph-hover-preview[data-state='open']");
const preview = page.locator(".graph-hover-preview");
await preview.locator(".graph-hover-preview-title").waitFor();
await preview.locator(".graph-hover-preview-type").waitFor();
assert.equal(await preview.locator(".graph-hover-preview-summary").count(), 1, message);
}
async function waitForPreviewState(page, state) {
await page.waitForFunction((state) => {
return document.querySelector(".graph-hover-preview")?.dataset.state === state;
}, state);
}