summaryrefslogtreecommitdiff
path: root/cli/tests/unit/cache_api_test.ts
diff options
context:
space:
mode:
authorSatya Rohith <me@satyarohith.com>2022-09-28 17:41:12 +0530
committerGitHub <noreply@github.com>2022-09-28 17:41:12 +0530
commitb312279e58e51520a38e51cca317a09cdadd7cb4 (patch)
treea0c6f432042ba25b569c151bbe59f1e721788d0c /cli/tests/unit/cache_api_test.ts
parent1156f726a92d3d3985e591327c7526cd3e2b0473 (diff)
feat: implement Web Cache API (#15829)
Diffstat (limited to 'cli/tests/unit/cache_api_test.ts')
-rw-r--r--cli/tests/unit/cache_api_test.ts96
1 files changed, 96 insertions, 0 deletions
diff --git a/cli/tests/unit/cache_api_test.ts b/cli/tests/unit/cache_api_test.ts
new file mode 100644
index 000000000..4d7c6511b
--- /dev/null
+++ b/cli/tests/unit/cache_api_test.ts
@@ -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));
+});