diff --git a/examples/e2e/pages-router/e2e/api.test.ts b/examples/e2e/pages-router/e2e/api.test.ts old mode 100644 new mode 100755 index 12800f56..083d69ae --- a/examples/e2e/pages-router/e2e/api.test.ts +++ b/examples/e2e/pages-router/e2e/api.test.ts @@ -4,5 +4,40 @@ test("should not fail on an api route", async ({ page }) => { const result = await page.goto("/api/hello"); expect(result?.status()).toBe(200); const body = await result?.json(); - expect(body).toEqual({ hello: "world" }); + expect(body).toEqual({ hello: "OpenNext rocks!" }); +}); + +test("should work with dynamic api route", async ({ page }) => { + const result = await page.goto("/api/dynamic/opennext"); + expect(result?.status()).toBe(200); + const body = await result?.json(); + expect(body).toEqual({ slug: "opennext" }); +}); + +test("should work with catch all api route", async ({ page }) => { + const result = await page.goto("/api/dynamic/catch-all/first/second/third"); + expect(result?.status()).toBe(200); + const body = await result?.json(); + expect(body).toEqual({ slug: ["first", "second", "third"] }); +}); + +test("dynamic route should take precedence over catch all", async ({ page }) => { + const result = await page.goto("/api/dynamic/catch-all"); + expect(result?.status()).toBe(200); + const body = await result?.json(); + expect(body).toEqual({ slug: "catch-all" }); +}); + +test("should work with optional catch all api route", async ({ page }) => { + const result = await page.goto("/api/dynamic/catch-all-optional"); + expect(result?.status()).toBe(200); + const body = await result?.json(); + expect(body).toEqual({ optional: "true" }); +}); + +test("predefined api route should take presedence", async ({ page }) => { + const result = await page.goto("/api/dynamic/precedence"); + expect(result?.status()).toBe(200); + const body = await result?.json(); + expect(body).toEqual({ precedence: "true" }); }); diff --git a/examples/e2e/pages-router/src/pages/api/dynamic/[slug].ts b/examples/e2e/pages-router/src/pages/api/dynamic/[slug].ts new file mode 100755 index 00000000..b8475cb7 --- /dev/null +++ b/examples/e2e/pages-router/src/pages/api/dynamic/[slug].ts @@ -0,0 +1,6 @@ +import type { NextApiRequest, NextApiResponse } from "next"; + +export default function handler(req: NextApiRequest, res: NextApiResponse) { + const { slug } = req.query; + res.status(200).json({ slug }); +} diff --git a/examples/e2e/pages-router/src/pages/api/dynamic/catch-all-optional/[[...slug]].ts b/examples/e2e/pages-router/src/pages/api/dynamic/catch-all-optional/[[...slug]].ts new file mode 100755 index 00000000..c2710670 --- /dev/null +++ b/examples/e2e/pages-router/src/pages/api/dynamic/catch-all-optional/[[...slug]].ts @@ -0,0 +1,5 @@ +import type { NextApiRequest, NextApiResponse } from "next"; + +export default function handler(req: NextApiRequest, res: NextApiResponse) { + res.status(200).json({ optional: "true" }); +} diff --git a/examples/e2e/pages-router/src/pages/api/dynamic/catch-all/[...slug].ts b/examples/e2e/pages-router/src/pages/api/dynamic/catch-all/[...slug].ts new file mode 100755 index 00000000..4589ec95 --- /dev/null +++ b/examples/e2e/pages-router/src/pages/api/dynamic/catch-all/[...slug].ts @@ -0,0 +1,9 @@ +import type { NextApiRequest, NextApiResponse } from "next"; + +export default function handler(req: NextApiRequest, res: NextApiResponse) { + const { slug } = req.query; + if (!Array.isArray(slug)) { + return res.status(500).json({ error: "Invalid" }); + } + res.status(200).json({ slug }); +} diff --git a/examples/e2e/pages-router/src/pages/api/dynamic/precedence/index.ts b/examples/e2e/pages-router/src/pages/api/dynamic/precedence/index.ts new file mode 100755 index 00000000..c7a2a20f --- /dev/null +++ b/examples/e2e/pages-router/src/pages/api/dynamic/precedence/index.ts @@ -0,0 +1,5 @@ +import type { NextApiRequest, NextApiResponse } from "next"; + +export default function handler(req: NextApiRequest, res: NextApiResponse) { + res.status(200).json({ precedence: "true" }); +} diff --git a/examples/e2e/pages-router/src/pages/api/hello.ts b/examples/e2e/pages-router/src/pages/api/hello.ts old mode 100644 new mode 100755 index 41b59cbc..f2f8f2bb --- a/examples/e2e/pages-router/src/pages/api/hello.ts +++ b/examples/e2e/pages-router/src/pages/api/hello.ts @@ -1,4 +1,4 @@ -// Next.js API route support: https://nextjs.org/docs/api-routes/introduction +// Next.js API route support: https://nextjs.org/docs/pages/building-your-application/routing/api-routes import type { NextApiRequest, NextApiResponse } from "next"; type Data = { @@ -6,5 +6,5 @@ type Data = { }; export default function handler(req: NextApiRequest, res: NextApiResponse) { - res.status(200).json({ hello: "world" }); + res.status(200).json({ hello: "OpenNext rocks!" }); }