fix(charts): preserve comparison types and draggable window headings
Keep current lines and historical scatter points in a dedicated comparison chart type. Expose floating headings and use idempotent placement so StrictMode no longer masks production overlap.
This commit is contained in:
@@ -9,6 +9,50 @@ const chart = (index: number) => ({
|
||||
|
||||
test.setTimeout(60_000);
|
||||
|
||||
for (const height of [900, 720]) {
|
||||
test(`multiple chart headings stay accessible and drag on first press at ${height}px height`, async ({ page }, testInfo) => {
|
||||
await page.setViewportSize({ width: 1440, height });
|
||||
const task = investigationFixture(1, "多图窗口拖动核查");
|
||||
const mock = await mockInvestigationPresentation(page, [task]);
|
||||
await selectInvestigation(page, task.title);
|
||||
for (let index = 1; index <= 4; index++) {
|
||||
await mock.emit(task, { ...chart(index), chart_id: `pressure-${index}` });
|
||||
await expect(page.getByRole("dialog", { name: `合成压力分析 ${index}`, exact: true })).toBeVisible();
|
||||
}
|
||||
if (height === 900) await page.setViewportSize({ width: 1440, height: 720 });
|
||||
for (let index = 1; index <= 4; index++) {
|
||||
const popup = page.getByRole("dialog", { name: `合成压力分析 ${index}`, exact: true });
|
||||
const heading = popup.locator(".floating-window-heading");
|
||||
const box = (await heading.boundingBox())!;
|
||||
expect((await popup.boundingBox())!.y).toBe(64 + (index - 1) * (box.height + 8));
|
||||
const target = { x: box.x + box.width / 2, y: box.y + box.height / 2 };
|
||||
expect(await page.evaluate(({ x, y }) => document.elementFromPoint(x, y)?.closest("[data-floating-window]")?.getAttribute("aria-labelledby"), target))
|
||||
.toBe(await popup.getAttribute("aria-labelledby"));
|
||||
}
|
||||
await testInfo.attach(`multiple-charts-before-drag-${height}`, {
|
||||
body: await page.screenshot({ path: testInfo.outputPath(`multiple-charts-before-drag-${height}.png`) }), contentType: "image/png"
|
||||
});
|
||||
for (const index of [1, 4, 2]) {
|
||||
const popup = page.getByRole("dialog", { name: `合成压力分析 ${index}`, exact: true });
|
||||
const before = (await popup.boundingBox())!;
|
||||
const heading = (await popup.locator(".floating-window-heading").boundingBox())!;
|
||||
const start = { x: heading.x + heading.width - 110, y: heading.y + heading.height / 2 };
|
||||
await page.mouse.move(start.x, start.y);
|
||||
await page.mouse.down();
|
||||
await page.mouse.move(start.x - 120, start.y - 32, { steps: 12 });
|
||||
await page.mouse.up();
|
||||
await expect.poll(async () => Math.round((await popup.boundingBox())!.x - before.x)).toBe(-120);
|
||||
await expect.poll(async () => Math.round((await popup.boundingBox())!.y - before.y)).toBe(-32);
|
||||
expect((await popup.boundingBox())!.width).toBe(before.width);
|
||||
expect((await popup.boundingBox())!.height).toBe(before.height);
|
||||
}
|
||||
await testInfo.attach(`multiple-charts-after-drag-${height}`, {
|
||||
body: await page.screenshot({ path: testInfo.outputPath(`multiple-charts-after-drag-${height}.png`) }), contentType: "image/png"
|
||||
});
|
||||
expect(mock.mutations).toEqual([]);
|
||||
});
|
||||
}
|
||||
|
||||
test("live analysis opens a window, preserves its position and respects closing and task switches", async ({ page }, testInfo) => {
|
||||
const task = investigationFixture(1, "图表自动展示核查");
|
||||
const other = investigationFixture(2, "另一项调查");
|
||||
|
||||
Reference in New Issue
Block a user