feat: centralize application framework primitives
Quality / quality (ubuntu-latest) (push) Failing after 14m38s
Quality / quality (windows-latest) (push) Canceled after 0s

This commit is contained in:
2026-08-22 23:07:46 +05:30
parent 96e082b943
commit a3ddd39b7b
73 changed files with 1429 additions and 84 deletions
+17
View File
@@ -0,0 +1,17 @@
import { expect, test } from "bun:test";
import { createContext } from "../src/index.ts";
test("context pagination applies defaults, bounds and cursor parsing", () => {
const request = new Request("https://example.test/items?limit=500&cursor=next-1");
const ctx = createContext(request, new URL(request.url));
expect(ctx.pagination({ defaultLimit: 25, maxLimit: 100 })).toEqual({
limit: 100,
cursor: "next-1",
});
});
test("context pagination rejects invalid limits", () => {
const request = new Request("https://example.test/items?limit=-2");
const ctx = createContext(request, new URL(request.url));
expect(ctx.pagination()).toEqual({ limit: 25, cursor: undefined });
});
@@ -0,0 +1,24 @@
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=/");
});