25 lines
1.1 KiB
TypeScript
25 lines
1.1 KiB
TypeScript
import { expect, test } from "bun:test";
|
|
import { createContext, withContextHeaders } from "../src/index.ts";
|
|
|
|
test("transaction cookies preserve policy when consumed and delete exactly once", () => {
|
|
const firstRequest = new Request("https://example.test/oauth");
|
|
const first = createContext(firstRequest, new URL(firstRequest.url));
|
|
first.cookies.transaction<{ state: string }>("oauth").set({ state: "välue" });
|
|
const issued = withContextHeaders(first, new Response()).headers.get("set-cookie")!;
|
|
expect(issued).toContain("HttpOnly");
|
|
expect(issued).toContain("SameSite=Lax");
|
|
expect(issued).toContain("Secure");
|
|
|
|
const pair = issued.split(";", 1)[0]!;
|
|
const callbackRequest = new Request("https://example.test/callback", {
|
|
headers: { cookie: pair },
|
|
});
|
|
const callback = createContext(callbackRequest, new URL(callbackRequest.url));
|
|
expect(callback.cookies.transaction<{ state: string }>("oauth").consume()).toEqual({
|
|
state: "välue",
|
|
});
|
|
const consumed = withContextHeaders(callback, new Response()).headers.get("set-cookie")!;
|
|
expect(consumed).toContain("Max-Age=0");
|
|
expect(consumed).toContain("Path=/");
|
|
});
|