refactor(housekeeping): reuse request capability context

This commit is contained in:
Simo committed 2026-08-26 21:20:12 +02:00
1 parent cc6bb9a9a3
commit edc165ba8d
5 files changed
+134 -8

No files matched your search

@@ -0,0 +1,41 @@
import { describe, expect, it } from "vitest";
import { authorizeHousekeeping } from "./authorization";
import { anyCapability, type HousekeepingCapabilityContext } from "./contracts";
function capabilityContext(
granted: readonly string[],
rank = 7,
): HousekeepingCapabilityContext {
return {
actor: { id: 42, username: "operator", rank },
isSuperAdmin: false,
has: (slug) => granted.includes(slug),
hasAny: (...slugs) => slugs.some((slug) => granted.includes(slug)),
hasAll: (...slugs) => slugs.every((slug) => granted.includes(slug)),
};
}
describe("authorizeHousekeeping", () => {
it("returns the authorized capability context", () => {
const context = capabilityContext(["admin.users.view"]);
expect(
authorizeHousekeeping(context, anyCapability("admin.users.view")),
).toMatchObject({ ok: true, data: context });
});
it("returns FORBIDDEN for a missing capability regardless of rank", () => {
const result = authorizeHousekeeping(
capabilityContext([], 999),
anyCapability("admin.users.view"),
);
expect(result).toMatchObject({
ok: false,
error: {
code: "FORBIDDEN",
messageKey: "errors.housekeeping.forbidden",
},
});
});
});