mirror of
https://github.com/denoland/deno.git
synced 2025-08-03 10:33:54 +00:00
feat: implement Web Cache API (#15829)
This commit is contained in:
parent
1156f726a9
commit
b312279e58
32 changed files with 1632 additions and 6 deletions
96
cli/tests/unit/cache_api_test.ts
Normal file
96
cli/tests/unit/cache_api_test.ts
Normal file
|
@ -0,0 +1,96 @@
|
|||
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
|
||||
import {
|
||||
assert,
|
||||
assertEquals,
|
||||
assertFalse,
|
||||
assertRejects,
|
||||
} from "./test_util.ts";
|
||||
|
||||
Deno.test(async function cacheStorage() {
|
||||
const cacheName = "cache-v1";
|
||||
const _cache = await caches.open(cacheName);
|
||||
assert(await caches.has(cacheName));
|
||||
assert(await caches.delete(cacheName));
|
||||
assertFalse(await caches.has(cacheName));
|
||||
});
|
||||
|
||||
Deno.test(async function cacheApi() {
|
||||
const cacheName = "cache-v1";
|
||||
const cache = await caches.open(cacheName);
|
||||
// Test cache.put() with url string as key.
|
||||
{
|
||||
const req = "https://deno.com";
|
||||
await cache.put(req, new Response("deno.com - key is string"));
|
||||
const res = await cache.match(req);
|
||||
assertEquals(await res?.text(), "deno.com - key is string");
|
||||
assert(await cache.delete(req));
|
||||
}
|
||||
// Test cache.put() with url instance as key.
|
||||
{
|
||||
const req = new URL("https://deno.com");
|
||||
await cache.put(req, new Response("deno.com - key is URL"));
|
||||
const res = await cache.match(req);
|
||||
assertEquals(await res?.text(), "deno.com - key is URL");
|
||||
assert(await cache.delete(req));
|
||||
}
|
||||
// Test cache.put() with request instance as key.
|
||||
{
|
||||
const req = new Request("https://deno.com");
|
||||
await cache.put(req, new Response("deno.com - key is Request"));
|
||||
const res = await cache.match(req);
|
||||
assertEquals(await res?.text(), "deno.com - key is Request");
|
||||
assert(await cache.delete(req));
|
||||
}
|
||||
|
||||
// Test cache.put() throws with response Vary header set to *.
|
||||
{
|
||||
const req = new Request("https://deno.com");
|
||||
assertRejects(
|
||||
async () => {
|
||||
await cache.put(
|
||||
req,
|
||||
new Response("deno.com - key is Request", {
|
||||
headers: { Vary: "*" },
|
||||
}),
|
||||
);
|
||||
},
|
||||
TypeError,
|
||||
"Vary header must not contain '*'",
|
||||
);
|
||||
}
|
||||
|
||||
// Test cache.match() with same url but different values for Vary header.
|
||||
{
|
||||
await cache.put(
|
||||
new Request("https://example.com/", {
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
},
|
||||
}),
|
||||
Response.json({ msg: "hello world" }, {
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
"Vary": "Accept",
|
||||
},
|
||||
}),
|
||||
);
|
||||
const res = await cache.match("https://example.com/");
|
||||
assertEquals(res, undefined);
|
||||
const res2 = await cache.match(
|
||||
new Request("https://example.com/", {
|
||||
headers: { "Accept": "text/html" },
|
||||
}),
|
||||
);
|
||||
assertEquals(res2, undefined);
|
||||
|
||||
const res3 = await cache.match(
|
||||
new Request("https://example.com/", {
|
||||
headers: { "Accept": "application/json" },
|
||||
}),
|
||||
);
|
||||
assertEquals(await res3?.json(), { msg: "hello world" });
|
||||
}
|
||||
|
||||
assert(await caches.delete(cacheName));
|
||||
assertFalse(await caches.has(cacheName));
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue