diff --git a/test/integration/getinitialprops/next.config.js b/test/integration/getinitialprops/next.config.js new file mode 100644 index 000000000000000..41cc8e0d0e5eeb8 --- /dev/null +++ b/test/integration/getinitialprops/next.config.js @@ -0,0 +1,11 @@ +module.exports = { + // replace me + async rewrites() { + return [ + { + source: '/blog/post/:pid', + destination: '/blog/:pid', + }, + ] + }, +} diff --git a/test/integration/getinitialprops/pages/blog/[post].js b/test/integration/getinitialprops/pages/blog/[post].js new file mode 100644 index 000000000000000..6af9a8728a7ab2d --- /dev/null +++ b/test/integration/getinitialprops/pages/blog/[post].js @@ -0,0 +1,16 @@ +import React from 'react' +import { useRouter } from 'next/router' + +const Post = () => { + const router = useRouter() + + return ( + <> +
{router.asPath}
+ + ) +} + +Post.getInitialProps = () => ({ hello: 'hi' }) + +export default Post diff --git a/test/integration/getinitialprops/pages/index.js b/test/integration/getinitialprops/pages/index.js new file mode 100644 index 000000000000000..6a1fd4b88fb6f59 --- /dev/null +++ b/test/integration/getinitialprops/pages/index.js @@ -0,0 +1,3 @@ +const page = () => 'hello from sub id' +page.getInitialProps = () => ({ hello: 'hi' }) +export default page diff --git a/test/integration/getinitialprops/pages/normal.js b/test/integration/getinitialprops/pages/normal.js new file mode 100644 index 000000000000000..75ad8dfee1722d9 --- /dev/null +++ b/test/integration/getinitialprops/pages/normal.js @@ -0,0 +1 @@ +export default () =>

a normal page

diff --git a/test/integration/getinitialprops/test/index.test.js b/test/integration/getinitialprops/test/index.test.js new file mode 100644 index 000000000000000..a2e7445899228c7 --- /dev/null +++ b/test/integration/getinitialprops/test/index.test.js @@ -0,0 +1,81 @@ +import cheerio from 'cheerio' +import { join } from 'path' +import { + findPort, + launchApp, + killApp, + nextStart, + nextBuild, + renderViaHTTP, + File, +} from 'next-test-utils' + +jest.setTimeout(1000 * 60 * 5) +let app +let appPort +const appDir = join(__dirname, '..') +const nextConfig = new File(join(appDir, 'next.config.js')) + +const runTests = () => { + it('should have gip in __NEXT_DATA__', async () => { + const html = await renderViaHTTP(appPort, '/') + const $ = cheerio.load(html) + expect(JSON.parse($('#__NEXT_DATA__').text()).gip).toBe(true) + }) + + it('should not have gip in __NEXT_DATA__ for non-GIP page', async () => { + const html = await renderViaHTTP(appPort, '/normal') + const $ = cheerio.load(html) + expect('gip' in JSON.parse($('#__NEXT_DATA__').text())).toBe(false) + }) + + it('should have correct router.asPath for direct visit dynamic page', async () => { + const html = await renderViaHTTP(appPort, '/blog/1') + const $ = cheerio.load(html) + expect($('#as-path').text()).toBe('/blog/1') + }) + + it('should have correct router.asPath for direct visit dynamic page rewrite direct', async () => { + const html = await renderViaHTTP(appPort, '/blog/post/1') + const $ = cheerio.load(html) + expect($('#as-path').text()).toBe('/blog/post/1') + }) +} + +describe('getInitialProps', () => { + describe('dev mode', () => { + beforeAll(async () => { + appPort = await findPort() + app = await launchApp(appDir, appPort) + }) + afterAll(() => killApp(app)) + + runTests() + }) + + describe('serverless mode', () => { + beforeAll(async () => { + await nextConfig.replace('// replace me', `target: 'serverless', `) + await nextBuild(appDir) + appPort = await findPort() + app = await nextStart(appDir, appPort) + }) + afterAll(async () => { + await killApp(app) + nextConfig.restore() + }) + + runTests() + }) + + describe('production mode', () => { + beforeAll(async () => { + await nextBuild(appDir) + appPort = await findPort() + app = await nextStart(appDir, appPort) + }) + afterAll(() => killApp(app)) + + runTests() + }) +})