Skip to content

Commit e75150a

Browse files
authored
chore: Sync e2e with AWS (#839)
1 parent 90f451d commit e75150a

File tree

7 files changed

+92
-18
lines changed

7 files changed

+92
-18
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
export default async function Page({
2+
searchParams,
3+
}: {
4+
searchParams: Promise<{ [key: string]: string | string[] | undefined }>;
5+
}) {
6+
const q = (await searchParams).q;
7+
8+
return (
9+
<>
10+
<div data-testid="searchParams">q: {q}</div>
11+
</>
12+
);
13+
}

examples/e2e/app-router/app/config-redirect/page.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,15 @@ export default function RedirectDestination() {
33
<div>
44
<h1>I was redirected from next.config.js</h1>
55
<p>/next-config-redirect =&gt; /config-redirect</p>
6+
<a data-testid="redirect-link" href="/next-config-redirect-encoding?q=äöå€">
7+
/next-config-redirect-encoding?q=äöå€
8+
</a>
9+
<a
10+
data-testid="redirect-link-already-encoded"
11+
href="/next-config-redirect-encoding?q=%C3%A4%C3%B6%C3%A5%E2%82%AC"
12+
>
13+
/next-config-redirect-encoding?q=%C3%A4%C3%B6%C3%A5%E2%82%AC
14+
</a>
615
</div>
716
);
817
}

examples/e2e/app-router/e2e/config.redirect.test.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,36 @@ test.describe("Next Config Redirect", () => {
7272
});
7373
await expect(el).toBeVisible();
7474
});
75+
test("Should properly encode the Location header for redirects with query params", async ({ page }) => {
76+
await page.goto("/config-redirect");
77+
const responsePromise = page.waitForResponse((response) => {
78+
return response.status() === 307;
79+
});
80+
page.getByTestId("redirect-link").click();
81+
const res = await responsePromise;
82+
await page.waitForURL("/config-redirect/dest?q=äöå€");
83+
84+
const locationHeader = res.headers().location;
85+
expect(locationHeader).toBe("/config-redirect/dest?q=%C3%A4%C3%B6%C3%A5%E2%82%AC");
86+
expect(res.status()).toBe(307);
87+
88+
const searchParams = page.getByTestId("searchParams");
89+
await expect(searchParams).toHaveText("q: äöå€");
90+
});
91+
test("Should respect already encoded query params", async ({ page }) => {
92+
await page.goto("/config-redirect");
93+
const responsePromise = page.waitForResponse((response) => {
94+
return response.status() === 307;
95+
});
96+
page.getByTestId("redirect-link-already-encoded").click();
97+
const res = await responsePromise;
98+
await page.waitForURL("/config-redirect/dest?q=äöå€");
99+
100+
const locationHeader = res.headers().location;
101+
expect(locationHeader).toBe("/config-redirect/dest?q=%C3%A4%C3%B6%C3%A5%E2%82%AC");
102+
expect(res.status()).toBe(307);
103+
104+
const searchParams = page.getByTestId("searchParams");
105+
await expect(searchParams).toHaveText("q: äöå€");
106+
});
75107
});
Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,4 @@
11
import { expect, test } from "@playwright/test";
2-
import { validateMd5 } from "../../utils";
3-
4-
/*
5-
* `curl -s https://opennext.js.org/share.png | md5sum`
6-
* This is the MD5 hash of the image. It is used to validate the image content.
7-
*/
8-
const OPENNEXT_PNG_MD5 = "405f45cc3397b09717a13ebd6f1e027b";
92

103
test("Middleware Redirect", async ({ page, context }) => {
114
await page.goto("/");
@@ -25,14 +18,3 @@ test("Middleware Redirect", async ({ page, context }) => {
2518
el = page.getByText("Redirect Destination", { exact: true });
2619
await expect(el).toBeVisible();
2720
});
28-
29-
test("Middleware Rewrite External Image", async ({ page }) => {
30-
await page.goto("/rewrite-external");
31-
page.on("response", async (response) => {
32-
expect(response.status()).toBe(200);
33-
expect(response.headers()["content-type"]).toBe("image/png");
34-
expect(response.headers()["cache-control"]).toBe("max-age=600");
35-
const bodyBuffer = await response.body();
36-
expect(validateMd5(bodyBuffer, OPENNEXT_PNG_MD5)).toBe(true);
37-
});
38-
});

examples/e2e/app-router/e2e/middleware.rewrite.test.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
11
import { expect, test } from "@playwright/test";
2+
import { validateMd5 } from "../../utils";
3+
4+
/*
5+
* `curl -s https://opennext.js.org/share.png | md5sum`
6+
* This is the MD5 hash of the image. It is used to validate the image content.
7+
*/
8+
const OPENNEXT_PNG_MD5 = "405f45cc3397b09717a13ebd6f1e027b";
29

310
test("Middleware Rewrite", async ({ page }) => {
411
await page.goto("/");
@@ -14,3 +21,23 @@ test("Middleware Rewrite", async ({ page }) => {
1421
el = page.getByText("Rewritten Destination", { exact: true });
1522
await expect(el).toBeVisible();
1623
});
24+
25+
test("Middleware Rewrite External Image", async ({ page }) => {
26+
await page.goto("/rewrite-external");
27+
page.on("response", async (response) => {
28+
expect(response.status()).toBe(200);
29+
expect(response.headers()["content-type"]).toBe("image/png");
30+
expect(response.headers()["cache-control"]).toBe("max-age=600");
31+
const bodyBuffer = await response.body();
32+
expect(validateMd5(bodyBuffer, OPENNEXT_PNG_MD5)).toBe(true);
33+
});
34+
});
35+
36+
test("Middleware Rewrite Status Code", async ({ page }) => {
37+
await page.goto("/rewrite-status-code");
38+
const el = page.getByText("Rewritten Destination", { exact: true });
39+
await expect(el).toBeVisible();
40+
page.on("response", async (response) => {
41+
expect(response.status()).toBe(403);
42+
});
43+
});

examples/e2e/app-router/middleware.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ export function middleware(request: NextRequest) {
2828
const u = new URL("https://opennext.js.org/share.png");
2929
return NextResponse.rewrite(u);
3030
}
31+
if (path === "/rewrite-status-code") {
32+
const u = new URL("/rewrite-destination", `${protocol}://${host}`);
33+
return NextResponse.rewrite(u, {
34+
status: 403,
35+
});
36+
}
3137
if (path === "/cookies") {
3238
const res = NextResponse.next();
3339
res.cookies.set("foo", "bar");

examples/e2e/app-router/next.config.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@ const nextConfig: NextConfig = {
5959
basePath: false,
6060
locale: false,
6161
},
62+
{
63+
source: "/next-config-redirect-encoding",
64+
destination: "/config-redirect/dest",
65+
permanent: false,
66+
},
6267
];
6368
},
6469
async headers() {

0 commit comments

Comments
 (0)