@@ -150,6 +150,42 @@ test.describe("redirects", () => {
150
150
return <h1 id="d">D</h1>
151
151
}
152
152
` ,
153
+
154
+ "app/routes/headers.tsx" : js `
155
+ import * as React from 'react';
156
+ import { Link, Form, redirect, useLocation } from 'react-router';
157
+
158
+ export function action() {
159
+ return redirect('/headers?action-redirect', {
160
+ headers: { 'X-Test': 'Foo' }
161
+ })
162
+ }
163
+
164
+ export function loader({ request }) {
165
+ let url = new URL(request.url);
166
+ if (url.searchParams.has('redirect')) {
167
+ return redirect('/headers?loader-redirect', {
168
+ headers: { 'X-Test': 'Foo' }
169
+ })
170
+ }
171
+ return null
172
+ }
173
+
174
+ export default function Component() {
175
+ let location = useLocation()
176
+ return (
177
+ <>
178
+ <Link id="loader-redirect" to="/headers?redirect">Redirect</Link>
179
+ <Form method="post">
180
+ <button id="action-redirect" type="submit">Action Redirect</button>
181
+ </Form>
182
+ <p id="search-params">
183
+ Search Params: {location.search}
184
+ </p>
185
+ </>
186
+ );
187
+ }
188
+ ` ,
153
189
} ,
154
190
} ) ;
155
191
@@ -224,6 +260,49 @@ test.describe("redirects", () => {
224
260
await page . goBack ( ) ;
225
261
await page . waitForSelector ( "#a" ) ; // [/a]
226
262
} ) ;
263
+
264
+ test ( "maintains custom headers on redirects" , async ( { page } ) => {
265
+ let app = new PlaywrightFixture ( appFixture , page ) ;
266
+
267
+ let hasGetHeader = false ;
268
+ let hasPostHeader = false ;
269
+ page . on ( "request" , async ( request ) => {
270
+ let extension = / ^ r s c / . test ( templateName ) ? "rsc" : "data" ;
271
+ if (
272
+ request . method ( ) === "GET" &&
273
+ request . url ( ) . endsWith ( `headers.${ extension } ?redirect=` )
274
+ ) {
275
+ const headers = ( await request . response ( ) ) ?. headers ( ) || { } ;
276
+ hasGetHeader = headers [ "x-test" ] === "Foo" ;
277
+ }
278
+ if (
279
+ request . method ( ) === "POST" &&
280
+ request . url ( ) . endsWith ( `headers.${ extension } ` )
281
+ ) {
282
+ const headers = ( await request . response ( ) ) ?. headers ( ) || { } ;
283
+ hasPostHeader = headers [ "x-test" ] === "Foo" ;
284
+ }
285
+ } ) ;
286
+
287
+ await app . goto ( "/headers" , true ) ;
288
+ await app . clickElement ( "#loader-redirect" ) ;
289
+ await expect ( page . locator ( "#search-params" ) ) . toHaveText (
290
+ "Search Params: ?loader-redirect"
291
+ ) ;
292
+ expect ( hasGetHeader ) . toBe ( true ) ;
293
+ expect ( hasPostHeader ) . toBe ( false ) ;
294
+
295
+ hasGetHeader = false ;
296
+ hasPostHeader = false ;
297
+
298
+ await app . goto ( "/headers" , true ) ;
299
+ await app . clickElement ( "#action-redirect" ) ;
300
+ await expect ( page . locator ( "#search-params" ) ) . toHaveText (
301
+ "Search Params: ?action-redirect"
302
+ ) ;
303
+ expect ( hasGetHeader ) . toBe ( false ) ;
304
+ expect ( hasPostHeader ) . toBe ( true ) ;
305
+ } ) ;
227
306
} ) ;
228
307
}
229
308
} ) ;
0 commit comments