diff options
| author | Vincent LE GOFF <g_n_s@hotmail.fr> | 2019-04-28 01:07:11 +0200 |
|---|---|---|
| committer | Ryan Dahl <ry@tinyclouds.org> | 2019-04-27 16:07:11 -0700 |
| commit | ce101a0f8632f6b5390af247f3df2002e86becdf (patch) | |
| tree | 5232eb3cbd21c8773881327f98162f0567dfe543 /http/cookie_test.ts | |
| parent | 8d49022ef67b590d8ee7b3ff984307b6c0a69d4f (diff) | |
http: Cookie improvements (denoland/deno_std#359)
Original: https://github.com/denoland/deno_std/commit/f1114691038888fc3d8995b64a8028f072569672
Diffstat (limited to 'http/cookie_test.ts')
| -rw-r--r-- | http/cookie_test.ts | 188 |
1 files changed, 181 insertions, 7 deletions
diff --git a/http/cookie_test.ts b/http/cookie_test.ts index e8f920b31..ae99b2707 100644 --- a/http/cookie_test.ts +++ b/http/cookie_test.ts @@ -1,7 +1,7 @@ // Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. -import { ServerRequest } from "./server.ts"; -import { getCookie } from "./cookie.ts"; -import { assertEquals } from "../testing/asserts.ts"; +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({ @@ -9,17 +9,191 @@ test({ fn(): void { let req = new ServerRequest(); req.headers = new Headers(); - assertEquals(getCookie(req), {}); + assertEquals(getCookies(req), {}); req.headers = new Headers(); req.headers.set("Cookie", "foo=bar"); - assertEquals(getCookie(req), { foo: "bar" }); + assertEquals(getCookies(req), { foo: "bar" }); req.headers = new Headers(); req.headers.set("Cookie", "full=of ; tasty=chocolate"); - assertEquals(getCookie(req), { full: "of ", tasty: "chocolate" }); + assertEquals(getCookies(req), { full: "of ", tasty: "chocolate" }); req.headers = new Headers(); req.headers.set("Cookie", "igot=99; problems=but..."); - assertEquals(getCookie(req), { igot: "99", problems: "but..." }); + assertEquals(getCookies(req), { igot: "99", problems: "but..." }); + } +}); + +test({ + name: "[HTTP] Cookie Delete", + fn(): void { + let 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 { + let 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=/" + ); } }); |
