-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils_test.ts
88 lines (75 loc) · 2.19 KB
/
utils_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
77
78
79
80
81
82
83
84
85
86
87
88
import { computeETagByStrategy, reason, stringifyHeaders } from "./utils.ts";
import {
assertEquals,
assertSpyCalls,
assertThrows,
describe,
it,
spy,
} from "./_dev_deps.ts";
describe("reason", () => {
it("should throw error", () => {
assertThrows(() => reason("test")(Error()));
});
});
describe("stringifyHeaders", () => {
it("should return deserialized string", () => {
const table: [Headers, string][] = [
[new Headers(), ""],
[new Headers({ a: "" }), "a: "],
[new Headers({ "a": "a" }), "a: a"],
[new Headers({ "a": "", b: "" }), "a: \nb: "],
[new Headers({ b: "", a: "" }), "a: \nb: "],
[
new Headers({ c: "c", b: "b", a: "a", "x-a": "" }),
"a: a\nb: b\nc: c\nx-a: ",
],
[
new Headers({ aaa: "", a: "", aa: "" }),
"a: \naa: \naaa: ",
],
];
table.forEach(([headers, expected]) => {
assertEquals(stringifyHeaders(headers), expected);
});
});
});
describe("computeETagByStrategy", () => {
it("should pass body only if the header is none", async () => {
const digest = spy((data: ArrayBuffer) => {
assertEquals(
new TextDecoder().decode(data),
"a",
);
return new ArrayBuffer(0);
});
const etag = await computeETagByStrategy(new Response("a"), {
digest,
strong: false,
headers: [],
});
assertSpyCalls(digest, 1);
assertEquals(etag, { weak: true, tag: "" });
});
it("should pass header and body stream", async () => {
const digest = spy((data: ArrayBuffer) => {
assertEquals(
new TextDecoder().decode(data),
"content-type: text/plain;charset=UTF-8\n\na",
);
return new ArrayBuffer(0);
});
const etag = await computeETagByStrategy(new Response("a"), {
digest,
strong: true,
headers: ["content-type"],
});
assertSpyCalls(digest, 1);
assertEquals(etag, { weak: false, tag: "" });
});
it("should pass header and body stream by default", async () => {
const etag = await computeETagByStrategy(new Response("abc"));
const etagc = "52d3e27d9e12c76aa045b5d72bab675df54df141";
assertEquals(etag, { weak: true, tag: etagc });
});
});