Skip to content

Commit

Permalink
Fix browser back issue of redirects from getServerSideProps / getStat…
Browse files Browse the repository at this point in the history
…icProps (#17741)

* Fix test without expect for redirects from getStaticProps/getServerSideProps

* Fix browser back issue of redirects from getServerSideProps / getStaticProps
  • Loading branch information
TasukuUno committed Oct 27, 2020
1 parent d2e7f3c commit 3f22490
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 6 deletions.
7 changes: 1 addition & 6 deletions packages/next/next-server/lib/router/router.ts
Expand Up @@ -813,12 +813,7 @@ export default class Router implements BaseRouter {
this._resolveHref(parsedHref, pages)

if (pages.includes(parsedHref.pathname)) {
return this.change(
'replaceState',
destination,
destination,
options
)
return this.change(method, destination, destination, options)
}
}

Expand Down
96 changes: 96 additions & 0 deletions test/integration/gssp-redirect/test/index.test.js
Expand Up @@ -123,6 +123,10 @@ const runTests = () => {
window.next.router.push('/gssp-blog/redirect-dest-_another')
})()`)
await browser.waitForElementByCss('#another')

const text = await browser.elementByCss('#another').text()

expect(text).toEqual('another Page')
})

it('should apply redirect when GSSP page is navigated to client-side (external)', async () => {
Expand All @@ -149,6 +153,10 @@ const runTests = () => {
window.next.router.push('/gsp-blog/redirect-dest-_another')
})()`)
await browser.waitForElementByCss('#another')

const text = await browser.elementByCss('#another').text()

expect(text).toEqual('another Page')
})

it('should apply redirect when GSP page is navigated to client-side (external)', async () => {
Expand All @@ -167,6 +175,94 @@ const runTests = () => {
},
})
})

it('should not replace history of the origin page when GSSP page is navigated to client-side (internal normal)', async () => {
const browser = await webdriver(appPort, '/another?mark_as=root')

await browser.eval(`(function () {
window.location.href = '/'
})()`)
await browser.waitForElementByCss('#index')

await browser.eval(`(function () {
window.next.router.push('/gssp-blog/redirect-dest-_another')
})()`)
await browser.waitForElementByCss('#another')

await browser.eval(`(function () {
window.history.back()
})()`)

const curUrl = await browser.url()
const { path } = url.parse(curUrl)
expect(path).toEqual('/')
})

it('should not replace history of the origin page when GSSP page is navigated to client-side (external)', async () => {
const browser = await webdriver(appPort, '/another?mark_as=root')

await browser.eval(`(function () {
window.location.href = '/'
})()`)
await browser.waitForElementByCss('#index')

await browser.eval(`(function () {
window.next.router.push('/gssp-blog/redirect-dest-_gssp-blog_first')
})()`)
await browser.waitForElementByCss('#gssp')

await browser.eval(`(function () {
window.history.back()
})()`)

const curUrl = await browser.url()
const { path } = url.parse(curUrl)
expect(path).toEqual('/')
})

it('should not replace history of the origin page when GSP page is navigated to client-side (internal)', async () => {
const browser = await webdriver(appPort, '/another?mark_as=root')

await browser.eval(`(function () {
window.location.href = '/'
})()`)
await browser.waitForElementByCss('#index')

await browser.eval(`(function () {
window.next.router.push('/gsp-blog/redirect-dest-_another')
})()`)
await browser.waitForElementByCss('#another')

await browser.eval(`(function () {
window.history.back()
})()`)

const curUrl = await browser.url()
const { path } = url.parse(curUrl)
expect(path).toEqual('/')
})

it('should not replace history of the origin page when GSP page is navigated to client-side (external)', async () => {
const browser = await webdriver(appPort, '/another?mark_as=root')

await browser.eval(`(function () {
window.location.href = '/'
})()`)
await browser.waitForElementByCss('#index')

await browser.eval(`(function () {
window.next.router.push('/gsp-blog/redirect-dest-_gsp-blog_first')
})()`)
await browser.waitForElementByCss('#gsp')

await browser.eval(`(function () {
window.history.back()
})()`)

const curUrl = await browser.url()
const { path } = url.parse(curUrl)
expect(path).toEqual('/')
})
}

describe('GS(S)P Redirect Support', () => {
Expand Down

0 comments on commit 3f22490

Please sign in to comment.