UNPKG

alepha

Version:

Easy-to-use modern TypeScript framework for building many kind of applications.

152 lines (112 loc) 4.66 kB
import { describe, it } from "vitest"; import type { Cookie } from "../primitives/$cookie.ts"; import { CookieParser } from "../services/CookieParser.ts"; const parser = new CookieParser(); describe("CookieParser", () => { describe("parseRequestCookies", () => { it("should parse simple cookies", ({ expect }) => { const result = parser.parseRequestCookies("foo=bar; baz=qux"); expect(result).toEqual({ foo: "bar", baz: "qux" }); }); it("should parse a single cookie", ({ expect }) => { const result = parser.parseRequestCookies("foo=bar"); expect(result).toEqual({ foo: "bar" }); }); it("should preserve base64 values with trailing =", ({ expect }) => { const result = parser.parseRequestCookies( "session=eyJhbGciOiJIUzI1NiJ9==", ); expect(result).toEqual({ session: "eyJhbGciOiJIUzI1NiJ9==" }); }); it("should preserve values with multiple = signs", ({ expect }) => { const result = parser.parseRequestCookies("token=a=b=c"); expect(result).toEqual({ token: "a=b=c" }); }); it("should handle realistic JWT cookie", ({ expect }) => { const jwt = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjgNryP4J3jVmNHl0w5N_XgL0n3I9PlFUP0THsR8U"; const result = parser.parseRequestCookies(`auth=${jwt}; theme=dark`); expect(result).toEqual({ auth: jwt, theme: "dark" }); }); it("should skip parts without = sign", ({ expect }) => { const result = parser.parseRequestCookies("foo=bar; invalid; baz=qux"); expect(result).toEqual({ foo: "bar", baz: "qux" }); }); it("should skip entries with empty key or value", ({ expect }) => { const result = parser.parseRequestCookies("=bar; foo=; valid=ok"); expect(result).toEqual({ valid: "ok" }); }); it("should trim whitespace from keys and values", ({ expect }) => { const result = parser.parseRequestCookies( " foo = bar ; baz = qux ", ); expect(result).toEqual({ foo: "bar", baz: "qux" }); }); it("should return empty object for empty string", ({ expect }) => { const result = parser.parseRequestCookies(""); expect(result).toEqual({}); }); }); describe("serializeResponseCookies", () => { it("should serialize cookies to Set-Cookie headers", ({ expect }) => { const cookies: Record<string, Cookie | null> = { session: { value: "abc123", path: "/", httpOnly: true }, }; const result = parser.serializeResponseCookies(cookies, false); expect(result).toEqual(["session=abc123; Path=/; HttpOnly"]); }); it("should delete cookies by setting Max-Age=0 when value is null", ({ expect, }) => { const cookies: Record<string, Cookie | null> = { session: null, }; const result = parser.serializeResponseCookies(cookies, false); expect(result).toEqual(["session=; Path=/; Max-Age=0"]); }); it("should skip cookies with empty value", ({ expect }) => { const cookies: Record<string, Cookie | null> = { empty: { value: "" }, valid: { value: "ok" }, }; const result = parser.serializeResponseCookies(cookies, false); expect(result).toEqual(["valid=ok"]); }); it("should add Secure flag when isHttps is true", ({ expect }) => { const cookies: Record<string, Cookie | null> = { token: { value: "xyz" }, }; const result = parser.serializeResponseCookies(cookies, true); expect(result).toEqual(["token=xyz; Secure"]); }); it("should not add Secure flag when secure is explicitly false", ({ expect, }) => { const cookies: Record<string, Cookie | null> = { token: { value: "xyz", secure: false }, }; const result = parser.serializeResponseCookies(cookies, true); expect(result).toEqual(["token=xyz"]); }); }); describe("cookieToString", () => { it("should serialize cookie with all options", ({ expect }) => { const cookie: Cookie = { value: "abc", path: "/app", maxAge: 3600, httpOnly: true, sameSite: "strict", domain: "example.com", }; const result = parser.cookieToString("session", cookie, true); expect(result).toBe( "session=abc; Path=/app; Max-Age=3600; Secure; HttpOnly; SameSite=strict; Domain=example.com", ); }); it("should serialize cookie with only value", ({ expect }) => { const result = parser.cookieToString("simple", { value: "test" }); expect(result).toBe("simple=test"); }); }); });