From 72b9ea16527d4a7d321079bb7708350668df8065 Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Wed, 2 Sep 2026 15:38:11 +0200 Subject: [PATCH] test(app): retry sidebar order after reload layout Treat missing row geometry as a transient poll result so reload assertions wait for every visible sidebar item to lay out instead of failing before the matcher can retry. --- .../app/e2e/support/helpers/sidebar-nav-settings.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/app/e2e/support/helpers/sidebar-nav-settings.ts b/packages/app/e2e/support/helpers/sidebar-nav-settings.ts index 2d8efe8aea..cb34ef3c18 100644 --- a/packages/app/e2e/support/helpers/sidebar-nav-settings.ts +++ b/packages/app/e2e/support/helpers/sidebar-nav-settings.ts @@ -38,12 +38,9 @@ function itemLabel(key: SidebarNavKey): string { }[key]; } -async function rowTop(locator: Locator): Promise { +async function rowTop(locator: Locator): Promise { const box = await locator.boundingBox(); - if (!box) { - throw new Error("Expected a laid-out sidebar row to measure"); - } - return box.y; + return box?.y ?? null; } export async function seedSidebarNavPreferences( @@ -139,7 +136,11 @@ async function expectVerticalOrder( const measured = await Promise.all( keys.map(async (key) => ({ key, top: await rowTop(locate(key)) })), ); - return measured.sort((a, b) => a.top - b.top).map((entry) => entry.key); + const laidOut = measured.filter( + (entry): entry is { key: SidebarNavKey; top: number } => entry.top !== null, + ); + if (laidOut.length !== keys.length) return null; + return laidOut.sort((a, b) => a.top - b.top).map((entry) => entry.key); }, { message: `Expected ${subject} in order`, timeout: 15_000 }, )