Files
Jyotisha/frontend/tests/identity-session.test.ts
T
Jesse_Chen 9d8c73561f
Staging Backend Quality Gate / validate (push) Failing after 7m30s
Staging Backend Quality Gate / publish (push) Has been skipped
test(deploy): integrate billing admin rollout checks
2026-08-06 20:15:50 +08:00

84 lines
2.2 KiB
TypeScript

import assert from "node:assert/strict";
import test from "node:test";
import {
IdentityAuthorizationError,
readIdentitySession,
requireIdentityAdmin,
requireIdentityUser,
type IdentitySessionReader,
} from "../src/modules/identity/session.ts";
function readerFor(role: string | null): IdentitySessionReader {
return {
async getSession() {
if (role === null) return null;
return {
session: {
id: "session-1",
token: "session-token",
expiresAt: new Date("2030-01-01T00:00:00.000Z"),
},
user: {
id: "018f4e6d-7a11-7000-8000-000000000001",
email: "Person@Example.com",
emailVerified: true,
twoFactorEnabled: true,
name: "Person",
image: null,
role,
},
};
},
};
}
test("identity session mapper returns a narrow normalized DTO", async () => {
const session = await readIdentitySession(readerFor("user,admin"), new Headers());
assert.deepEqual(session, {
expiresAt: new Date("2030-01-01T00:00:00.000Z"),
user: {
id: "018f4e6d-7a11-7000-8000-000000000001",
email: "person@example.com",
emailVerified: true,
twoFactorEnabled: true,
name: "Person",
image: null,
role: ["user", "admin"],
},
});
assert.equal("token" in (session ?? {}), false);
});
test("require user rejects a missing server-side session", async () => {
await assert.rejects(
requireIdentityUser(readerFor(null), new Headers({ cookie: "present=1" })),
(error: unknown) => {
assert.ok(error instanceof IdentityAuthorizationError);
assert.equal(error.status, 401);
return true;
},
);
});
test("require admin checks persisted session roles, not cookie presence", async () => {
await assert.rejects(
requireIdentityAdmin(
readerFor("user"),
new Headers({ cookie: "jyotisha-admin.session_token=present" }),
),
(error: unknown) => {
assert.ok(error instanceof IdentityAuthorizationError);
assert.equal(error.status, 403);
return true;
},
);
const admin = await requireIdentityAdmin(
readerFor("user,admin"),
new Headers(),
);
assert.deepEqual(admin.role, ["user", "admin"]);
});