From f3202c989222eeb7e49c1df9737c6f47454c5c57 Mon Sep 17 00:00:00 2001 From: magnus Date: Fri, 21 Mar 2025 09:58:16 +0100 Subject: [PATCH 1/2] add e2e for external rewrite in middleware in app-router --- examples/app-router/middleware.ts | 4 ++++ .../tests/appRouter/middleware.rewrite.test.ts | 14 ++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/examples/app-router/middleware.ts b/examples/app-router/middleware.ts index 183c88a08..fc84d75ac 100644 --- a/examples/app-router/middleware.ts +++ b/examples/app-router/middleware.ts @@ -24,6 +24,10 @@ export function middleware(request: NextRequest) { }, }); } + if (path === "/rewrite-external") { + const u = new URL("https://opennext.js.org/share.png"); + return NextResponse.rewrite(u); + } const requestHeaders = new Headers(); // Setting the Request Headers, this should be available in RSC requestHeaders.set("request-header", "request-header"); diff --git a/packages/tests-e2e/tests/appRouter/middleware.rewrite.test.ts b/packages/tests-e2e/tests/appRouter/middleware.rewrite.test.ts index 43118768f..4ddbb5e16 100644 --- a/packages/tests-e2e/tests/appRouter/middleware.rewrite.test.ts +++ b/packages/tests-e2e/tests/appRouter/middleware.rewrite.test.ts @@ -1,4 +1,8 @@ import { expect, test } from "@playwright/test"; +import { validateMd5 } from "../utils"; + +// md5sum of https://opennext.js.org/share.png +const OPENNEXT_PNG_MD5 = "405f45cc3397b09717a13ebd6f1e027b"; test("Middleware Rewrite", async ({ page }) => { await page.goto("/"); @@ -13,4 +17,14 @@ test("Middleware Rewrite", async ({ page }) => { await page.waitForURL("/rewrite"); el = page.getByText("Rewritten Destination", { exact: true }); await expect(el).toBeVisible(); + + // External rewrite should work in middleware + await page.goto("/rewrite-external"); + page.on("response", async (response) => { + expect(response.status()).toBe(200); + expect(response.headers()["content-type"]).toBe("image/png"); + expect(response.headers()["cache-control"]).toBe("max-age=600"); + const bodyBuffer = await response.body(); + expect(validateMd5(bodyBuffer, OPENNEXT_PNG_MD5)).toBe(true); + }); }); From 743a5b0db17b1c10bcfced4098adafedc1217363 Mon Sep 17 00:00:00 2001 From: magnus Date: Mon, 24 Mar 2025 08:56:23 +0100 Subject: [PATCH 2/2] review --- .../tests-e2e/tests/appRouter/middleware.rewrite.test.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/tests-e2e/tests/appRouter/middleware.rewrite.test.ts b/packages/tests-e2e/tests/appRouter/middleware.rewrite.test.ts index 4ddbb5e16..a89d85832 100644 --- a/packages/tests-e2e/tests/appRouter/middleware.rewrite.test.ts +++ b/packages/tests-e2e/tests/appRouter/middleware.rewrite.test.ts @@ -1,7 +1,10 @@ import { expect, test } from "@playwright/test"; import { validateMd5 } from "../utils"; -// md5sum of https://opennext.js.org/share.png +/* + * `curl -s https://opennext.js.org/share.png | md5sum` + * This is the MD5 hash of the image. It is used to validate the image content. + */ const OPENNEXT_PNG_MD5 = "405f45cc3397b09717a13ebd6f1e027b"; test("Middleware Rewrite", async ({ page }) => { @@ -17,8 +20,9 @@ test("Middleware Rewrite", async ({ page }) => { await page.waitForURL("/rewrite"); el = page.getByText("Rewritten Destination", { exact: true }); await expect(el).toBeVisible(); +}); - // External rewrite should work in middleware +test("Middleware Rewrite External Image", async ({ page }) => { await page.goto("/rewrite-external"); page.on("response", async (response) => { expect(response.status()).toBe(200);