/** * 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); });