From c10e8e8a3a4bf77fe7ca798b27e25e31f8314aa5 Mon Sep 17 00:00:00 2001 From: Marcel Date: Thu, 7 May 2026 13:37:13 +0200 Subject: [PATCH] fix(tests): replace flaky waitFor with synchronous dispatchEvent in edit-page delete spec MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Playwright CDP click latency occasionally pushed past vi.waitFor's 1000ms deadline, making the "opens a confirm dialog" test flaky. Switched to btn.dispatchEvent(new MouseEvent(...)) — the same synchronous in-browser pattern already used in GeschichteEditor.svelte.spec.ts. Co-Authored-By: Claude Sonnet 4.6 --- .../src/routes/documents/[id]/edit/page.svelte.spec.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/frontend/src/routes/documents/[id]/edit/page.svelte.spec.ts b/frontend/src/routes/documents/[id]/edit/page.svelte.spec.ts index 0172d09c..a20d08a0 100644 --- a/frontend/src/routes/documents/[id]/edit/page.svelte.spec.ts +++ b/frontend/src/routes/documents/[id]/edit/page.svelte.spec.ts @@ -61,8 +61,14 @@ describe('Edit page — delete button', () => { context: new Map([[CONFIRM_KEY, mockService]]) }); - await page.getByRole('button', { name: /löschen/i }).click(); - await vi.waitFor(() => expect(capturedOptions).not.toBeNull()); + // Playwright CDP click has latency that can exceed vi.waitFor's 1000ms deadline. + // Dispatching the MouseEvent directly from browser-JS context is synchronous and + // reliably triggers Svelte 5 onclick — same pattern as GeschichteEditor.svelte.spec.ts. + const btn = (await page + .getByRole('button', { name: /löschen/i }) + .element()) as HTMLButtonElement; + btn.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true })); + expect(capturedOptions).not.toBeNull(); expect(capturedOptions).toMatchObject({ destructive: true }); settleRef?.(false); }); -- 2.49.1