Files
WRNexusJS/packages/core/test/fullstack-primitives.test.ts
T
2026-07-22 17:29:08 +05:30

72 lines
2.6 KiB
TypeScript

import { expect, test } from "bun:test";
import {
checkPerformanceBudgets,
createContext,
createTracer,
dedupe,
defineAction,
defineEndpoint,
defineFeatureFlags,
defineLoader,
tenantFromSubdomain,
tracingMiddleware,
} from "../src/index.ts";
function context(url = "https://acme.example.com/dashboard") {
return createContext(new Request(url), new URL(url));
}
test("typed endpoints validate authentication and preserve a stable JSON envelope", async () => {
const endpoint = defineEndpoint<{ value: number }, { doubled: number }>({
auth: "required",
input: {
parse(input) {
const value = Number((input as { value?: unknown })?.value);
if (!Number.isFinite(value)) throw new Error("invalid");
return { value };
},
},
handler: ({ value }) => ({ doubled: value * 2 }),
});
expect((await endpoint(context(), { value: 4 })).status).toBe(401);
const authenticated = context();
authenticated.user = { id: "user-1" };
expect(await (await endpoint(authenticated, { value: 4 })).json()).toEqual({
data: { doubled: 8 },
});
});
test("loaders, actions, and request-local dedupe remain framework-agnostic", async () => {
let calls = 0;
const loader = defineLoader({ load: async () => ({ ready: true }) });
const action = defineAction<{ name: string }, string>({ run: async (input) => input.name });
const ctx = context();
const first = dedupe(ctx, "profile", async () => ++calls);
const second = dedupe(ctx, "profile", async () => ++calls);
expect(await loader(ctx)).toEqual({ ready: true });
expect(await action({ name: "Ajay" }, ctx)).toBe("Ajay");
expect(await Promise.all([first, second])).toEqual([1, 1]);
expect(calls).toBe(1);
});
test("feature flags, tenant resolution, budgets, and tracing compose", async () => {
const ctx = context();
const resolveTenant = tenantFromSubdomain(async (slug) => ({ id: slug, slug }), ["example.com"]);
expect(await resolveTenant(ctx)).toEqual({ id: "acme", slug: "acme" });
const flags = defineFeatureFlags({ dashboardV2: true, seats: 25 });
expect(await flags.enabled("dashboardV2", ctx)).toBe(true);
expect(await flags.get("seats", ctx)).toBe(25);
expect(checkPerformanceBudgets({ routeJsBytes: 100 }, { routeJsBytes: 130 })).toEqual([
{ metric: "routeJsBytes", budget: 100, actual: 130, overBy: 30 },
]);
const tracer = createTracer(() => 10);
const middleware = tracingMiddleware(() => tracer, { serverTiming: true });
const response = await middleware(ctx, () => new Response("ok"));
expect(response.headers.get("server-timing")).toContain("http.request");
});