1
1
import { expect } from '@playwright/test'
2
2
import combinateImport from 'combinate'
3
- import { derivePort } from '@tanstack/router-e2e-utils'
3
+ import { derivePort , localDummyServer } from '@tanstack/router-e2e-utils'
4
4
import packageJson from '../package.json' with { type : 'json' }
5
5
import { test } from './fixture'
6
+ import { Server } from 'node:http'
7
+ import queryString from 'node:querystring'
6
8
7
9
// somehow playwright does not correctly import default exports
8
10
const combinate = ( combinateImport as any ) . default as typeof combinateImport
9
11
10
12
const PORT = derivePort ( packageJson . name )
13
+ const EXTERNAL_HOST_PORT = derivePort ( `${ packageJson . name } -external` )
11
14
12
15
test . describe ( 'redirects' , ( ) => {
16
+ let server : Server
17
+ test . beforeAll ( async ( ) => {
18
+ server = await localDummyServer ( EXTERNAL_HOST_PORT )
19
+ } )
20
+ test . afterAll ( async ( ) => {
21
+ server . close ( )
22
+ } )
23
+
13
24
const internalNavigationTestMatrix = combinate ( {
14
25
thrower : [ 'beforeLoad' , 'loader' ] as const ,
15
26
reloadDocument : [ false , true ] as const ,
@@ -93,17 +104,21 @@ test.describe('redirects', () => {
93
104
test ( `external target: scenario: ${ scenario } , thrower: ${ thrower } ` , async ( {
94
105
page,
95
106
} ) => {
107
+ let q = queryString . stringify ( {
108
+ externalHost : `http://localhost:${ EXTERNAL_HOST_PORT } /` ,
109
+ } )
110
+
96
111
if ( scenario === 'navigate' ) {
97
- await page . goto ( `/redirect/external` )
112
+ await page . goto ( `/redirect/external? ${ q } ` )
98
113
await page . waitForLoadState ( 'networkidle' )
99
114
const link = page . getByTestId ( `via-${ thrower } ` )
100
115
await link . focus ( )
101
116
await link . click ( )
102
117
} else {
103
- await page . goto ( `/redirect/external/via-${ thrower } ` )
118
+ await page . goto ( `/redirect/external/via-${ thrower } ? ${ q } ` )
104
119
}
105
120
106
- const url = ' http://example.com/'
121
+ const url = ` http://localhost: ${ EXTERNAL_HOST_PORT } /`
107
122
108
123
await page . waitForURL ( url )
109
124
expect ( page . url ( ) ) . toBe ( url )
@@ -123,8 +138,13 @@ test.describe('redirects', () => {
123
138
page,
124
139
} ) => {
125
140
let fullPageLoad = false
141
+ let q = queryString . stringify ( {
142
+ externalHost : `http://localhost:${ EXTERNAL_HOST_PORT } /` ,
143
+ reloadDocument,
144
+ } )
145
+
126
146
if ( scenario === 'navigate' ) {
127
- await page . goto ( `/redirect/${ target } /serverFn` )
147
+ await page . goto ( `/redirect/${ target } /serverFn? ${ q } ` )
128
148
await page . waitForLoadState ( 'networkidle' )
129
149
const link = page . getByTestId (
130
150
`via-${ thrower } ${ reloadDocument ? '-reloadDocument' : '' } ` ,
@@ -135,15 +155,13 @@ test.describe('redirects', () => {
135
155
await link . focus ( )
136
156
await link . click ( )
137
157
} else {
138
- await page . goto (
139
- `/redirect/${ target } /serverFn/via-${ thrower } ${ reloadDocument ? '?reloadDocument=true' : '' } ` ,
140
- )
158
+ await page . goto ( `/redirect/${ target } /serverFn/via-${ thrower } ?${ q } ` )
141
159
}
142
160
143
161
const url =
144
162
target === 'internal'
145
163
? `http://localhost:${ PORT } /posts`
146
- : ' http://example.com/'
164
+ : ` http://localhost: ${ EXTERNAL_HOST_PORT } /`
147
165
await page . waitForURL ( url )
148
166
expect ( page . url ( ) ) . toBe ( url )
149
167
if ( target === 'internal' && scenario === 'navigate' ) {
0 commit comments