diff --git a/tests/e2e/edge-middleware.test.ts b/tests/e2e/edge-middleware.test.ts index e78333c81d..59eb5b96fc 100644 --- a/tests/e2e/edge-middleware.test.ts +++ b/tests/e2e/edge-middleware.test.ts @@ -63,11 +63,13 @@ test.describe('json data', () => { describeLabel: 'NextResponse.next() -> getServerSideProps page', selector: 'NextResponse.next()#getServerSideProps', jsonPathMatcher: '/link/next-getserversideprops.json', + assertLocale: true, }, { describeLabel: 'NextResponse.next() -> getStaticProps page', selector: 'NextResponse.next()#getStaticProps', jsonPathMatcher: '/link/next-getstaticprops.json', + assertLocale: true, }, { describeLabel: 'NextResponse.next() -> fully static page', @@ -78,11 +80,13 @@ test.describe('json data', () => { describeLabel: 'NextResponse.rewrite() -> getServerSideProps page', selector: 'NextResponse.rewrite()#getServerSideProps', jsonPathMatcher: '/link/rewrite-me-getserversideprops.json', + assertLocale: true, }, { describeLabel: 'NextResponse.rewrite() -> getStaticProps page', selector: 'NextResponse.rewrite()#getStaticProps', jsonPathMatcher: '/link/rewrite-me-getstaticprops.json', + assertLocale: true, }, ] @@ -144,10 +148,22 @@ test.describe('json data', () => { test.describe('with 18n', () => { for (const testConfig of testConfigs) { test.describe(testConfig.describeLabel, () => { - for (const { localeLabel, pageWithLinksPathname } of [ - { localeLabel: 'implicit default locale', pageWithLinksPathname: '/link' }, - { localeLabel: 'explicit default locale', pageWithLinksPathname: '/en/link' }, - { localeLabel: 'explicit non-default locale', pageWithLinksPathname: '/fr/link' }, + for (const { localeLabel, pageWithLinksPathname, expectedLocale } of [ + { + localeLabel: 'implicit default locale', + pageWithLinksPathname: '/link', + expectedLocale: 'en', + }, + { + localeLabel: 'explicit default locale', + pageWithLinksPathname: '/en/link', + expectedLocale: 'en', + }, + { + localeLabel: 'explicit non-default locale', + pageWithLinksPathname: '/fr/link', + expectedLocale: 'fr', + }, ]) { test.describe(localeLabel, () => { test('json data fetch', async ({ middlewareI18n, page }) => { @@ -189,6 +205,10 @@ test.describe('json data', () => { // we expect client navigation to work without browser reload expect(browserNavigationWorked).toBe(true) + + if (testConfig.assertLocale) { + await expect(page.getByTestId('current-locale')).toHaveText(expectedLocale) + } }) }) } diff --git a/tests/fixtures/middleware-i18n/middleware.js b/tests/fixtures/middleware-i18n/middleware.js index 3462214f1d..4f9fd51121 100644 --- a/tests/fixtures/middleware-i18n/middleware.js +++ b/tests/fixtures/middleware-i18n/middleware.js @@ -1,5 +1,8 @@ import { NextResponse } from 'next/server' +/** + * @param {import('next/server').NextRequest} request + */ export async function middleware(request) { const url = request.nextUrl @@ -17,11 +20,9 @@ export async function middleware(request) { } if (url.pathname.startsWith('/link/rewrite-me')) { - const rewriteUrl = new URL( - url.pathname.replace('/link/rewrite-me', '/link/rewrite-target'), - url, - ) - return NextResponse.rewrite(rewriteUrl, { + // use NextUrl to rewrite the URL as it does preserve the locale + url.pathname = url.pathname.replace('/link/rewrite-me', '/link/rewrite-target') + return NextResponse.rewrite(url, { headers: { 'x-middleware-test': 'link-rewrite', }, diff --git a/tests/fixtures/middleware-i18n/pages/link/next-getserversideprops.js b/tests/fixtures/middleware-i18n/pages/link/next-getserversideprops.js index f177bf770b..2103941f6f 100644 --- a/tests/fixtures/middleware-i18n/pages/link/next-getserversideprops.js +++ b/tests/fixtures/middleware-i18n/pages/link/next-getserversideprops.js @@ -1,15 +1,24 @@ -export default function Page() { +export default function Page({ locale, locales }) { return (

getServerSideProps page

+
Current locale:
+
{locale ?? 'N/A'}
+
All locales:
+
{locales ? locales.join(',') : 'N/A'}
) } -export function getServerSideProps() { +/** @type {import('next').GetServerSideProps} */ +export function getServerSideProps({ locale, locales }) { + console.log('NextResponse.next()#getServerSideProps', { locale, locales }) return { - props: {}, + props: { + locale, + locales, + }, } } diff --git a/tests/fixtures/middleware-i18n/pages/link/next-getstaticprops.js b/tests/fixtures/middleware-i18n/pages/link/next-getstaticprops.js index 847a6f626b..3ee72d4d56 100644 --- a/tests/fixtures/middleware-i18n/pages/link/next-getstaticprops.js +++ b/tests/fixtures/middleware-i18n/pages/link/next-getstaticprops.js @@ -1,15 +1,25 @@ -export default function Page() { +export default function Page({ locale, locales }) { return (

getStaticProps page

+
Current locale:
+
{locale ?? 'N/A'}
+
All locales:
+
{locales ? locales.join(',') : 'N/A'}
) } -export function getStaticProps() { +/** @type {import('next').GetStaticProps} */ +export function getStaticProps({ locale, locales }) { + console.log('NextResponse.next()#getStaticProps', { locale, locales }) return { - props: {}, + props: { + locale, + locales, + }, + revalidate: 5, } } diff --git a/tests/fixtures/middleware-i18n/pages/link/rewrite-target-getserversideprops.js b/tests/fixtures/middleware-i18n/pages/link/rewrite-target-getserversideprops.js index b621a86d93..c35cd844ad 100644 --- a/tests/fixtures/middleware-i18n/pages/link/rewrite-target-getserversideprops.js +++ b/tests/fixtures/middleware-i18n/pages/link/rewrite-target-getserversideprops.js @@ -1,15 +1,24 @@ -export default function Page() { +export default function Page({ locale, locales }) { return (

getServerSideProps page

+
Current locale:
+
{locale ?? 'N/A'}
+
All locales:
+
{locales ? locales.join(',') : 'N/A'}
) } -export function getServerSideProps() { +/** @type {import('next').GetServerSideProps} */ +export function getServerSideProps({ locale, locales }) { + console.log('NextResponse.rewrite()#getServerSideProps', { locale, locales }) return { - props: {}, + props: { + locale, + locales, + }, } } diff --git a/tests/fixtures/middleware-i18n/pages/link/rewrite-target-getstaticprops.js b/tests/fixtures/middleware-i18n/pages/link/rewrite-target-getstaticprops.js index 60ede7e031..deb659e868 100644 --- a/tests/fixtures/middleware-i18n/pages/link/rewrite-target-getstaticprops.js +++ b/tests/fixtures/middleware-i18n/pages/link/rewrite-target-getstaticprops.js @@ -1,15 +1,25 @@ -export default function Page() { +export default function Page({ locale, locales }) { return (

getStaticProps page

+
Current locale:
+
{locale ?? 'N/A'}
+
All locales:
+
{locales ? locales.join(',') : 'N/A'}
) } -export function getStaticProps() { +/** @type {import('next').GetStaticProps} */ +export function getStaticProps({ locale, locales }) { + console.log('NextResponse.rewrite()#getStaticProps', { locale, locales }) return { - props: {}, + props: { + locale, + locales, + }, + revalidate: 5, } }