Files
EpicNext-Cms/src/app/api/admin/csrf/route.test.ts
T
Simo b3245a18ea
CI / check (push) Successful in 23s
CI / release (push) Skipped
CI / deploy (push) Successful in 41s
fix: bootstrap admin CSRF tokens
2026-08-02 11:46:43 +02:00

52 lines
1.3 KiB
TypeScript

import { NextRequest } from "next/server";
import { beforeEach, describe, expect, it, vi } from "vitest";
const mocks = vi.hoisted(() => ({
setCsrfCookie: vi.fn(),
}));
vi.mock("@/lib/api-handler", () => ({
withAdmin:
(_options: unknown, handler: (...args: never[]) => unknown) =>
(...args: never[]) =>
handler(...args),
}));
vi.mock("@/lib/foundation/security", () => ({
setCsrfCookie: mocks.setCsrfCookie,
}));
import { GET } from "./route";
describe("admin CSRF bootstrap route", () => {
beforeEach(() => {
mocks.setCsrfCookie.mockReset();
});
it("returns the token written by the route handler without caching", async () => {
const token = "a".repeat(64);
mocks.setCsrfCookie.mockResolvedValue(token);
const response = await GET(
new NextRequest("http://localhost/api/admin/csrf"),
);
expect(response.status).toBe(200);
expect(response.headers.get("cache-control")).toBe("no-store");
expect(await response.json()).toEqual({ ok: true, token });
});
it("fails closed when the cookie cannot be written", async () => {
mocks.setCsrfCookie.mockResolvedValue("");
const response = await GET(
new NextRequest("http://localhost/api/admin/csrf"),
);
expect(response.status).toBe(500);
expect(await response.json()).toEqual({
error: "Unable to initialize CSRF token",
});
});
});