import { Cookie } from "./cookie.ts";import { assert, assertEquals, assertExists, assertStrictEquals,} from "https://deno.land/std@0.85.0/testing/asserts.ts";
Deno.test("Cookie constructor", () => { const dateValue = Date.now(); const testCookie = new Cookie({ domain: "www.google.com", httpOnly: true, secure: true, name: "foo", value: "bar", expires: dateValue + 1000, creationDate: dateValue - 1000, maxAge: -1, path: "/", sameSite: "None", }); assertEquals(testCookie.domain, "www.google.com"); assertEquals(testCookie.httpOnly, true); assertEquals(testCookie.secure, true); assertEquals(testCookie.name, "foo"); assertEquals(testCookie.value, "bar"); assertEquals(testCookie.expires, dateValue + 1000); assertEquals(testCookie.creationDate, dateValue - 1000); assertEquals(testCookie.maxAge, -1); assertEquals(testCookie.path, "/"); assertEquals(testCookie.sameSite, "None"); assertEquals(testCookie.isValid(), true);
assertEquals(testCookie.getCookieString(), "foo=bar"); assertEquals(testCookie.isValid(), true);});
Deno.test("Cookie constructor (empty)", () => { const testCookie = new Cookie(); assertEquals(testCookie.domain, undefined); assertEquals(testCookie.httpOnly, undefined); assertEquals(testCookie.secure, undefined); assertEquals(testCookie.name, undefined); assertEquals(testCookie.value, undefined); assertEquals(testCookie.expires, undefined); assertEquals(testCookie.maxAge, undefined); assertEquals(testCookie.path, undefined); assertEquals(testCookie.sameSite, undefined); assertExists(testCookie.creationDate); assertEquals(testCookie.isValid(), false);});
Deno.test("Cookie.from()", () => { const cookieStr = "__cfduid=0000000000000000000000000000; expires=Tue, 02-Mar-21 11:37:17 GMT; path=/sth; domain=.example.com; HttpOnly; SameSite=Lax; Secure"; const cookie = Cookie.from(cookieStr);
assertEquals(cookie.domain, "example.com"); assertEquals(cookie.path, "/sth"); assertEquals( cookie.expires, new Date("Tue, 02-Mar-21 11:37:17 GMT").getTime(), ); assertEquals(cookie.name, "__cfduid"); assertEquals(cookie.value, "0000000000000000000000000000"); assertEquals(cookie.httpOnly, true); assertEquals(cookie.secure, true); assertEquals(cookie.sameSite, "Lax");
assertEquals(Cookie.from("foo=").getCookieString(), "foo="); assertEquals(Cookie.from("foo=bar; ").getCookieString(), "foo=bar"); assertEquals(Cookie.from("foo=bar;").getCookieString(), "foo=bar"); assertEquals(Cookie.from("foo=bar").getCookieString(), "foo=bar"); assertEquals(Cookie.from("foo=bar").toString(), "foo=bar"); assertEquals(Cookie.from("foo=bar===").toString(), "foo=bar==="); assertEquals(Cookie.from('foo=""').toString(), "foo="); assertEquals(Cookie.from('foo="bar"').toString(), "foo=bar");});
Deno.test("Cookie json serialization", () => { const testCookie = new Cookie({ name: "foo", value: "bar", });
const newCookie = new Cookie(JSON.parse(JSON.stringify(testCookie)));
assertStrictEquals(testCookie.toString(), newCookie.toString()); assertStrictEquals(testCookie.getCookieString(), newCookie.getCookieString());});
Deno.test("Cookie json serialization does not include creationIndex or cookiesCreated", () => { const testCookie = new Cookie({ name: "foo", value: "bar", });
const cookieData = JSON.parse(JSON.stringify(testCookie));
assertStrictEquals(cookieData.creationIndex, undefined); assertStrictEquals(cookieData.cookiesCreated, undefined);});
Deno.test("Cookie.clone()", () => { const testCookie = new Cookie({ name: "foo", value: "bar", });
const anotherCookie = testCookie.clone();
assert(testCookie != anotherCookie, "error: both have the same reference");});
Deno.test("Cookie.canSendTo()", () => { let testCookie = new Cookie(); testCookie.setDomain("www.example.com");
assertStrictEquals(testCookie.canSendTo("www.example.com"), true); assertStrictEquals(testCookie.canSendTo("example.com"), true);
assertStrictEquals(testCookie.canSendTo("sub.example.com"), false); assertStrictEquals(testCookie.canSendTo("anyexample.com"), false);
testCookie.secure = true; assertStrictEquals(testCookie.canSendTo("www.example.com"), false); assertStrictEquals(testCookie.canSendTo("https://www.example.com"), true); testCookie.secure = false;
testCookie = new Cookie(); testCookie.domain = "x.y"; testCookie.path = "/one/two";
assertStrictEquals(testCookie.canSendTo("x.y/one"), false);
assertStrictEquals(testCookie.canSendTo("x.y/one/two"), true); assertStrictEquals(testCookie.canSendTo("x.y/one/two/"), true); assertStrictEquals( testCookie.canSendTo("x.y/one/twobar"), false, ); assertStrictEquals( testCookie.canSendTo("x.y/one/two/three"), true, ); assertStrictEquals( testCookie.canSendTo("x.y/one/two/three/"), true, );});
Deno.test("Cookie.setPath() works according to RFC6265 5.1.4", () => { const testCookie = new Cookie();
testCookie.setPath("http://x.y"); assertStrictEquals(testCookie.path, "/");
testCookie.setPath("http://x.y/"); assertStrictEquals(testCookie.path, "/");
testCookie.setPath("http://x.y/one"); assertStrictEquals(testCookie.path, "/");
testCookie.setPath("http://x.y/one/"); assertStrictEquals(testCookie.path, "/one");
testCookie.setPath("http://x.y/one/two"); assertStrictEquals(testCookie.path, "/one");
testCookie.setPath("http://x.y/one/two/"); assertStrictEquals(testCookie.path, "/one/two");});