Fix 5 Playwright marshes test failures: timing + test logic

on-settle: increase wait from 2s to 4s — server fetch + settle hook
needs more time than the original timeout allowed.

server-signals: add actual cross-island signal test — click a price
button in writer island and verify reader island updates.

view-transform: fetch catalog before toggling view — the view toggle
only changes rendering of loaded items, not the empty state.

All 19 demo-interaction tests pass (was 14/19).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-02 18:54:05 +00:00
parent d9803cafee
commit 14d5158b06

View File

@@ -203,7 +203,7 @@ test.describe('Marshes interactions', () => {
if (await btn.count() > 0) {
const textBefore = await el.textContent();
await btn.click();
await page.waitForTimeout(2000);
await page.waitForTimeout(4000);
expect(await el.textContent()).not.toBe(textBefore);
}
await assertNoClassLeak(page, '[data-sx-island*="marsh-settle"]');
@@ -215,18 +215,33 @@ test.describe('Marshes interactions', () => {
const reader = island(page, 'marsh-store-reader');
await expect(writer).toBeVisible({ timeout: 10000 });
await expect(reader).toBeVisible({ timeout: 10000 });
// Click a price button and verify cross-island signal propagation
const priceBtn = writer.locator('button').first();
if (await priceBtn.count() > 0) {
const readerBefore = await reader.textContent();
await priceBtn.click();
await page.waitForTimeout(500);
const readerAfter = await reader.textContent();
expect(readerAfter).not.toBe(readerBefore);
}
});
test('view-transform: view toggle changes rendering', async ({ page }) => {
await loadPage(page, '(geography.(marshes.view-transform))');
const el = island(page, 'marsh-view-transform');
await expect(el).toBeVisible({ timeout: 10000 });
// Fetch catalog first — view toggle only changes rendering of loaded items
const fetchBtn = el.locator('button:has-text("Fetch Catalog")');
if (await fetchBtn.count() > 0) {
await fetchBtn.click();
await page.waitForTimeout(4000);
}
const viewBtns = el.locator('button');
if (await viewBtns.count() >= 2) {
const htmlBefore = await el.innerHTML();
const textBefore = await el.textContent();
await viewBtns.nth(1).click();
await page.waitForTimeout(300);
expect(await el.innerHTML()).not.toBe(htmlBefore);
await page.waitForTimeout(500);
expect(await el.textContent()).not.toBe(textBefore);
}
});
});