Skip to content

Fix rewrite and dynamic params on navigating to initial history entry #25495

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions test/integration/rewrite-with-browser-history/next.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
module.exports = {
rewrites() {
return [
{
source: '/:pagePrefix/:path*',
destination: '/dynamic-page/:path*',
Copy link
Contributor Author

@PepijnSenders PepijnSenders May 26, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is where it goes wrong I guess, the first param is not defined in the second path, and the [[...param]] then doesn't get defined and the router thinks it can't match the route.

Before when we resolved the rewrites on these URL's it did work though because it will rematch this and figure out that the [[...param]] is actually in that URL.

},
]
},
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { useRouter } from 'next/router'
import Link from 'next/link'

export default function Page(props) {
const router = useRouter()

return (
<>
<p id="another">another page</p>
<p id="pathname">{router.pathname}</p>
<p id="query">{JSON.stringify(router.query)}</p>

<Link href="/" as="/">
<a id="to-index">Go back to index</a>
</Link>
<br />
</>
)
}

export const getServerSideProps = () => {
return { props: {} }
}
19 changes: 19 additions & 0 deletions test/integration/rewrite-with-browser-history/pages/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { useRouter } from 'next/router'

export default function Page() {
const router = useRouter()

return (
<>
<p id="index">index page</p>
<p id="pathname">{router.pathname}</p>
<p id="query">{JSON.stringify(router.query)}</p>

<br />
</>
)
}

export const getServerSideProps = () => {
return { props: {} }
}
58 changes: 58 additions & 0 deletions test/integration/rewrite-with-browser-history/test/index.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
/* eslint-env jest */

import { join } from 'path'
import {
findPort,
killApp,
launchApp,
nextBuild,
nextStart,
} from 'next-test-utils'
import webdriver from 'next-webdriver'

jest.setTimeout(1000 * 60 * 2)

const appDir = join(__dirname, '../')

let appPort
let app

const runTests = () => {
it('back-button should go back to rewritten path successfully', async () => {
const browser = await webdriver(appPort, '/rewrite-me')

expect(await browser.elementByCss('#another').text()).toBe('another page')

await browser
.elementByCss('#to-index')
.click()
.waitForElementByCss('#index')

await browser.back()

expect(await browser.elementByCss('#another').text()).toBe('another page')
})
}

describe('rewrites persist with browser history actions', () => {
describe('dev mode', () => {
beforeAll(async () => {
appPort = await findPort()
app = await launchApp(appDir, appPort)
})
afterAll(() => killApp(app))

runTests()
})

describe('production mode', () => {
beforeAll(async () => {
await nextBuild(appDir)
appPort = await findPort()
app = await nextStart(appDir, appPort)
})
afterAll(() => killApp(app))

runTests()
})
})