Skip to content

Commit 88d0e70

Browse files
committed
test(react-router): add swipe-to-go-back abort coverage for multi-level navigation
1 parent 7fbc59b commit 88d0e70

File tree

2 files changed

+70
-0
lines changed

2 files changed

+70
-0
lines changed

packages/react-router/test/base/src/pages/swipe-to-go-back/SwipeToGoBack.tsx

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export const SwipeToGoBack: React.FC = () => {
1717
<IonRouterOutlet id="swipe-to-go-back">
1818
<Route path="/swipe-to-go-back" element={<Main />} />
1919
<Route path="/swipe-to-go-back/details" element={<Details />} />
20+
<Route path="/swipe-to-go-back/details2" element={<Details2 />} />
2021
</IonRouterOutlet>
2122
);
2223
};
@@ -49,6 +50,25 @@ const Details: React.FC = () => {
4950
</IonHeader>
5051
<IonContent>
5152
<div>Details</div>
53+
<IonItem routerLink="/swipe-to-go-back/details2" id="go-to-details2">Details 2</IonItem>
54+
</IonContent>
55+
</IonPage>
56+
);
57+
};
58+
59+
const Details2: React.FC = () => {
60+
return (
61+
<IonPage data-pageid="details2">
62+
<IonHeader>
63+
<IonToolbar>
64+
<IonButtons slot="start">
65+
<IonBackButton></IonBackButton>
66+
</IonButtons>
67+
<IonTitle>Details 2</IonTitle>
68+
</IonToolbar>
69+
</IonHeader>
70+
<IonContent>
71+
<div>Details 2</div>
5272
</IonContent>
5373
</IonPage>
5474
);

packages/react-router/test/base/tests/e2e/specs/swipe-to-go-back.cy.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,4 +149,54 @@ describe('Swipe To Go Back', () => {
149149

150150
cy.ionPageVisible('params-1');
151151
})
152+
153+
it('should keep correct view visible after swipe-back completes then abort on previous page', () => {
154+
// Navigate three levels deep: main → details → details2
155+
cy.visit(`http://localhost:${port}/swipe-to-go-back?${IOS_MODE}`);
156+
cy.ionPageVisible('main');
157+
158+
cy.ionNav('ion-item', 'Details');
159+
cy.ionPageVisible('details');
160+
cy.ionPageHidden('main');
161+
162+
cy.get('#go-to-details2').click();
163+
cy.wait(250);
164+
cy.ionPageVisible('details2');
165+
cy.ionPageHidden('details');
166+
167+
// Complete swipe back from details2 → details
168+
cy.ionSwipeToGoBack(true, 'ion-router-outlet#swipe-to-go-back');
169+
cy.ionPageVisible('details');
170+
cy.ionPageDoesNotExist('details2');
171+
172+
// Now on details, abort a swipe back toward main
173+
// This validates that the abort doesn't hide the currently-visible page
174+
cy.ionSwipeToGoBack(false, 'ion-router-outlet#swipe-to-go-back');
175+
cy.ionPageVisible('details');
176+
cy.ionPageHidden('main');
177+
})
178+
179+
it('should handle multiple consecutive swipe aborts without hiding current page', () => {
180+
cy.visit(`http://localhost:${port}/swipe-to-go-back?${IOS_MODE}`);
181+
cy.ionPageVisible('main');
182+
183+
cy.ionNav('ion-item', 'Details');
184+
cy.ionPageVisible('details');
185+
cy.ionPageHidden('main');
186+
187+
// First abort
188+
cy.ionSwipeToGoBack(false, 'ion-router-outlet#swipe-to-go-back');
189+
cy.ionPageVisible('details');
190+
cy.ionPageHidden('main');
191+
192+
// Second abort
193+
cy.ionSwipeToGoBack(false, 'ion-router-outlet#swipe-to-go-back');
194+
cy.ionPageVisible('details');
195+
cy.ionPageHidden('main');
196+
197+
// Third abort
198+
cy.ionSwipeToGoBack(false, 'ion-router-outlet#swipe-to-go-back');
199+
cy.ionPageVisible('details');
200+
cy.ionPageHidden('main');
201+
})
152202
});

0 commit comments

Comments
 (0)