From 23fc518c9f322555528d3ba2f190a66cc5728909 Mon Sep 17 00:00:00 2001 From: Liam DeBeasi Date: Wed, 3 May 2023 20:00:04 -0400 Subject: [PATCH] test(router, router-outlet): migrate to generators (#27372) Issue number: N/A --------- ## What is the current behavior? Router and router outlet tests are using legacy syntax ## What is the new behavior? - Router and router outlet tests are using generator syntax ## Does this introduce a breaking change? - [ ] Yes - [x] No ## Other information --- .../test/basic/router-outlet.e2e-legacy.ts | 52 --------- .../test/basic/router-outlet.e2e.ts | 50 +++++++++ .../router/test/basic/router.e2e-legacy.ts | 100 ------------------ .../router/test/basic/router.e2e.ts | 90 ++++++++++++++++ .../test/guards/href/router.e2e-legacy.ts | 90 ---------------- .../router/test/guards/href/router.e2e.ts | 89 ++++++++++++++++ .../test/guards/link/router.e2e-legacy.ts | 92 ---------------- .../router/test/guards/link/router.e2e.ts | 91 ++++++++++++++++ .../test/guards/push/router.e2e-legacy.ts | 92 ---------------- .../router/test/guards/push/router.e2e.ts | 91 ++++++++++++++++ .../router/test/guards/router.e2e-legacy.ts | 15 --- .../router/test/guards/router.e2e.ts | 12 +++ 12 files changed, 423 insertions(+), 441 deletions(-) delete mode 100644 core/src/components/router-outlet/test/basic/router-outlet.e2e-legacy.ts create mode 100644 core/src/components/router-outlet/test/basic/router-outlet.e2e.ts delete mode 100644 core/src/components/router/test/basic/router.e2e-legacy.ts create mode 100644 core/src/components/router/test/basic/router.e2e.ts delete mode 100644 core/src/components/router/test/guards/href/router.e2e-legacy.ts create mode 100644 core/src/components/router/test/guards/href/router.e2e.ts delete mode 100644 core/src/components/router/test/guards/link/router.e2e-legacy.ts create mode 100644 core/src/components/router/test/guards/link/router.e2e.ts delete mode 100644 core/src/components/router/test/guards/push/router.e2e-legacy.ts create mode 100644 core/src/components/router/test/guards/push/router.e2e.ts delete mode 100644 core/src/components/router/test/guards/router.e2e-legacy.ts create mode 100644 core/src/components/router/test/guards/router.e2e.ts diff --git a/core/src/components/router-outlet/test/basic/router-outlet.e2e-legacy.ts b/core/src/components/router-outlet/test/basic/router-outlet.e2e-legacy.ts deleted file mode 100644 index d09caab60c..0000000000 --- a/core/src/components/router-outlet/test/basic/router-outlet.e2e-legacy.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { expect } from '@playwright/test'; -import { test } from '@utils/test/playwright'; - -test.describe('router outlet: basic', () => { - test.beforeEach(({ skip }) => { - skip.rtl(); - skip.mode('ios'); - }); - test('getRouteId() should return the segment parameters', async ({ page }) => { - await page.goto('/src/components/router-outlet/test/basic'); - - await page.click('ion-button[href="#/two/segment"]'); - await page.waitForChanges(); - - const routerOutlet = page.locator('ion-router-outlet'); - const routeId = await routerOutlet.evaluate((el: HTMLIonRouterOutletElement) => el.getRouteId()); - - expect(routeId!.id).toEqual('PAGE-TWO'); - expect(routeId!.params).toEqual({ param: 'segment' }); - }); - - test('getRouteId() should return the route parameters', async ({ page }) => { - await page.goto('/src/components/router-outlet/test/basic'); - - await page.click('ion-button[href="#/page-3"]'); - await page.waitForChanges(); - - const routerOutlet = page.locator('ion-router-outlet'); - const routeId = await routerOutlet.evaluate((el: HTMLIonRouterOutletElement) => el.getRouteId()); - - expect(routeId!.id).toEqual('PAGE-THREE'); - expect(routeId!.params).toEqual({ param: 'route' }); - }); - - test('it should be possible to activate the same component provided parameters are different', async ({ page }) => { - await page.goto('/src/components/router-outlet/test/basic'); - - await page.click('ion-button[href="#/page-4.1/foo"]'); - await page.waitForChanges(); - - await page.$eval('ion-item[href="#/page-4.1/foo"] ion-label', (el: any) => el.click()); - await page.waitForChanges(); - - const routerOutlet = page.locator('ion-router-outlet'); - await expect(routerOutlet).toHaveText(/text = foo/); - - await page.click('ion-button[href="#/page-4.2/bar"]'); - await page.waitForChanges(); - - await expect(routerOutlet).toHaveText(/text = bar/); - }); -}); diff --git a/core/src/components/router-outlet/test/basic/router-outlet.e2e.ts b/core/src/components/router-outlet/test/basic/router-outlet.e2e.ts new file mode 100644 index 0000000000..3cbc184214 --- /dev/null +++ b/core/src/components/router-outlet/test/basic/router-outlet.e2e.ts @@ -0,0 +1,50 @@ +import { expect } from '@playwright/test'; +import { configs, test } from '@utils/test/playwright'; + +configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ title, config }) => { + test.describe(title('router outlet: basic'), () => { + test('getRouteId() should return the segment parameters', async ({ page }) => { + await page.goto('/src/components/router-outlet/test/basic', config); + + await page.click('ion-button[href="#/two/segment"]'); + await page.waitForChanges(); + + const routerOutlet = page.locator('ion-router-outlet'); + const routeId = await routerOutlet.evaluate((el: HTMLIonRouterOutletElement) => el.getRouteId()); + + expect(routeId!.id).toEqual('PAGE-TWO'); + expect(routeId!.params).toEqual({ param: 'segment' }); + }); + + test('getRouteId() should return the route parameters', async ({ page }) => { + await page.goto('/src/components/router-outlet/test/basic', config); + + await page.click('ion-button[href="#/page-3"]'); + await page.waitForChanges(); + + const routerOutlet = page.locator('ion-router-outlet'); + const routeId = await routerOutlet.evaluate((el: HTMLIonRouterOutletElement) => el.getRouteId()); + + expect(routeId!.id).toEqual('PAGE-THREE'); + expect(routeId!.params).toEqual({ param: 'route' }); + }); + + test('it should be possible to activate the same component provided parameters are different', async ({ page }) => { + await page.goto('/src/components/router-outlet/test/basic', config); + + await page.click('ion-button[href="#/page-4.1/foo"]'); + await page.waitForChanges(); + + await page.$eval('ion-item[href="#/page-4.1/foo"] ion-label', (el: any) => el.click()); + await page.waitForChanges(); + + const routerOutlet = page.locator('ion-router-outlet'); + await expect(routerOutlet).toHaveText(/text = foo/); + + await page.click('ion-button[href="#/page-4.2/bar"]'); + await page.waitForChanges(); + + await expect(routerOutlet).toHaveText(/text = bar/); + }); + }); +}); diff --git a/core/src/components/router/test/basic/router.e2e-legacy.ts b/core/src/components/router/test/basic/router.e2e-legacy.ts deleted file mode 100644 index e5d87cabf7..0000000000 --- a/core/src/components/router/test/basic/router.e2e-legacy.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { expect } from '@playwright/test'; -import { test } from '@utils/test/playwright'; - -test.describe('router: redirect', () => { - test.beforeEach(({ skip }) => { - skip.mode('md'); - skip.rtl(); - }); - - test('contains query parameters after redirect', async ({ page }) => { - await page.goto(`/src/components/router/test/basic#/redirect-to-three`); - - expect(page.url()).toContain('#/three?has_query_string=true'); - }); -}); - -test.describe('router: push', () => { - test.beforeEach(({ skip }) => { - skip.mode('md'); - skip.rtl(); - }); - - test('should support relative path', async ({ page }) => { - await page.goto(`/src/components/router/test/basic#/two/three/hola`); - await page.click('#btn-rel'); - - expect(page.url()).toContain('#/two/three/relative?param=1'); - }); - - test('should support absolute path', async ({ page }) => { - await page.goto(`/src/components/router/test/basic#/two/three/hola`); - await page.click('#btn-abs'); - - expect(page.url()).toContain('#/two/three/absolute'); - }); -}); - -test.describe('router: tabs', () => { - test.beforeEach(({ skip }) => { - skip.mode('md'); - skip.rtl(); - }); - - test('should activate the initial tab', async ({ page }) => { - await page.goto(`/src/components/router/test/basic`); - - const tabOne = page.locator('tab-one'); - - await expect(tabOne).toBeVisible(); - - expect(page.url()).toContain('/basic?'); - }); - - /** - * Selects the Schedule (tab two) tab and verifies that both the - * page is visible and the URL is correct. - */ - test('selecting a tab routes to the tab page', async ({ page }) => { - await page.goto(`/src/components/router/test/basic`); - - const tabOne = page.locator('tab-one'); - const tabTwo = page.locator('tab-two'); - - await page.click('#tab-button-tab-two'); - - await expect(tabOne).toBeHidden(); - await expect(tabTwo).toBeVisible(); - - expect(page.url()).toContain('#/two'); - }); - - test('should navigate to a nested page within a tab', async ({ page }) => { - await page.goto('/src/components/router/test/basic#/two'); - - const tabTwo = page.locator('tab-two'); - const pageOne = page.locator('page-one'); - - await expect(tabTwo).toBeVisible(); - await expect(pageOne).toBeVisible(); - - await page.click('text=Go to page 2'); - - const pageTwo = page.locator('page-two'); - - await expect(pageTwo).toBeVisible(); - await expect(pageOne).toBeHidden(); - - await expect(page.url()).toContain('#/two/second-page'); - }); - - test('navigating directly to a sub page should activate the page', async ({ page }) => { - await page.goto('/src/components/router/test/basic#/two/second-page'); - - const tabTwo = page.locator('tab-two'); - const pageTwo = page.locator('page-two'); - - await expect(tabTwo).toBeVisible(); - await expect(pageTwo).toBeVisible(); - }); -}); diff --git a/core/src/components/router/test/basic/router.e2e.ts b/core/src/components/router/test/basic/router.e2e.ts new file mode 100644 index 0000000000..33f4e37d33 --- /dev/null +++ b/core/src/components/router/test/basic/router.e2e.ts @@ -0,0 +1,90 @@ +import { expect } from '@playwright/test'; +import { configs, test } from '@utils/test/playwright'; + +/** + * This behavior does not vary across modes/directions. + */ +configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => { + test.describe(title('router: redirect'), () => { + test('contains query parameters after redirect', async ({ page }) => { + await page.goto(`/src/components/router/test/basic#/redirect-to-three`, config); + + expect(page.url()).toContain('#/three?has_query_string=true'); + }); + }); + + test.describe(title('router: push'), () => { + test('should support relative path', async ({ page }) => { + await page.goto(`/src/components/router/test/basic#/two/three/hola`, config); + await page.click('#btn-rel'); + + expect(page.url()).toContain('#/two/three/relative?param=1'); + }); + + test('should support absolute path', async ({ page }) => { + await page.goto(`/src/components/router/test/basic#/two/three/hola`, config); + await page.click('#btn-abs'); + + expect(page.url()).toContain('#/two/three/absolute'); + }); + }); + + test.describe(title('router: tabs'), () => { + test('should activate the initial tab', async ({ page }) => { + await page.goto(`/src/components/router/test/basic`, config); + + const tabOne = page.locator('tab-one'); + + await expect(tabOne).toBeVisible(); + + expect(page.url()).toContain('/basic?'); + }); + + /** + * Selects the Schedule (tab two) tab and verifies that both the + * page is visible and the URL is correct. + */ + test('selecting a tab routes to the tab page', async ({ page }) => { + await page.goto(`/src/components/router/test/basic`, config); + + const tabOne = page.locator('tab-one'); + const tabTwo = page.locator('tab-two'); + + await page.click('#tab-button-tab-two'); + + await expect(tabOne).toBeHidden(); + await expect(tabTwo).toBeVisible(); + + expect(page.url()).toContain('#/two'); + }); + + test('should navigate to a nested page within a tab', async ({ page }) => { + await page.goto('/src/components/router/test/basic#/two', config); + + const tabTwo = page.locator('tab-two'); + const pageOne = page.locator('page-one'); + + await expect(tabTwo).toBeVisible(); + await expect(pageOne).toBeVisible(); + + await page.click('text=Go to page 2'); + + const pageTwo = page.locator('page-two'); + + await expect(pageTwo).toBeVisible(); + await expect(pageOne).toBeHidden(); + + await expect(page.url()).toContain('#/two/second-page'); + }); + + test('navigating directly to a sub page should activate the page', async ({ page }) => { + await page.goto('/src/components/router/test/basic#/two/second-page', config); + + const tabTwo = page.locator('tab-two'); + const pageTwo = page.locator('page-two'); + + await expect(tabTwo).toBeVisible(); + await expect(pageTwo).toBeVisible(); + }); + }); +}); diff --git a/core/src/components/router/test/guards/href/router.e2e-legacy.ts b/core/src/components/router/test/guards/href/router.e2e-legacy.ts deleted file mode 100644 index f87b918f36..0000000000 --- a/core/src/components/router/test/guards/href/router.e2e-legacy.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { expect } from '@playwright/test'; -import { test } from '@utils/test/playwright'; - -import { setBeforeEnterHook, setBeforeLeaveHook } from '../test.utils'; - -test.describe('router: guards: href', () => { - test.beforeEach(async ({ page, skip }) => { - skip.mode('md'); - skip.rtl(); - - await page.goto(`/src/components/router/test/guards`); - }); - - test('allow/allow', async ({ page }) => { - // beforeEnter: allow, beforeLeave: allow - await setBeforeEnterHook(page, 'allow'); - - await page.click('#href'); - await page.waitForChanges(); - - expect(page.url()).toContain('#/child'); - - await page.click('ion-back-button'); - await page.waitForChanges(); - - expect(page.url()).toContain('#/home'); - }); - - test('block/allow', async ({ page }) => { - // beforeEnter: block, beforeLeave: allow - await setBeforeEnterHook(page, 'block'); - - await page.click('#href'); - - await page.waitForChanges(); - - expect(page.url()).toContain('#/home'); - }); - - test('redirect/allow', async ({ page }) => { - // beforeEnter: redirect, beforeLeave: allow - await setBeforeEnterHook(page, 'redirect'); - - await page.click('#href'); - - await page.waitForChanges(); - - expect(page.url()).toContain('#/test'); - - await page.click('ion-back-button'); - - await page.waitForChanges(); - - expect(page.url()).toContain('#/home'); - }); - - test('allow/bock', async ({ page }) => { - // beforeEnter: allow, beforeLeave: block - await setBeforeLeaveHook(page, 'block'); - - await page.click('#href'); - - await page.waitForChanges(); - - expect(page.url()).toContain('#/child'); - - await page.click('ion-back-button'); - - await page.waitForChanges(); - - expect(page.url()).toContain('#/child'); - }); - - test('allow/redirect', async ({ page }) => { - // beforeEnter: allow, beforeLeave: redirect - await setBeforeLeaveHook(page, 'redirect'); - - await page.click('#href'); - - await page.waitForChanges(); - - expect(page.url()).toContain('#/child'); - - await page.click('ion-back-button'); - - await page.waitForChanges(); - - expect(page.url()).toContain('#/test'); - }); -}); diff --git a/core/src/components/router/test/guards/href/router.e2e.ts b/core/src/components/router/test/guards/href/router.e2e.ts new file mode 100644 index 0000000000..b553779ff9 --- /dev/null +++ b/core/src/components/router/test/guards/href/router.e2e.ts @@ -0,0 +1,89 @@ +import { expect } from '@playwright/test'; +import { configs, test } from '@utils/test/playwright'; + +import { setBeforeEnterHook, setBeforeLeaveHook } from '../test.utils'; + +configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => { + test.describe(title('router: guards: href'), () => { + test.beforeEach(async ({ page }) => { + await page.goto(`/src/components/router/test/guards`, config); + }); + + test('allow/allow', async ({ page }) => { + // beforeEnter: allow, beforeLeave: allow + await setBeforeEnterHook(page, 'allow'); + + await page.click('#href'); + await page.waitForChanges(); + + expect(page.url()).toContain('#/child'); + + await page.click('ion-back-button'); + await page.waitForChanges(); + + expect(page.url()).toContain('#/home'); + }); + + test('block/allow', async ({ page }) => { + // beforeEnter: block, beforeLeave: allow + await setBeforeEnterHook(page, 'block'); + + await page.click('#href'); + + await page.waitForChanges(); + + expect(page.url()).toContain('#/home'); + }); + + test('redirect/allow', async ({ page }) => { + // beforeEnter: redirect, beforeLeave: allow + await setBeforeEnterHook(page, 'redirect'); + + await page.click('#href'); + + await page.waitForChanges(); + + expect(page.url()).toContain('#/test'); + + await page.click('ion-back-button'); + + await page.waitForChanges(); + + expect(page.url()).toContain('#/home'); + }); + + test('allow/bock', async ({ page }) => { + // beforeEnter: allow, beforeLeave: block + await setBeforeLeaveHook(page, 'block'); + + await page.click('#href'); + + await page.waitForChanges(); + + expect(page.url()).toContain('#/child'); + + await page.click('ion-back-button'); + + await page.waitForChanges(); + + expect(page.url()).toContain('#/child'); + }); + + test('allow/redirect', async ({ page }) => { + // beforeEnter: allow, beforeLeave: redirect + await setBeforeLeaveHook(page, 'redirect'); + + await page.click('#href'); + + await page.waitForChanges(); + + expect(page.url()).toContain('#/child'); + + await page.click('ion-back-button'); + + await page.waitForChanges(); + + expect(page.url()).toContain('#/test'); + }); + }); +}); diff --git a/core/src/components/router/test/guards/link/router.e2e-legacy.ts b/core/src/components/router/test/guards/link/router.e2e-legacy.ts deleted file mode 100644 index 6fd1f01e4a..0000000000 --- a/core/src/components/router/test/guards/link/router.e2e-legacy.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { expect } from '@playwright/test'; -import { test } from '@utils/test/playwright'; - -import { setBeforeEnterHook, setBeforeLeaveHook } from '../test.utils'; - -test.describe('router: guards: router-link', () => { - test.beforeEach(async ({ page, skip }) => { - skip.mode('md'); - skip.rtl(); - - await page.goto(`/src/components/router/test/guards`); - }); - - test('allow/allow', async ({ page }) => { - // beforeEnter: allow, beforeLeave: allow - await setBeforeEnterHook(page, 'allow'); - - await page.click('#router-link'); - - await page.waitForChanges(); - - expect(page.url()).toContain('#/child/1'); - - await page.click('ion-back-button'); - - await page.waitForChanges(); - - expect(page.url()).toContain('#/home'); - }); - - test('block/allow', async ({ page }) => { - // beforeEnter: block, beforeLeave: allow - await setBeforeEnterHook(page, 'block'); - - await page.click('#router-link'); - - await page.waitForChanges(); - - expect(page.url()).toContain('#/home'); - }); - - test('redirect/allow', async ({ page }) => { - // beforeEnter: redirect, beforeLeave: allow - await setBeforeEnterHook(page, 'redirect'); - - await page.click('#router-link'); - - await page.waitForChanges(); - - expect(page.url()).toContain('#/test'); - - await page.click('ion-back-button'); - - await page.waitForChanges(); - - expect(page.url()).toContain('#/home'); - }); - - test('allow/block', async ({ page }) => { - // beforeEnter: allow, beforeLeave: block - await setBeforeLeaveHook(page, 'block'); - - await page.click('#router-link'); - - await page.waitForChanges(); - - expect(page.url()).toContain('#/child/1'); - - await page.click('ion-back-button'); - - await page.waitForChanges(); - - expect(page.url()).toContain('#/child/1'); - }); - - test('allow/redirect', async ({ page }) => { - // beforeEnter: allow, beforeLeave: redirect - await setBeforeLeaveHook(page, 'redirect'); - - await page.click('#router-link'); - - await page.waitForChanges(); - - expect(page.url()).toContain('#/child/1'); - - await page.click('ion-back-button'); - - await page.waitForChanges(); - - expect(page.url()).toContain('#/test'); - }); -}); diff --git a/core/src/components/router/test/guards/link/router.e2e.ts b/core/src/components/router/test/guards/link/router.e2e.ts new file mode 100644 index 0000000000..03dd671bf1 --- /dev/null +++ b/core/src/components/router/test/guards/link/router.e2e.ts @@ -0,0 +1,91 @@ +import { expect } from '@playwright/test'; +import { configs, test } from '@utils/test/playwright'; + +import { setBeforeEnterHook, setBeforeLeaveHook } from '../test.utils'; + +configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => { + test.describe(title('router: guards: router-link'), () => { + test.beforeEach(async ({ page }) => { + await page.goto(`/src/components/router/test/guards`, config); + }); + + test('allow/allow', async ({ page }) => { + // beforeEnter: allow, beforeLeave: allow + await setBeforeEnterHook(page, 'allow'); + + await page.click('#router-link'); + + await page.waitForChanges(); + + expect(page.url()).toContain('#/child/1'); + + await page.click('ion-back-button'); + + await page.waitForChanges(); + + expect(page.url()).toContain('#/home'); + }); + + test('block/allow', async ({ page }) => { + // beforeEnter: block, beforeLeave: allow + await setBeforeEnterHook(page, 'block'); + + await page.click('#router-link'); + + await page.waitForChanges(); + + expect(page.url()).toContain('#/home'); + }); + + test('redirect/allow', async ({ page }) => { + // beforeEnter: redirect, beforeLeave: allow + await setBeforeEnterHook(page, 'redirect'); + + await page.click('#router-link'); + + await page.waitForChanges(); + + expect(page.url()).toContain('#/test'); + + await page.click('ion-back-button'); + + await page.waitForChanges(); + + expect(page.url()).toContain('#/home'); + }); + + test('allow/block', async ({ page }) => { + // beforeEnter: allow, beforeLeave: block + await setBeforeLeaveHook(page, 'block'); + + await page.click('#router-link'); + + await page.waitForChanges(); + + expect(page.url()).toContain('#/child/1'); + + await page.click('ion-back-button'); + + await page.waitForChanges(); + + expect(page.url()).toContain('#/child/1'); + }); + + test('allow/redirect', async ({ page }) => { + // beforeEnter: allow, beforeLeave: redirect + await setBeforeLeaveHook(page, 'redirect'); + + await page.click('#router-link'); + + await page.waitForChanges(); + + expect(page.url()).toContain('#/child/1'); + + await page.click('ion-back-button'); + + await page.waitForChanges(); + + expect(page.url()).toContain('#/test'); + }); + }); +}); diff --git a/core/src/components/router/test/guards/push/router.e2e-legacy.ts b/core/src/components/router/test/guards/push/router.e2e-legacy.ts deleted file mode 100644 index 6aec67ef96..0000000000 --- a/core/src/components/router/test/guards/push/router.e2e-legacy.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { expect } from '@playwright/test'; -import { test } from '@utils/test/playwright'; - -import { setBeforeEnterHook, setBeforeLeaveHook } from '../test.utils'; - -test.describe('router: guards: router.push', () => { - test.beforeEach(async ({ page, skip }) => { - skip.mode('md'); - skip.rtl(); - - await page.goto(`/src/components/router/test/guards`); - }); - - test('allow/allow', async ({ page }) => { - // beforeEnter: allow, beforeLeave: allow - await setBeforeEnterHook(page, 'allow'); - - await page.click('#router-push'); - - await page.waitForChanges(); - - expect(page.url()).toContain('#/child'); - - await page.click('ion-back-button'); - - await page.waitForChanges(); - - expect(page.url()).toContain('#/home'); - }); - - test('block/allow', async ({ page }) => { - // beforeEnter: block, beforeLeave: allow - await setBeforeEnterHook(page, 'block'); - - await page.click('#router-push'); - - await page.waitForChanges(); - - expect(page.url()).toContain('#/home'); - }); - - test('redirect/allow', async ({ page }) => { - // beforeEnter: redirect, beforeLeave: allow - await setBeforeEnterHook(page, 'redirect'); - - await page.click('#router-push'); - - await page.waitForChanges(); - - expect(page.url()).toContain('#/test'); - - await page.click('ion-back-button'); - - await page.waitForChanges(); - - expect(page.url()).toContain('#/home'); - }); - - test('allow/block', async ({ page }) => { - // beforeEnter: allow, beforeLeave: block - await setBeforeLeaveHook(page, 'block'); - - await page.click('#router-push'); - - await page.waitForChanges(); - - expect(page.url()).toContain('#/child'); - - await page.click('ion-back-button'); - - await page.waitForChanges(); - - expect(page.url()).toContain('#/child'); - }); - - test('allow/redirect', async ({ page }) => { - // beforeEnter: allow, beforeLeave: redirect - await setBeforeLeaveHook(page, 'redirect'); - - await page.click('#router-push'); - - await page.waitForChanges(); - - expect(page.url()).toContain('#/child'); - - await page.click('ion-back-button'); - - await page.waitForChanges(); - - expect(page.url()).toContain('#/test'); - }); -}); diff --git a/core/src/components/router/test/guards/push/router.e2e.ts b/core/src/components/router/test/guards/push/router.e2e.ts new file mode 100644 index 0000000000..6fdaef9b7c --- /dev/null +++ b/core/src/components/router/test/guards/push/router.e2e.ts @@ -0,0 +1,91 @@ +import { expect } from '@playwright/test'; +import { configs, test } from '@utils/test/playwright'; + +import { setBeforeEnterHook, setBeforeLeaveHook } from '../test.utils'; + +configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => { + test.describe(title('router: guards: router.push'), () => { + test.beforeEach(async ({ page }) => { + await page.goto(`/src/components/router/test/guards`, config); + }); + + test('allow/allow', async ({ page }) => { + // beforeEnter: allow, beforeLeave: allow + await setBeforeEnterHook(page, 'allow'); + + await page.click('#router-push'); + + await page.waitForChanges(); + + expect(page.url()).toContain('#/child'); + + await page.click('ion-back-button'); + + await page.waitForChanges(); + + expect(page.url()).toContain('#/home'); + }); + + test('block/allow', async ({ page }) => { + // beforeEnter: block, beforeLeave: allow + await setBeforeEnterHook(page, 'block'); + + await page.click('#router-push'); + + await page.waitForChanges(); + + expect(page.url()).toContain('#/home'); + }); + + test('redirect/allow', async ({ page }) => { + // beforeEnter: redirect, beforeLeave: allow + await setBeforeEnterHook(page, 'redirect'); + + await page.click('#router-push'); + + await page.waitForChanges(); + + expect(page.url()).toContain('#/test'); + + await page.click('ion-back-button'); + + await page.waitForChanges(); + + expect(page.url()).toContain('#/home'); + }); + + test('allow/block', async ({ page }) => { + // beforeEnter: allow, beforeLeave: block + await setBeforeLeaveHook(page, 'block'); + + await page.click('#router-push'); + + await page.waitForChanges(); + + expect(page.url()).toContain('#/child'); + + await page.click('ion-back-button'); + + await page.waitForChanges(); + + expect(page.url()).toContain('#/child'); + }); + + test('allow/redirect', async ({ page }) => { + // beforeEnter: allow, beforeLeave: redirect + await setBeforeLeaveHook(page, 'redirect'); + + await page.click('#router-push'); + + await page.waitForChanges(); + + expect(page.url()).toContain('#/child'); + + await page.click('ion-back-button'); + + await page.waitForChanges(); + + expect(page.url()).toContain('#/test'); + }); + }); +}); diff --git a/core/src/components/router/test/guards/router.e2e-legacy.ts b/core/src/components/router/test/guards/router.e2e-legacy.ts deleted file mode 100644 index 000209713c..0000000000 --- a/core/src/components/router/test/guards/router.e2e-legacy.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { expect } from '@playwright/test'; -import { test } from '@utils/test/playwright'; - -test.describe('router: guards', () => { - test.beforeEach(({ skip }) => { - skip.mode('md'); - skip.rtl(); - }); - - test('guards should be run on initial load', async ({ page }) => { - await page.goto(`/src/components/router/test/guards#/guard-initial-page`); - - expect(page.url()).toContain('#/child/1'); - }); -}); diff --git a/core/src/components/router/test/guards/router.e2e.ts b/core/src/components/router/test/guards/router.e2e.ts new file mode 100644 index 0000000000..f34ed61800 --- /dev/null +++ b/core/src/components/router/test/guards/router.e2e.ts @@ -0,0 +1,12 @@ +import { expect } from '@playwright/test'; +import { configs, test } from '@utils/test/playwright'; + +configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => { + test.describe(title('router: guards'), () => { + test('guards should be run on initial load', async ({ page }) => { + await page.goto(`/src/components/router/test/guards#/guard-initial-page`, config); + + expect(page.url()).toContain('#/child/1'); + }); + }); +});