From 88d0e70a297a6bc6cc48d6f9ff0ae82ccb90aa60 Mon Sep 17 00:00:00 2001 From: ShaneK Date: Thu, 12 Mar 2026 10:34:59 -0700 Subject: [PATCH] test(react-router): add swipe-to-go-back abort coverage for multi-level navigation --- .../pages/swipe-to-go-back/SwipeToGoBack.tsx | 20 ++++++++ .../tests/e2e/specs/swipe-to-go-back.cy.js | 50 +++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/packages/react-router/test/base/src/pages/swipe-to-go-back/SwipeToGoBack.tsx b/packages/react-router/test/base/src/pages/swipe-to-go-back/SwipeToGoBack.tsx index b25a38041f..920533dee4 100644 --- a/packages/react-router/test/base/src/pages/swipe-to-go-back/SwipeToGoBack.tsx +++ b/packages/react-router/test/base/src/pages/swipe-to-go-back/SwipeToGoBack.tsx @@ -17,6 +17,7 @@ export const SwipeToGoBack: React.FC = () => { } /> } /> + } /> ); }; @@ -49,6 +50,25 @@ const Details: React.FC = () => {
Details
+ Details 2 +
+ + ); +}; + +const Details2: React.FC = () => { + return ( + + + + + + + Details 2 + + + +
Details 2
); diff --git a/packages/react-router/test/base/tests/e2e/specs/swipe-to-go-back.cy.js b/packages/react-router/test/base/tests/e2e/specs/swipe-to-go-back.cy.js index d64d5f745b..283845e757 100644 --- a/packages/react-router/test/base/tests/e2e/specs/swipe-to-go-back.cy.js +++ b/packages/react-router/test/base/tests/e2e/specs/swipe-to-go-back.cy.js @@ -149,4 +149,54 @@ describe('Swipe To Go Back', () => { cy.ionPageVisible('params-1'); }) + + it('should keep correct view visible after swipe-back completes then abort on previous page', () => { + // Navigate three levels deep: main → details → details2 + cy.visit(`http://localhost:${port}/swipe-to-go-back?${IOS_MODE}`); + cy.ionPageVisible('main'); + + cy.ionNav('ion-item', 'Details'); + cy.ionPageVisible('details'); + cy.ionPageHidden('main'); + + cy.get('#go-to-details2').click(); + cy.wait(250); + cy.ionPageVisible('details2'); + cy.ionPageHidden('details'); + + // Complete swipe back from details2 → details + cy.ionSwipeToGoBack(true, 'ion-router-outlet#swipe-to-go-back'); + cy.ionPageVisible('details'); + cy.ionPageDoesNotExist('details2'); + + // Now on details, abort a swipe back toward main + // This validates that the abort doesn't hide the currently-visible page + cy.ionSwipeToGoBack(false, 'ion-router-outlet#swipe-to-go-back'); + cy.ionPageVisible('details'); + cy.ionPageHidden('main'); + }) + + it('should handle multiple consecutive swipe aborts without hiding current page', () => { + cy.visit(`http://localhost:${port}/swipe-to-go-back?${IOS_MODE}`); + cy.ionPageVisible('main'); + + cy.ionNav('ion-item', 'Details'); + cy.ionPageVisible('details'); + cy.ionPageHidden('main'); + + // First abort + cy.ionSwipeToGoBack(false, 'ion-router-outlet#swipe-to-go-back'); + cy.ionPageVisible('details'); + cy.ionPageHidden('main'); + + // Second abort + cy.ionSwipeToGoBack(false, 'ion-router-outlet#swipe-to-go-back'); + cy.ionPageVisible('details'); + cy.ionPageHidden('main'); + + // Third abort + cy.ionSwipeToGoBack(false, 'ion-router-outlet#swipe-to-go-back'); + cy.ionPageVisible('details'); + cy.ionPageHidden('main'); + }) });