From d40491b421b1fc1f11eb85314d02837216ef4a27 Mon Sep 17 00:00:00 2001 From: Jan Kaifer Date: Mon, 12 Dec 2022 18:13:47 +0100 Subject: [PATCH 01/11] add test for rewriting in middleware in app-dir --- .../app/[param]/page.tsx | 3 ++ .../app/layout.tsx | 8 +++++ .../app/page.tsx | 19 +++++++++++ .../middleware-rewrites-redirects.test.ts | 34 +++++++++++++++++++ .../middleware.ts | 10 ++++++ .../next.config.js | 6 ++++ 6 files changed, 80 insertions(+) create mode 100644 test/e2e/app-dir/middleware-rewrites-redirects/app/[param]/page.tsx create mode 100644 test/e2e/app-dir/middleware-rewrites-redirects/app/layout.tsx create mode 100644 test/e2e/app-dir/middleware-rewrites-redirects/app/page.tsx create mode 100644 test/e2e/app-dir/middleware-rewrites-redirects/middleware-rewrites-redirects.test.ts create mode 100644 test/e2e/app-dir/middleware-rewrites-redirects/middleware.ts create mode 100644 test/e2e/app-dir/middleware-rewrites-redirects/next.config.js diff --git a/test/e2e/app-dir/middleware-rewrites-redirects/app/[param]/page.tsx b/test/e2e/app-dir/middleware-rewrites-redirects/app/[param]/page.tsx new file mode 100644 index 000000000000..ffd4f6b90853 --- /dev/null +++ b/test/e2e/app-dir/middleware-rewrites-redirects/app/[param]/page.tsx @@ -0,0 +1,3 @@ +export default function Page({ params: { param } }) { + return
{param}
+} diff --git a/test/e2e/app-dir/middleware-rewrites-redirects/app/layout.tsx b/test/e2e/app-dir/middleware-rewrites-redirects/app/layout.tsx new file mode 100644 index 000000000000..762515029332 --- /dev/null +++ b/test/e2e/app-dir/middleware-rewrites-redirects/app/layout.tsx @@ -0,0 +1,8 @@ +export default function Layout({ children }) { + return ( + + + {children} + + ) +} diff --git a/test/e2e/app-dir/middleware-rewrites-redirects/app/page.tsx b/test/e2e/app-dir/middleware-rewrites-redirects/app/page.tsx new file mode 100644 index 000000000000..1aef3dd12af1 --- /dev/null +++ b/test/e2e/app-dir/middleware-rewrites-redirects/app/page.tsx @@ -0,0 +1,19 @@ +import Link from 'next/link' + +const Test = ({ page }: { page: string }) => { + return ( + <> + + Link to /{page}-before + + + ) +} + +export default function Page() { + return ( + <> + + + ) +} diff --git a/test/e2e/app-dir/middleware-rewrites-redirects/middleware-rewrites-redirects.test.ts b/test/e2e/app-dir/middleware-rewrites-redirects/middleware-rewrites-redirects.test.ts new file mode 100644 index 000000000000..7ef32dbb8049 --- /dev/null +++ b/test/e2e/app-dir/middleware-rewrites-redirects/middleware-rewrites-redirects.test.ts @@ -0,0 +1,34 @@ +import { createNext, FileRef } from 'e2e-utils' +import { NextInstance } from 'test/lib/next-modes/base' +import webdriver from 'next-webdriver' +import { waitFor } from 'next-test-utils' + +describe('redirects and rewrites in middleware', () => { + let next: NextInstance + + beforeAll(async () => { + next = await createNext({ + files: new FileRef(__dirname), + dependencies: { + react: 'latest', + 'react-dom': 'latest', + typescript: 'latest', + '@types/react': 'latest', + '@types/node': 'latest', + }, + }) + }) + afterAll(() => next.destroy()) + + it('should rewrite correctly', async () => { + const browser = await webdriver(next.url, '/') + browser.elementById('link-middleware-rewrite').click() + await waitFor(200) + + expect(await browser.elementById('page').text()).toBe( + 'middleware-rewrite-after' + ) + const url = new URL(await browser.url()) + expect(url.pathname).toEndWith('-before') + }) +}) diff --git a/test/e2e/app-dir/middleware-rewrites-redirects/middleware.ts b/test/e2e/app-dir/middleware-rewrites-redirects/middleware.ts new file mode 100644 index 000000000000..9b0436e21445 --- /dev/null +++ b/test/e2e/app-dir/middleware-rewrites-redirects/middleware.ts @@ -0,0 +1,10 @@ +import { NextResponse } from 'next/server' +import type { NextRequest } from 'next/server' + +export function middleware(request: NextRequest) { + if (request.nextUrl.pathname.startsWith('/middleware-rewrite-before')) { + return NextResponse.rewrite( + new URL('/middleware-rewrite-after', request.url) + ) + } +} diff --git a/test/e2e/app-dir/middleware-rewrites-redirects/next.config.js b/test/e2e/app-dir/middleware-rewrites-redirects/next.config.js new file mode 100644 index 000000000000..1c3c436e114e --- /dev/null +++ b/test/e2e/app-dir/middleware-rewrites-redirects/next.config.js @@ -0,0 +1,6 @@ +module.exports = { + reactStrictMode: true, + experimental: { + appDir: true, + }, +} From 6d5f335a490573552772ea674de12a2e897ca5e9 Mon Sep 17 00:00:00 2001 From: Jan Kaifer Date: Mon, 12 Dec 2022 18:15:57 +0100 Subject: [PATCH 02/11] add test for redirect --- .../middleware-rewrites-redirects/app/page.tsx | 1 + .../middleware-rewrites-redirects.test.ts | 12 ++++++++++++ .../middleware-rewrites-redirects/middleware.ts | 6 ++++++ 3 files changed, 19 insertions(+) diff --git a/test/e2e/app-dir/middleware-rewrites-redirects/app/page.tsx b/test/e2e/app-dir/middleware-rewrites-redirects/app/page.tsx index 1aef3dd12af1..40195b534298 100644 --- a/test/e2e/app-dir/middleware-rewrites-redirects/app/page.tsx +++ b/test/e2e/app-dir/middleware-rewrites-redirects/app/page.tsx @@ -14,6 +14,7 @@ export default function Page() { return ( <> + ) } diff --git a/test/e2e/app-dir/middleware-rewrites-redirects/middleware-rewrites-redirects.test.ts b/test/e2e/app-dir/middleware-rewrites-redirects/middleware-rewrites-redirects.test.ts index 7ef32dbb8049..10f259313855 100644 --- a/test/e2e/app-dir/middleware-rewrites-redirects/middleware-rewrites-redirects.test.ts +++ b/test/e2e/app-dir/middleware-rewrites-redirects/middleware-rewrites-redirects.test.ts @@ -31,4 +31,16 @@ describe('redirects and rewrites in middleware', () => { const url = new URL(await browser.url()) expect(url.pathname).toEndWith('-before') }) + + it('should redirect correctly', async () => { + const browser = await webdriver(next.url, '/') + browser.elementById('link-middleware-redirect').click() + await waitFor(200) + + expect(await browser.elementById('page').text()).toBe( + 'middleware-redirect-after' + ) + const url = new URL(await browser.url()) + expect(url.pathname).toEndWith('-after') + }) }) diff --git a/test/e2e/app-dir/middleware-rewrites-redirects/middleware.ts b/test/e2e/app-dir/middleware-rewrites-redirects/middleware.ts index 9b0436e21445..d3b147ecd233 100644 --- a/test/e2e/app-dir/middleware-rewrites-redirects/middleware.ts +++ b/test/e2e/app-dir/middleware-rewrites-redirects/middleware.ts @@ -7,4 +7,10 @@ export function middleware(request: NextRequest) { new URL('/middleware-rewrite-after', request.url) ) } + + if (request.nextUrl.pathname.startsWith('/middleware-redirect-before')) { + return NextResponse.redirect( + new URL('/middleware-redirect-after', request.url) + ) + } } From 6baa9d0994be6bf65d50a517d643c72352e607d2 Mon Sep 17 00:00:00 2001 From: Jan Kaifer Date: Mon, 12 Dec 2022 18:23:58 +0100 Subject: [PATCH 03/11] added tests for router.push --- .../app/page.tsx | 10 +++++ .../middleware-rewrites-redirects.test.ts | 40 ++++++++++--------- 2 files changed, 31 insertions(+), 19 deletions(-) diff --git a/test/e2e/app-dir/middleware-rewrites-redirects/app/page.tsx b/test/e2e/app-dir/middleware-rewrites-redirects/app/page.tsx index 40195b534298..62846a5ee218 100644 --- a/test/e2e/app-dir/middleware-rewrites-redirects/app/page.tsx +++ b/test/e2e/app-dir/middleware-rewrites-redirects/app/page.tsx @@ -1,11 +1,21 @@ +'use client' + import Link from 'next/link' +import { useRouter } from 'next/navigation' const Test = ({ page }: { page: string }) => { + const router = useRouter() return ( <> Link to /{page}-before + ) } diff --git a/test/e2e/app-dir/middleware-rewrites-redirects/middleware-rewrites-redirects.test.ts b/test/e2e/app-dir/middleware-rewrites-redirects/middleware-rewrites-redirects.test.ts index 10f259313855..b63041fe816e 100644 --- a/test/e2e/app-dir/middleware-rewrites-redirects/middleware-rewrites-redirects.test.ts +++ b/test/e2e/app-dir/middleware-rewrites-redirects/middleware-rewrites-redirects.test.ts @@ -20,27 +20,29 @@ describe('redirects and rewrites in middleware', () => { }) afterAll(() => next.destroy()) - it('should rewrite correctly', async () => { - const browser = await webdriver(next.url, '/') - browser.elementById('link-middleware-rewrite').click() - await waitFor(200) + describe.each(['link', 'button'])('navigation using %s', (testType) => { + it('should rewrite correctly', async () => { + const browser = await webdriver(next.url, '/') + browser.elementById(`${testType}-middleware-rewrite`).click() + await waitFor(200) - expect(await browser.elementById('page').text()).toBe( - 'middleware-rewrite-after' - ) - const url = new URL(await browser.url()) - expect(url.pathname).toEndWith('-before') - }) + expect(await browser.elementById('page').text()).toBe( + 'middleware-rewrite-after' + ) + const url = new URL(await browser.url()) + expect(url.pathname).toEndWith('-before') + }) - it('should redirect correctly', async () => { - const browser = await webdriver(next.url, '/') - browser.elementById('link-middleware-redirect').click() - await waitFor(200) + it('should redirect correctly', async () => { + const browser = await webdriver(next.url, '/') + browser.elementById(`${testType}-middleware-redirect`).click() + await waitFor(200) - expect(await browser.elementById('page').text()).toBe( - 'middleware-redirect-after' - ) - const url = new URL(await browser.url()) - expect(url.pathname).toEndWith('-after') + expect(await browser.elementById('page').text()).toBe( + 'middleware-redirect-after' + ) + const url = new URL(await browser.url()) + expect(url.pathname).toEndWith('-after') + }) }) }) From 4693532d351d66577fdc29a7df6a7faff6e8a06b Mon Sep 17 00:00:00 2001 From: Jan Kaifer Date: Mon, 12 Dec 2022 18:25:08 +0100 Subject: [PATCH 04/11] rename test --- .../app/[param]/page.tsx | 0 .../app/layout.tsx | 0 .../app/page.tsx | 0 .../middleware.ts | 0 .../next.config.js | 0 .../rewrites-redirects.test.ts} | 0 6 files changed, 0 insertions(+), 0 deletions(-) rename test/e2e/app-dir/{middleware-rewrites-redirects => rewrites-redirects}/app/[param]/page.tsx (100%) rename test/e2e/app-dir/{middleware-rewrites-redirects => rewrites-redirects}/app/layout.tsx (100%) rename test/e2e/app-dir/{middleware-rewrites-redirects => rewrites-redirects}/app/page.tsx (100%) rename test/e2e/app-dir/{middleware-rewrites-redirects => rewrites-redirects}/middleware.ts (100%) rename test/e2e/app-dir/{middleware-rewrites-redirects => rewrites-redirects}/next.config.js (100%) rename test/e2e/app-dir/{middleware-rewrites-redirects/middleware-rewrites-redirects.test.ts => rewrites-redirects/rewrites-redirects.test.ts} (100%) diff --git a/test/e2e/app-dir/middleware-rewrites-redirects/app/[param]/page.tsx b/test/e2e/app-dir/rewrites-redirects/app/[param]/page.tsx similarity index 100% rename from test/e2e/app-dir/middleware-rewrites-redirects/app/[param]/page.tsx rename to test/e2e/app-dir/rewrites-redirects/app/[param]/page.tsx diff --git a/test/e2e/app-dir/middleware-rewrites-redirects/app/layout.tsx b/test/e2e/app-dir/rewrites-redirects/app/layout.tsx similarity index 100% rename from test/e2e/app-dir/middleware-rewrites-redirects/app/layout.tsx rename to test/e2e/app-dir/rewrites-redirects/app/layout.tsx diff --git a/test/e2e/app-dir/middleware-rewrites-redirects/app/page.tsx b/test/e2e/app-dir/rewrites-redirects/app/page.tsx similarity index 100% rename from test/e2e/app-dir/middleware-rewrites-redirects/app/page.tsx rename to test/e2e/app-dir/rewrites-redirects/app/page.tsx diff --git a/test/e2e/app-dir/middleware-rewrites-redirects/middleware.ts b/test/e2e/app-dir/rewrites-redirects/middleware.ts similarity index 100% rename from test/e2e/app-dir/middleware-rewrites-redirects/middleware.ts rename to test/e2e/app-dir/rewrites-redirects/middleware.ts diff --git a/test/e2e/app-dir/middleware-rewrites-redirects/next.config.js b/test/e2e/app-dir/rewrites-redirects/next.config.js similarity index 100% rename from test/e2e/app-dir/middleware-rewrites-redirects/next.config.js rename to test/e2e/app-dir/rewrites-redirects/next.config.js diff --git a/test/e2e/app-dir/middleware-rewrites-redirects/middleware-rewrites-redirects.test.ts b/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts similarity index 100% rename from test/e2e/app-dir/middleware-rewrites-redirects/middleware-rewrites-redirects.test.ts rename to test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts From 7fe8997052d02121f7f373a57b18b627ab48f0f8 Mon Sep 17 00:00:00 2001 From: Jan Kaifer Date: Mon, 12 Dec 2022 18:25:54 +0100 Subject: [PATCH 05/11] renamed test cases --- .../app-dir/rewrites-redirects/rewrites-redirects.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts b/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts index b63041fe816e..439666b5173a 100644 --- a/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts +++ b/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts @@ -3,7 +3,7 @@ import { NextInstance } from 'test/lib/next-modes/base' import webdriver from 'next-webdriver' import { waitFor } from 'next-test-utils' -describe('redirects and rewrites in middleware', () => { +describe('redirects and rewrites', () => { let next: NextInstance beforeAll(async () => { @@ -21,7 +21,7 @@ describe('redirects and rewrites in middleware', () => { afterAll(() => next.destroy()) describe.each(['link', 'button'])('navigation using %s', (testType) => { - it('should rewrite correctly', async () => { + it('should rewrite from middleware correctly', async () => { const browser = await webdriver(next.url, '/') browser.elementById(`${testType}-middleware-rewrite`).click() await waitFor(200) @@ -33,7 +33,7 @@ describe('redirects and rewrites in middleware', () => { expect(url.pathname).toEndWith('-before') }) - it('should redirect correctly', async () => { + it('should redirect from middleware correctly', async () => { const browser = await webdriver(next.url, '/') browser.elementById(`${testType}-middleware-redirect`).click() await waitFor(200) From 40bff82b1a7be0ce3136b7665298b7e3b59677a8 Mon Sep 17 00:00:00 2001 From: Jan Kaifer Date: Mon, 12 Dec 2022 18:28:46 +0100 Subject: [PATCH 06/11] add test for rewrites in config.next.js --- test/e2e/app-dir/rewrites-redirects/app/page.tsx | 1 + test/e2e/app-dir/rewrites-redirects/next.config.js | 8 ++++++++ .../rewrites-redirects/rewrites-redirects.test.ts | 12 ++++++++++++ 3 files changed, 21 insertions(+) diff --git a/test/e2e/app-dir/rewrites-redirects/app/page.tsx b/test/e2e/app-dir/rewrites-redirects/app/page.tsx index 62846a5ee218..320fce3be3f9 100644 --- a/test/e2e/app-dir/rewrites-redirects/app/page.tsx +++ b/test/e2e/app-dir/rewrites-redirects/app/page.tsx @@ -25,6 +25,7 @@ export default function Page() { <> + ) } diff --git a/test/e2e/app-dir/rewrites-redirects/next.config.js b/test/e2e/app-dir/rewrites-redirects/next.config.js index 1c3c436e114e..1247ad2d156b 100644 --- a/test/e2e/app-dir/rewrites-redirects/next.config.js +++ b/test/e2e/app-dir/rewrites-redirects/next.config.js @@ -3,4 +3,12 @@ module.exports = { experimental: { appDir: true, }, + async rewrites() { + return [ + { + source: '/config-rewrite-before', + destination: '/config-rewrite-after', + }, + ] + }, } diff --git a/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts b/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts index 439666b5173a..208ad75eea1c 100644 --- a/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts +++ b/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts @@ -44,5 +44,17 @@ describe('redirects and rewrites', () => { const url = new URL(await browser.url()) expect(url.pathname).toEndWith('-after') }) + + it('should rewrite from next.config.js correctly', async () => { + const browser = await webdriver(next.url, '/') + browser.elementById(`${testType}-config-rewrite`).click() + await waitFor(200) + + expect(await browser.elementById('page').text()).toBe( + 'config-rewrite-after' + ) + const url = new URL(await browser.url()) + expect(url.pathname).toEndWith('-before') + }) }) }) From 67c9ab5a29e20e1e89f2ab04596cac436e4e222f Mon Sep 17 00:00:00 2001 From: Jan Kaifer Date: Mon, 12 Dec 2022 18:44:59 +0100 Subject: [PATCH 07/11] Test redirects in config.next.js --- test/e2e/app-dir/rewrites-redirects/app/page.tsx | 1 + .../e2e/app-dir/rewrites-redirects/next.config.js | 9 +++++++++ .../rewrites-redirects/rewrites-redirects.test.ts | 15 +++++++++++++++ 3 files changed, 25 insertions(+) diff --git a/test/e2e/app-dir/rewrites-redirects/app/page.tsx b/test/e2e/app-dir/rewrites-redirects/app/page.tsx index 320fce3be3f9..9039e7df0532 100644 --- a/test/e2e/app-dir/rewrites-redirects/app/page.tsx +++ b/test/e2e/app-dir/rewrites-redirects/app/page.tsx @@ -26,6 +26,7 @@ export default function Page() { + ) } diff --git a/test/e2e/app-dir/rewrites-redirects/next.config.js b/test/e2e/app-dir/rewrites-redirects/next.config.js index 1247ad2d156b..9f1044941768 100644 --- a/test/e2e/app-dir/rewrites-redirects/next.config.js +++ b/test/e2e/app-dir/rewrites-redirects/next.config.js @@ -11,4 +11,13 @@ module.exports = { }, ] }, + async redirects() { + return [ + { + source: '/config-redirect-before', + destination: '/config-redirect-after', + permanent: true, + }, + ] + }, } diff --git a/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts b/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts index 208ad75eea1c..d80d0914d528 100644 --- a/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts +++ b/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts @@ -20,6 +20,9 @@ describe('redirects and rewrites', () => { }) afterAll(() => next.destroy()) + /** + * All test will use a link/button to navigate to '/*-before' which should be redirected by correct redirect/rewrite to '/*-after' + */ describe.each(['link', 'button'])('navigation using %s', (testType) => { it('should rewrite from middleware correctly', async () => { const browser = await webdriver(next.url, '/') @@ -56,5 +59,17 @@ describe('redirects and rewrites', () => { const url = new URL(await browser.url()) expect(url.pathname).toEndWith('-before') }) + + it('should redirect from next.config.js correctly', async () => { + const browser = await webdriver(next.url, '/') + browser.elementById(`${testType}-config-redirect`).click() + await waitFor(200) + + expect(await browser.elementById('page').text()).toBe( + 'config-redirect-after' + ) + const url = new URL(await browser.url()) + expect(url.pathname).toEndWith('-after') + }) }) }) From 577bd5dd2a7455c4db2757296598ff1f3aff20bb Mon Sep 17 00:00:00 2001 From: Jan Kaifer Date: Tue, 13 Dec 2022 09:35:13 +0100 Subject: [PATCH 08/11] Add test for catchall rewrite --- .../rewrites-redirects/app/[...params]/page.tsx | 3 +++ .../rewrites-redirects/app/[param]/page.tsx | 3 --- test/e2e/app-dir/rewrites-redirects/app/page.tsx | 15 +++++++++------ .../e2e/app-dir/rewrites-redirects/next.config.js | 5 +++++ .../rewrites-redirects/rewrites-redirects.test.ts | 12 ++++++++++++ 5 files changed, 29 insertions(+), 9 deletions(-) create mode 100644 test/e2e/app-dir/rewrites-redirects/app/[...params]/page.tsx delete mode 100644 test/e2e/app-dir/rewrites-redirects/app/[param]/page.tsx diff --git a/test/e2e/app-dir/rewrites-redirects/app/[...params]/page.tsx b/test/e2e/app-dir/rewrites-redirects/app/[...params]/page.tsx new file mode 100644 index 000000000000..ae1ece0fecaa --- /dev/null +++ b/test/e2e/app-dir/rewrites-redirects/app/[...params]/page.tsx @@ -0,0 +1,3 @@ +export default function Page({ params: { params } }) { + return
{params.join('/')}
+} diff --git a/test/e2e/app-dir/rewrites-redirects/app/[param]/page.tsx b/test/e2e/app-dir/rewrites-redirects/app/[param]/page.tsx deleted file mode 100644 index ffd4f6b90853..000000000000 --- a/test/e2e/app-dir/rewrites-redirects/app/[param]/page.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function Page({ params: { param } }) { - return
{param}
-} diff --git a/test/e2e/app-dir/rewrites-redirects/app/page.tsx b/test/e2e/app-dir/rewrites-redirects/app/page.tsx index 9039e7df0532..b18a6b1b73ce 100644 --- a/test/e2e/app-dir/rewrites-redirects/app/page.tsx +++ b/test/e2e/app-dir/rewrites-redirects/app/page.tsx @@ -3,17 +3,16 @@ import Link from 'next/link' import { useRouter } from 'next/navigation' -const Test = ({ page }: { page: string }) => { +const Test = ({ page, href }: { page: string; href?: string }) => { const router = useRouter() + href ??= `/${page}-before` + return ( <> - + Link to /{page}-before - @@ -27,6 +26,10 @@ export default function Page() { + ) } diff --git a/test/e2e/app-dir/rewrites-redirects/next.config.js b/test/e2e/app-dir/rewrites-redirects/next.config.js index 9f1044941768..bc7f7ab9233f 100644 --- a/test/e2e/app-dir/rewrites-redirects/next.config.js +++ b/test/e2e/app-dir/rewrites-redirects/next.config.js @@ -18,6 +18,11 @@ module.exports = { destination: '/config-redirect-after', permanent: true, }, + { + source: '/config-redirect-catchall-before/:path*', + destination: '/config-redirect-catchall-after/:path*', + permanent: true, + }, ] }, } diff --git a/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts b/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts index d80d0914d528..f167e319b618 100644 --- a/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts +++ b/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts @@ -71,5 +71,17 @@ describe('redirects and rewrites', () => { const url = new URL(await browser.url()) expect(url.pathname).toEndWith('-after') }) + + it('should redirect using catchall from next.config.js correctly', async () => { + const browser = await webdriver(next.url, '/') + browser.elementById(`${testType}-config-redirect-catchall`).click() + await waitFor(200) + + expect(await browser.elementById('page').text()).toBe( + 'config-redirect-catchall-after/thing' + ) + const url = new URL(await browser.url()) + expect(url.pathname).toEndWith('-after/thing') + }) }) }) From 668da65f4580ef947eb56132f390771c961bbbc2 Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Mon, 19 Dec 2022 10:41:52 +0100 Subject: [PATCH 09/11] Use createNextDescribe --- .../rewrites-redirects.test.ts | 144 +++++++++--------- 1 file changed, 70 insertions(+), 74 deletions(-) diff --git a/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts b/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts index f167e319b618..9094f1612145 100644 --- a/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts +++ b/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts @@ -1,87 +1,83 @@ -import { createNext, FileRef } from 'e2e-utils' -import { NextInstance } from 'test/lib/next-modes/base' +import { createNextDescribe } from 'e2e-utils' import webdriver from 'next-webdriver' import { waitFor } from 'next-test-utils' -describe('redirects and rewrites', () => { - let next: NextInstance +createNextDescribe( + 'redirects and rewrites', + { + files: __dirname, + dependencies: { + react: 'latest', + 'react-dom': 'latest', + typescript: 'latest', + '@types/react': 'latest', + '@types/node': 'latest', + }, + }, + ({ next }) => { + /** + * All test will use a link/button to navigate to '/*-before' which should be redirected by correct redirect/rewrite to '/*-after' + */ + describe.each(['link', 'button'])('navigation using %s', (testType) => { + it('should rewrite from middleware correctly', async () => { + const browser = await next.browser('/') + browser.elementById(`${testType}-middleware-rewrite`).click() + await waitFor(200) - beforeAll(async () => { - next = await createNext({ - files: new FileRef(__dirname), - dependencies: { - react: 'latest', - 'react-dom': 'latest', - typescript: 'latest', - '@types/react': 'latest', - '@types/node': 'latest', - }, - }) - }) - afterAll(() => next.destroy()) + expect(await browser.elementById('page').text()).toBe( + 'middleware-rewrite-after' + ) + const url = new URL(await browser.url()) + expect(url.pathname).toEndWith('-before') + }) - /** - * All test will use a link/button to navigate to '/*-before' which should be redirected by correct redirect/rewrite to '/*-after' - */ - describe.each(['link', 'button'])('navigation using %s', (testType) => { - it('should rewrite from middleware correctly', async () => { - const browser = await webdriver(next.url, '/') - browser.elementById(`${testType}-middleware-rewrite`).click() - await waitFor(200) + it('should redirect from middleware correctly', async () => { + const browser = await next.browser('/') + browser.elementById(`${testType}-middleware-redirect`).click() + await waitFor(200) - expect(await browser.elementById('page').text()).toBe( - 'middleware-rewrite-after' - ) - const url = new URL(await browser.url()) - expect(url.pathname).toEndWith('-before') - }) + expect(await browser.elementById('page').text()).toBe( + 'middleware-redirect-after' + ) + const url = new URL(await browser.url()) + expect(url.pathname).toEndWith('-after') + }) - it('should redirect from middleware correctly', async () => { - const browser = await webdriver(next.url, '/') - browser.elementById(`${testType}-middleware-redirect`).click() - await waitFor(200) + it('should rewrite from next.config.js correctly', async () => { + const browser = await next.browser('/') + browser.elementById(`${testType}-config-rewrite`).click() + await waitFor(200) - expect(await browser.elementById('page').text()).toBe( - 'middleware-redirect-after' - ) - const url = new URL(await browser.url()) - expect(url.pathname).toEndWith('-after') - }) + expect(await browser.elementById('page').text()).toBe( + 'config-rewrite-after' + ) + const url = new URL(await browser.url()) + expect(url.pathname).toEndWith('-before') + }) - it('should rewrite from next.config.js correctly', async () => { - const browser = await webdriver(next.url, '/') - browser.elementById(`${testType}-config-rewrite`).click() - await waitFor(200) + it('should redirect from next.config.js correctly', async () => { + const browser = await next.browser('/') + browser.elementById(`${testType}-config-redirect`).click() + await waitFor(200) - expect(await browser.elementById('page').text()).toBe( - 'config-rewrite-after' - ) - const url = new URL(await browser.url()) - expect(url.pathname).toEndWith('-before') - }) - - it('should redirect from next.config.js correctly', async () => { - const browser = await webdriver(next.url, '/') - browser.elementById(`${testType}-config-redirect`).click() - await waitFor(200) - - expect(await browser.elementById('page').text()).toBe( - 'config-redirect-after' - ) - const url = new URL(await browser.url()) - expect(url.pathname).toEndWith('-after') - }) + expect(await browser.elementById('page').text()).toBe( + 'config-redirect-after' + ) + const url = new URL(await browser.url()) + expect(url.pathname).toEndWith('-after') + }) - it('should redirect using catchall from next.config.js correctly', async () => { - const browser = await webdriver(next.url, '/') - browser.elementById(`${testType}-config-redirect-catchall`).click() - await waitFor(200) + it('should redirect using catchall from next.config.js correctly', async () => { + const browser = await next.browser('/') + browser.elementById(`${testType}-config-redirect-catchall`).click() + await waitFor(200) - expect(await browser.elementById('page').text()).toBe( - 'config-redirect-catchall-after/thing' - ) - const url = new URL(await browser.url()) - expect(url.pathname).toEndWith('-after/thing') + expect(await browser.elementById('page').text()).toBe( + 'config-redirect-catchall-after/thing' + ) + const url = new URL(await browser.url()) + expect(url.pathname).toEndWith('-after/thing') + }) }) - }) -}) + } +) From 9249b462266268adc273bc9e67890061888b1e80 Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Mon, 19 Dec 2022 10:42:15 +0100 Subject: [PATCH 10/11] Remove unused import --- test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts b/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts index 9094f1612145..21afd69150e2 100644 --- a/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts +++ b/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts @@ -1,5 +1,4 @@ import { createNextDescribe } from 'e2e-utils' -import webdriver from 'next-webdriver' import { waitFor } from 'next-test-utils' createNextDescribe( From dcf12c97e8ebf8caf5ae6075fa2885177b74f6c5 Mon Sep 17 00:00:00 2001 From: Jan Kaifer Date: Mon, 19 Dec 2022 11:41:57 +0100 Subject: [PATCH 11/11] remove waitFor from tests --- .../app/[...params]/page.tsx | 6 ++- .../rewrites-redirects.test.ts | 51 ++++++++----------- 2 files changed, 25 insertions(+), 32 deletions(-) diff --git a/test/e2e/app-dir/rewrites-redirects/app/[...params]/page.tsx b/test/e2e/app-dir/rewrites-redirects/app/[...params]/page.tsx index ae1ece0fecaa..013b668d1e8e 100644 --- a/test/e2e/app-dir/rewrites-redirects/app/[...params]/page.tsx +++ b/test/e2e/app-dir/rewrites-redirects/app/[...params]/page.tsx @@ -1,3 +1,7 @@ export default function Page({ params: { params } }) { - return
{params.join('/')}
+ return ( +
+ {params.join('/')} +
+ ) } diff --git a/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts b/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts index 21afd69150e2..ae79abb789b9 100644 --- a/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts +++ b/test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts @@ -1,5 +1,4 @@ import { createNextDescribe } from 'e2e-utils' -import { waitFor } from 'next-test-utils' createNextDescribe( 'redirects and rewrites', @@ -20,60 +19,50 @@ createNextDescribe( describe.each(['link', 'button'])('navigation using %s', (testType) => { it('should rewrite from middleware correctly', async () => { const browser = await next.browser('/') - browser.elementById(`${testType}-middleware-rewrite`).click() - await waitFor(200) - - expect(await browser.elementById('page').text()).toBe( - 'middleware-rewrite-after' - ) + await browser + .elementById(`${testType}-middleware-rewrite`) + .click() + .waitForElementByCss('.page_middleware-rewrite-after') const url = new URL(await browser.url()) expect(url.pathname).toEndWith('-before') }) it('should redirect from middleware correctly', async () => { const browser = await next.browser('/') - browser.elementById(`${testType}-middleware-redirect`).click() - await waitFor(200) - - expect(await browser.elementById('page').text()).toBe( - 'middleware-redirect-after' - ) + await browser + .elementById(`${testType}-middleware-redirect`) + .click() + .waitForElementByCss('.page_middleware-redirect-after') const url = new URL(await browser.url()) expect(url.pathname).toEndWith('-after') }) it('should rewrite from next.config.js correctly', async () => { const browser = await next.browser('/') - browser.elementById(`${testType}-config-rewrite`).click() - await waitFor(200) - - expect(await browser.elementById('page').text()).toBe( - 'config-rewrite-after' - ) + await browser + .elementById(`${testType}-config-rewrite`) + .click() + .waitForElementByCss('.page_config-rewrite-after') const url = new URL(await browser.url()) expect(url.pathname).toEndWith('-before') }) it('should redirect from next.config.js correctly', async () => { const browser = await next.browser('/') - browser.elementById(`${testType}-config-redirect`).click() - await waitFor(200) - - expect(await browser.elementById('page').text()).toBe( - 'config-redirect-after' - ) + await browser + .elementById(`${testType}-config-redirect`) + .click() + .waitForElementByCss('.page_config-redirect-after') const url = new URL(await browser.url()) expect(url.pathname).toEndWith('-after') }) it('should redirect using catchall from next.config.js correctly', async () => { const browser = await next.browser('/') - browser.elementById(`${testType}-config-redirect-catchall`).click() - await waitFor(200) - - expect(await browser.elementById('page').text()).toBe( - 'config-redirect-catchall-after/thing' - ) + await browser + .elementById(`${testType}-config-redirect-catchall`) + .click() + .waitForElementByCss('.page_config-redirect-catchall-after_thing') const url = new URL(await browser.url()) expect(url.pathname).toEndWith('-after/thing') })