diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2019-10-09 17:10:09 -0400 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2019-10-09 17:10:09 -0400 |
commit | 151ce0266eb4de2c8fc600c81c192a5f791b6169 (patch) | |
tree | 7cb04016a1c7ee88adde83814548d7a9409dcde3 /std/http/cookie_test.ts | |
parent | a355f7c807686918734416d91b79c26c21effba9 (diff) |
Move everything into std subdir
Diffstat (limited to 'std/http/cookie_test.ts')
-rw-r--r-- | std/http/cookie_test.ts | 210 |
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=/" + ); + } +}); |