summaryrefslogtreecommitdiff
path: root/std/http/cookie_test.ts
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2019-10-09 17:10:09 -0400
committerRyan Dahl <ry@tinyclouds.org>2019-10-09 17:10:09 -0400
commit151ce0266eb4de2c8fc600c81c192a5f791b6169 (patch)
tree7cb04016a1c7ee88adde83814548d7a9409dcde3 /std/http/cookie_test.ts
parenta355f7c807686918734416d91b79c26c21effba9 (diff)
Move everything into std subdir
Diffstat (limited to 'std/http/cookie_test.ts')
-rw-r--r--std/http/cookie_test.ts210
1 files changed, 210 insertions, 0 deletions
diff --git a/std/http/cookie_test.ts b/std/http/cookie_test.ts
new file mode 100644
index 000000000..da9110291
--- /dev/null
+++ b/std/http/cookie_test.ts
@@ -0,0 +1,210 @@
+// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
+import { ServerRequest, Response } from "./server.ts";
+import { getCookies, delCookie, setCookie } from "./cookie.ts";
+import { assert, assertEquals } from "../testing/asserts.ts";
+import { test } from "../testing/mod.ts";
+
+test({
+ name: "[HTTP] Cookie parser",
+ fn(): void {
+ const req = new ServerRequest();
+ req.headers = new Headers();
+ assertEquals(getCookies(req), {});
+ req.headers = new Headers();
+ req.headers.set("Cookie", "foo=bar");
+ assertEquals(getCookies(req), { foo: "bar" });
+
+ req.headers = new Headers();
+ req.headers.set("Cookie", "full=of ; tasty=chocolate");
+ assertEquals(getCookies(req), { full: "of ", tasty: "chocolate" });
+
+ req.headers = new Headers();
+ req.headers.set("Cookie", "igot=99; problems=but...");
+ assertEquals(getCookies(req), { igot: "99", problems: "but..." });
+
+ req.headers = new Headers();
+ req.headers.set("Cookie", "PREF=al=en-GB&f1=123; wide=1; SID=123");
+ assertEquals(getCookies(req), {
+ PREF: "al=en-GB&f1=123",
+ wide: "1",
+ SID: "123"
+ });
+ }
+});
+
+test({
+ name: "[HTTP] Cookie Delete",
+ fn(): void {
+ const res: Response = {};
+ delCookie(res, "deno");
+ assertEquals(
+ res.headers!.get("Set-Cookie"),
+ "deno=; Expires=Thus, 01 Jan 1970 00:00:00 GMT"
+ );
+ }
+});
+
+test({
+ name: "[HTTP] Cookie Set",
+ fn(): void {
+ const res: Response = {};
+
+ res.headers = new Headers();
+ setCookie(res, { name: "Space", value: "Cat" });
+ assertEquals(res.headers.get("Set-Cookie"), "Space=Cat");
+
+ res.headers = new Headers();
+ setCookie(res, { name: "Space", value: "Cat", secure: true });
+ assertEquals(res.headers.get("Set-Cookie"), "Space=Cat; Secure");
+
+ res.headers = new Headers();
+ setCookie(res, { name: "Space", value: "Cat", httpOnly: true });
+ assertEquals(res.headers.get("Set-Cookie"), "Space=Cat; HttpOnly");
+
+ res.headers = new Headers();
+ setCookie(res, {
+ name: "Space",
+ value: "Cat",
+ httpOnly: true,
+ secure: true
+ });
+ assertEquals(res.headers.get("Set-Cookie"), "Space=Cat; Secure; HttpOnly");
+
+ res.headers = new Headers();
+ setCookie(res, {
+ name: "Space",
+ value: "Cat",
+ httpOnly: true,
+ secure: true,
+ maxAge: 2
+ });
+ assertEquals(
+ res.headers.get("Set-Cookie"),
+ "Space=Cat; Secure; HttpOnly; Max-Age=2"
+ );
+
+ let error = false;
+ res.headers = new Headers();
+ try {
+ setCookie(res, {
+ name: "Space",
+ value: "Cat",
+ httpOnly: true,
+ secure: true,
+ maxAge: 0
+ });
+ } catch (e) {
+ error = true;
+ }
+ assert(error);
+
+ res.headers = new Headers();
+ setCookie(res, {
+ name: "Space",
+ value: "Cat",
+ httpOnly: true,
+ secure: true,
+ maxAge: 2,
+ domain: "deno.land"
+ });
+ assertEquals(
+ res.headers.get("Set-Cookie"),
+ "Space=Cat; Secure; HttpOnly; Max-Age=2; Domain=deno.land"
+ );
+
+ res.headers = new Headers();
+ setCookie(res, {
+ name: "Space",
+ value: "Cat",
+ httpOnly: true,
+ secure: true,
+ maxAge: 2,
+ domain: "deno.land",
+ sameSite: "Strict"
+ });
+ assertEquals(
+ res.headers.get("Set-Cookie"),
+ "Space=Cat; Secure; HttpOnly; Max-Age=2; Domain=deno.land; " +
+ "SameSite=Strict"
+ );
+
+ res.headers = new Headers();
+ setCookie(res, {
+ name: "Space",
+ value: "Cat",
+ httpOnly: true,
+ secure: true,
+ maxAge: 2,
+ domain: "deno.land",
+ sameSite: "Lax"
+ });
+ assertEquals(
+ res.headers.get("Set-Cookie"),
+ "Space=Cat; Secure; HttpOnly; Max-Age=2; Domain=deno.land; SameSite=Lax"
+ );
+
+ res.headers = new Headers();
+ setCookie(res, {
+ name: "Space",
+ value: "Cat",
+ httpOnly: true,
+ secure: true,
+ maxAge: 2,
+ domain: "deno.land",
+ path: "/"
+ });
+ assertEquals(
+ res.headers.get("Set-Cookie"),
+ "Space=Cat; Secure; HttpOnly; Max-Age=2; Domain=deno.land; Path=/"
+ );
+
+ res.headers = new Headers();
+ setCookie(res, {
+ name: "Space",
+ value: "Cat",
+ httpOnly: true,
+ secure: true,
+ maxAge: 2,
+ domain: "deno.land",
+ path: "/",
+ unparsed: ["unparsed=keyvalue", "batman=Bruce"]
+ });
+ assertEquals(
+ res.headers.get("Set-Cookie"),
+ "Space=Cat; Secure; HttpOnly; Max-Age=2; Domain=deno.land; Path=/; " +
+ "unparsed=keyvalue; batman=Bruce"
+ );
+
+ res.headers = new Headers();
+ setCookie(res, {
+ name: "Space",
+ value: "Cat",
+ httpOnly: true,
+ secure: true,
+ maxAge: 2,
+ domain: "deno.land",
+ path: "/",
+ expires: new Date(Date.UTC(1983, 0, 7, 15, 32))
+ });
+ assertEquals(
+ res.headers.get("Set-Cookie"),
+ "Space=Cat; Secure; HttpOnly; Max-Age=2; Domain=deno.land; Path=/; " +
+ "Expires=Fri, 07 Jan 1983 15:32:00 GMT"
+ );
+
+ res.headers = new Headers();
+ setCookie(res, { name: "__Secure-Kitty", value: "Meow" });
+ assertEquals(res.headers.get("Set-Cookie"), "__Secure-Kitty=Meow; Secure");
+
+ res.headers = new Headers();
+ setCookie(res, {
+ name: "__Host-Kitty",
+ value: "Meow",
+ domain: "deno.land"
+ });
+ assertEquals(
+ res.headers.get("Set-Cookie"),
+ "__Host-Kitty=Meow; Secure; Path=/"
+ );
+ }
+});