Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/openstatusHQ/openstatus. ๐ซ Status page with uptime monitoring & API monitoring as code ๐ซ openstatus.dev
bun drizzle-orm monitoring monitoring-as-code nextjs observability on-call open-source shadcn-ui status-page statuspage synthetic-monitoring tinybird turso uptime uptime-checker uptime-monitor
Something went wrong. Try again.
TypeScript
at main
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798import { db } from "@openstatus/db";import { addUserToWorkspace, createUser,} from "@openstatus/db/src/test/factories";import { expect } from "@std/expect";import { beforeAll, describe, test } from "@std/testing/bdd";
import { createWorkspaceFixture, makeApiKeyCtx, makeSlackCtx, makeSystemCtx, makeUserCtx,} from "../../../test/helpers";import { ForbiddenError } from "../../errors";import type { Workspace } from "../../types";import { requireRole } from "../require-role";
let workspace: Workspace;let ownerId: number;let adminId: number;let memberId: number;let outsiderId: number;
beforeAll(async () => { const fixture = await createWorkspaceFixture("team"); workspace = fixture.workspace; ownerId = fixture.userId; adminId = (await createUser()).id; memberId = (await createUser()).id; outsiderId = (await createUser()).id; await addUserToWorkspace(adminId, workspace.id, "admin"); await addUserToWorkspace(memberId, workspace.id, "member");});
describe("requireRole", () => { test("user with an allowed role passes", async () => { await requireRole(db, makeUserCtx(workspace, { userId: ownerId }), [ "owner", "admin", ]); await requireRole(db, makeUserCtx(workspace, { userId: adminId }), [ "owner", "admin", ]); });
test("member is rejected from an admin-only check", async () => { await expect( requireRole(db, makeUserCtx(workspace, { userId: memberId }), [ "owner", "admin", ]), ).rejects.toThrow(ForbiddenError); });
test("orUserId lets the named user through", async () => { await requireRole( db, makeUserCtx(workspace, { userId: memberId }), ["owner", "admin"], { orUserId: memberId }, ); });
test("non-member is rejected even from member-level checks", async () => { await expect( requireRole(db, makeUserCtx(workspace, { userId: outsiderId }), [ "owner", "admin", "member", ]), ).rejects.toThrow(ForbiddenError); });
test("slack actor resolves through its linked user", async () => { const ctx = makeSlackCtx(workspace, { teamId: "T1", slackUserId: "U1", userId: adminId, }); await requireRole(db, ctx, ["owner", "admin"]); });
test("api key without a user passes member-level only", async () => { const ctx = makeApiKeyCtx(workspace, { keyId: "k1" }); await requireRole(db, ctx, ["owner", "admin", "member"]); await expect(requireRole(db, ctx, ["owner", "admin"])).rejects.toThrow( ForbiddenError, ); });
test("system always passes", async () => { await requireRole(db, makeSystemCtx(workspace, { job: "test" }), ["owner"]); });});