From 346eb50bf3ab44cf2dd0b35777b7f2ceda2a6e35 Mon Sep 17 00:00:00 2001 From: Johannes Millan Date: Thu, 12 Feb 2026 16:42:07 +0100 Subject: [PATCH] test(e2e): strengthen assertions in supersync E2E tests - Assert 401 route interception fired in token expiry tests - Assert expected LWW winner in three-client config convergence test - Navigate to root view instead of TODAY for cascade delete orphan check --- e2e/tests/sync/supersync-cascade-delete.spec.ts | 6 +++--- e2e/tests/sync/supersync-global-config-edge-cases.spec.ts | 3 +++ e2e/tests/sync/supersync-token-expiry.spec.ts | 6 ++++++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/e2e/tests/sync/supersync-cascade-delete.spec.ts b/e2e/tests/sync/supersync-cascade-delete.spec.ts index 88861c1ece..d59611b3ad 100644 --- a/e2e/tests/sync/supersync-cascade-delete.spec.ts +++ b/e2e/tests/sync/supersync-cascade-delete.spec.ts @@ -162,10 +162,10 @@ test.describe('@supersync Cross-Entity Cascade Delete', () => { // ============ PHASE 5: Verify no orphans ============ console.log('[CascadeDelete] Phase 5: Verifying no orphaned tasks'); - // Navigate to a known view on both clients - await clientA.page.goto('/#/tag/TODAY/tasks'); + // Navigate to root view where orphaned tasks would appear + await clientA.page.goto('/#/'); await clientA.page.waitForLoadState('networkidle'); - await clientB.page.goto('/#/tag/TODAY/tasks'); + await clientB.page.goto('/#/'); await clientB.page.waitForLoadState('networkidle'); // Verify project is gone from sidebar on both clients diff --git a/e2e/tests/sync/supersync-global-config-edge-cases.spec.ts b/e2e/tests/sync/supersync-global-config-edge-cases.spec.ts index d49a9c1a85..729e4e6aa2 100644 --- a/e2e/tests/sync/supersync-global-config-edge-cases.spec.ts +++ b/e2e/tests/sync/supersync-global-config-edge-cases.spec.ts @@ -132,6 +132,9 @@ test.describe('@supersync Global Config Sync Edge Cases', () => { expect(aCeleb).toBe(bCeleb); expect(aCeleb).toBe(cCeleb); + // Verify the expected LWW winner: C's operation was latest, so celebration should be ON + expect(aCeleb).toBe(true); + console.log('[3Client] ✓ All three clients converged to same state'); } finally { if (clientA) await closeClient(clientA); diff --git a/e2e/tests/sync/supersync-token-expiry.spec.ts b/e2e/tests/sync/supersync-token-expiry.spec.ts index 10870428d3..0c11d33b70 100644 --- a/e2e/tests/sync/supersync-token-expiry.spec.ts +++ b/e2e/tests/sync/supersync-token-expiry.spec.ts @@ -79,6 +79,9 @@ test.describe('@supersync Token Expiry Recovery', () => { console.log('[TokenExpiry] First sync failed with 401 as expected'); } + // Verify the 401 interception actually fired + expect(state.return401).toBe(false); + // Remove interception await clientA.page.unroute('**/api/sync/ops/**'); await clientA.page.waitForTimeout(500); @@ -170,6 +173,9 @@ test.describe('@supersync Token Expiry Recovery', () => { console.log('[TokenExpiry] First download failed with 401 as expected'); } + // Verify the 401 interception actually fired + expect(state.return401).toBe(false); + // Remove interception await clientB.page.unroute('**/api/sync/ops/**'); await clientB.page.waitForTimeout(500);