deno/std/http/cookie_test.ts
2020-01-02 15:13:47 -05:00

211 lines
5.3 KiB
TypeScript

// Copyright 2018-2020 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=Thu, 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=/"
);
}
});