mirror of
https://github.com/hanzoai/next.js.git
synced 2026-09-24 17:00:51 +00:00
## Summary - normalize encoded dynamic placeholders like `%5Bproject%5D` before parsing app route segments - add a fallback params regression test covering encoded placeholder inputs - assert vary-param segment prefetch responses do not contain encoded root param placeholders ## Testing - pnpm testheadless packages/next/src/server/request/fallback-params.test.ts - pnpm testheadless test/e2e/app-dir/segment-cache/vary-params/vary-params.test.ts -t "tracks root param access via rootParams API"
62 lines
1.7 KiB
TypeScript
62 lines
1.7 KiB
TypeScript
import { nextTestSetup } from 'e2e-utils'
|
|
import type * as Playwright from 'playwright'
|
|
import { createRouterAct } from 'router-act'
|
|
|
|
describe('segment cache - root params segment prefetch', () => {
|
|
const { next, isNextDev } = nextTestSetup({
|
|
files: __dirname,
|
|
})
|
|
|
|
if (isNextDev) {
|
|
test('prefetching is disabled in dev mode', () => {})
|
|
return
|
|
}
|
|
|
|
it('does not encode root param placeholders in segment-prefetch responses', async () => {
|
|
let act: ReturnType<typeof createRouterAct>
|
|
const segmentPrefetchBodies: Array<Promise<string>> = []
|
|
const browser = await next.browser('/root-params', {
|
|
beforePageLoad(p: Playwright.Page) {
|
|
act = createRouterAct(p)
|
|
p.on('response', (response) => {
|
|
const request = response.request()
|
|
if (request.headers()['next-router-segment-prefetch']) {
|
|
segmentPrefetchBodies.push(response.text().catch(() => ''))
|
|
}
|
|
})
|
|
},
|
|
})
|
|
|
|
await act(
|
|
async () => {
|
|
const toggle = await browser.elementByCss(
|
|
'input[data-link-accordion="/aaa"]'
|
|
)
|
|
await toggle.click()
|
|
},
|
|
{ includes: 'Root param page content - param: aaa' }
|
|
)
|
|
|
|
await act(
|
|
async () => {
|
|
const toggle = await browser.elementByCss(
|
|
'input[data-link-accordion="/bbb"]'
|
|
)
|
|
await toggle.click()
|
|
},
|
|
{ includes: 'Root param page content - param: bbb' }
|
|
)
|
|
|
|
const settledSegmentPrefetchBodies = await Promise.all(
|
|
segmentPrefetchBodies
|
|
)
|
|
|
|
expect(settledSegmentPrefetchBodies.length).toBeGreaterThan(0)
|
|
expect(
|
|
settledSegmentPrefetchBodies.some((body) =>
|
|
body.includes('%5BrootParam%5D')
|
|
)
|
|
).toBe(false)
|
|
})
|
|
})
|