新增案例库浏览器登录态

This commit is contained in:
czj
2026-07-08 17:02:37 +08:00
parent fd1b792f2c
commit b4472fe348
12 changed files with 646 additions and 75 deletions
@@ -0,0 +1,79 @@
import { afterEach, beforeEach, describe, expect, it } from "vitest";
import {
DELETE as deleteSession,
GET as getSession,
POST as createSession,
} from "../auth/session/route";
describe("auth session API", () => {
const originalApiKey = process.env.API_ACCESS_KEY;
const originalAuthDisabled = process.env.API_AUTH_DISABLED;
beforeEach(() => {
process.env.API_ACCESS_KEY = "test-key";
process.env.API_AUTH_DISABLED = "false";
});
afterEach(() => {
process.env.API_ACCESS_KEY = originalApiKey;
process.env.API_AUTH_DISABLED = originalAuthDisabled;
});
it("creates an HttpOnly browser session after validating the access key", async () => {
const response = await createSession(request({ api_access_key: "test-key" }));
const body = (await response.json()) as { authenticated: boolean };
const setCookie = response.headers.get("set-cookie") ?? "";
expect(response.status).toBe(200);
expect(body.authenticated).toBe(true);
expect(setCookie).toContain("geo_api_session=");
expect(setCookie).toContain("HttpOnly");
expect(setCookie).toMatch(/SameSite=Lax/i);
expect(setCookie).toContain("Path=/");
expect(setCookie).not.toContain("test-key");
});
it("rejects invalid access keys without setting a session cookie", async () => {
const response = await createSession(request({ api_access_key: "wrong" }));
expect(response.status).toBe(401);
expect(response.headers.get("set-cookie")).toBeNull();
});
it("reports the current browser session state", async () => {
const login = await createSession(request({ api_access_key: "test-key" }));
const cookie = login.headers.get("set-cookie")?.split(";")[0] ?? "";
const anonymous = await getSession(new Request("http://localhost/api/auth/session"));
const authenticated = await getSession(
new Request("http://localhost/api/auth/session", {
headers: { cookie },
}),
);
await expect(anonymous.json()).resolves.toEqual({ authenticated: false });
await expect(authenticated.json()).resolves.toEqual({ authenticated: true });
});
it("clears the browser session cookie", async () => {
const response = await deleteSession(
new Request("http://localhost/api/auth/session", { method: "DELETE" }),
);
const setCookie = response.headers.get("set-cookie") ?? "";
expect(response.status).toBe(200);
await expect(response.json()).resolves.toEqual({ authenticated: false });
expect(setCookie).toContain("geo_api_session=");
expect(setCookie).toContain("Max-Age=0");
expect(setCookie).toContain("HttpOnly");
});
});
function request(body: unknown) {
return new Request("http://localhost/api/auth/session", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify(body),
});
}