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
getStaticProps
page
getServerSideProps
page
getStaticProps
page