-
Notifications
You must be signed in to change notification settings - Fork 4.3k
/
Copy pathrouter-navigate.spec.ts
129 lines (103 loc) · 3.89 KB
/
router-navigate.spec.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/**
* Internal dependencies
*/
import { test, expect } from './fixtures';
test.describe( 'Router navigate', () => {
test.beforeAll( async ( { interactivityUtils: utils } ) => {
await utils.activatePlugins();
const link2 = await utils.addPostWithBlock( 'test/router-navigate', {
alias: 'router navigate - link 2',
attributes: { title: 'Link 2' },
} );
const link1 = await utils.addPostWithBlock( 'test/router-navigate', {
alias: 'router navigate - link 1',
attributes: { title: 'Link 1' },
} );
await utils.addPostWithBlock( 'test/router-navigate', {
alias: 'router navigate - main',
attributes: { title: 'Main', links: [ link1, link2 ] },
} );
} );
test.beforeEach( async ( { interactivityUtils: utils, page } ) => {
await page.goto( utils.getLink( 'router navigate - main' ) );
} );
test.afterAll( async ( { interactivityUtils: utils } ) => {
await utils.deactivatePlugins();
await utils.deleteAllPosts();
} );
test( 'should update the HTML only for the latest navigation', async ( {
page,
interactivityUtils: utils,
} ) => {
const link1 = utils.getLink( 'router navigate - link 1' );
const link2 = utils.getLink( 'router navigate - link 2' );
const navigations = page.getByTestId( 'router navigations' );
const status = page.getByTestId( 'router status' );
const title = page.getByTestId( 'title' );
await expect( navigations ).toHaveText( '0' );
await expect( status ).toHaveText( 'idle' );
let resolveLink1: Function;
let resolveLink2: Function;
await page.route( link1, async ( route ) => {
await new Promise( ( r ) => ( resolveLink1 = r ) );
await route.continue();
} );
await page.route( link2, async ( route ) => {
await new Promise( ( r ) => ( resolveLink2 = r ) );
await route.continue();
} );
await page.getByTestId( 'link 1' ).click();
await page.getByTestId( 'link 2' ).click();
await expect( navigations ).toHaveText( '2' );
await expect( status ).toHaveText( 'busy' );
await expect( title ).toHaveText( 'Main' );
await Promise.resolve().then( () => resolveLink2() );
await expect( navigations ).toHaveText( '1' );
await expect( status ).toHaveText( 'busy' );
await expect( title ).toHaveText( 'Link 2' );
await Promise.resolve().then( () => resolveLink1() );
await expect( navigations ).toHaveText( '0' );
await expect( status ).toHaveText( 'idle' );
await expect( title ).toHaveText( 'Link 2' );
} );
test( 'should update the URL from the last navigation if only varies in the URL fragment', async ( {
page,
interactivityUtils: utils,
} ) => {
const link1 = utils.getLink( 'router navigate - link 1' );
const navigations = page.getByTestId( 'router navigations' );
const status = page.getByTestId( 'router status' );
const title = page.getByTestId( 'title' );
await expect( navigations ).toHaveText( '0' );
await expect( status ).toHaveText( 'idle' );
const resolvers: Function[] = [];
await page.route( link1, async ( route ) => {
await new Promise( ( r ) => resolvers.push( r ) );
await route.continue();
} );
await page.getByTestId( 'link 1' ).click();
await page.getByTestId( 'link 1 with hash' ).click();
const href = ( await page
.getByTestId( 'link 1 with hash' )
.getAttribute( 'href' ) ) as string;
await expect( navigations ).toHaveText( '2' );
await expect( status ).toHaveText( 'busy' );
await expect( title ).toHaveText( 'Main' );
{
const resolver = resolvers.pop();
if ( resolver ) resolver();
}
await expect( navigations ).toHaveText( '1' );
await expect( status ).toHaveText( 'busy' );
await expect( title ).toHaveText( 'Link 1' );
await expect( page ).toHaveURL( href );
{
const resolver = resolvers.pop();
if ( resolver ) resolver();
}
await expect( navigations ).toHaveText( '0' );
await expect( status ).toHaveText( 'idle' );
await expect( title ).toHaveText( 'Link 1' );
await expect( page ).toHaveURL( href );
} );
} );