Files
web-cad/frontend/playwright-tests/one-engine-proof.test.ts
T

61 lines
2.5 KiB
TypeScript
Raw Normal View History

/**
* CAD-14 Beweis-Test: Der Workflow, den der Nutzer jeden Tag macht.
* 1. Werkzeug waehlen (Sidebar), 2. zeichnen (2 Klicks),
* 3. EXAKT EIN Element an der geklickten Position erwarten.
* ROT-Zustand (jetzt): 2 Elemente (Legacy + V2 je eins) = Doppelung belegt.
* GRUEN nach Schnitt: 1 Element, Position = Klickposition.
*/
import { test, expect } from '@playwright/test';
const BASE_URL = process.env.FRONTEND_URL || 'https://web-cad-neu.server.media-on.de';
interface VerifyWindow {
__v2Debug?: { info: () => { cachedElements: number; ready: boolean } | null };
}
test('zeichnen erzeugt GENAU EIN Element an der Klick-Position', async ({ page }) => {
await page.goto(BASE_URL);
await page.fill('input[type=email]', 'admin@media-on.de');
await page.fill('input[type=password]', 'WebCAD2026!');
await page.click('button[type=submit]');
await page.waitForTimeout(3000);
// Neues leeres Projekt anlegen (damit der Count deterministisch ist)
const newBtn = page.locator('button:has-text("Neu"), [title*="Neues Projekt"]').first();
const cards = await page.$$('.dashboard-project-card, [class*=project-card]');
if (cards.length === 0) { await newBtn.click(); } // Dashboard-Variante
// Falls Dashboard: einfach das erste Projekt oeffnen und Delta messen
if (cards.length > 0) { await cards[0].click(); }
await page.waitForTimeout(2500);
const verify = () => page.evaluate(() => {
const w = window as unknown as VerifyWindow;
return w.__v2Debug?.info?.() ?? null;
});
const before = await verify();
const beforeCount = before?.cachedElements ?? -1;
expect(beforeCount, 'Pixi muss ready sein').toBeGreaterThanOrEqual(0);
// Linie-Werkzeug aus der SIDEBAR (der richtige Ort)
await page.locator('[data-tool="line"]').first().click();
await page.waitForTimeout(300);
// Auf die Zeichenflaeche klicken: zwei Klicks = eine Linie
const canvas = page.locator('canvas').last();
const box = await canvas.boundingBox();
if (!box) throw new Error('Kein Canvas gefunden');
const cx = box.x + box.width / 2;
const cy = box.y + box.height / 2;
await page.mouse.click(cx, cy);
await page.waitForTimeout(200);
await page.mouse.click(cx + 120, cy + 60);
await page.waitForTimeout(600);
const after = await verify();
const afterCount = after?.cachedElements ?? -1;
// ABNAHME: genau +1 Element (jetzt faehlt der Test, weil 2 entstehen)
expect(afterCount - beforeCount, `Erwartet genau 1 neues Element, got ${afterCount - beforeCount}`).toBe(1);
});