forked from denoland/std
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathunstable_route_test.ts
76 lines (66 loc) · 2.58 KB
/
unstable_route_test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
import { type Route, route } from "./unstable_route.ts";
import { assertEquals } from "../assert/equals.ts";
const routes: Route[] = [
{
pattern: new URLPattern({ pathname: "/about" }),
handler: (request: Request) => new Response(new URL(request.url).pathname),
},
{
pattern: new URLPattern({ pathname: "/users/:id" }),
handler: (_request, params) => new Response(params?.pathname.groups.id),
},
{
pattern: new URLPattern({ pathname: "/users/:id" }),
method: "POST",
handler: () => new Response("Done"),
},
{
pattern: new URLPattern({ pathname: "/resource" }),
method: ["GET", "HEAD"],
handler: (request: Request) =>
new Response(request.method === "HEAD" ? null : "Ok"),
},
];
function defaultHandler(request: Request) {
return new Response(new URL(request.url).pathname, { status: 404 });
}
Deno.test("route()", async (t) => {
const handler = route(routes, defaultHandler);
await t.step("handles static routes", async () => {
const request = new Request("http://example.com/about");
const response = await handler(request);
assertEquals(response?.status, 200);
assertEquals(await response?.text(), "/about");
});
await t.step("handles dynamic routes", async () => {
const request1 = new Request("http://example.com/users/123");
const response1 = await handler(request1);
assertEquals(await response1?.text(), "123");
assertEquals(response1?.status, 200);
const request2 = new Request("http://example.com/users/123", {
method: "POST",
});
const response2 = await handler(request2);
assertEquals(await response2?.text(), "Done");
assertEquals(response2?.status, 200);
});
await t.step("handles default handler", async () => {
const request = new Request("http://example.com/not-found");
const response = await handler(request);
assertEquals(response?.status, 404);
assertEquals(await response?.text(), "/not-found");
});
await t.step("handles multiple methods", async () => {
const getMethodRequest = new Request("http://example.com/resource");
const getMethodResponse = await handler(getMethodRequest);
assertEquals(getMethodResponse?.status, 200);
assertEquals(await getMethodResponse?.text(), "Ok");
const headMethodRequest = new Request("http://example.com/resource", {
method: "HEAD",
});
const headMethodResponse = await handler(headMethodRequest);
assertEquals(headMethodResponse?.status, 200);
assertEquals(await headMethodResponse?.text(), "");
});
});