test(router, router-outlet): migrate to generators (#27372)

Issue number: N/A

---------

<!-- Please do not submit updates to dependencies unless it fixes an
issue. -->

<!-- Please try to limit your pull request to one type (bugfix, feature,
etc). Submit multiple pull requests if needed. -->

## What is the current behavior?
<!-- Please describe the current behavior that you are modifying. -->

Router and router outlet tests are using legacy syntax

## What is the new behavior?
<!-- Please describe the behavior or changes that are being added by
this PR. -->

- Router and router outlet tests are using generator syntax

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

<!-- If this introduces a breaking change, please describe the impact
and migration path for existing applications below. -->


## Other information

<!-- Any other information that is important to this PR such as
screenshots of how the component looks before and after the change. -->
This commit is contained in:
Liam DeBeasi
2023-05-03 20:00:04 -04:00
committed by GitHub
parent 141683a4a2
commit 23fc518c9f
12 changed files with 423 additions and 441 deletions

View File

@ -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();
});
});

View File

@ -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();
});
});
});

View File

@ -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');
});
});

View File

@ -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');
});
});
});

View File

@ -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');
});
});

View File

@ -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');
});
});
});

View File

@ -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');
});
});

View File

@ -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');
});
});
});

View File

@ -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');
});
});

View File

@ -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');
});
});
});