52 lines · 1.8 KB · TypeScript
RawDownload
import { describe, expect, it } from "@effect/vitest"; import { isTenantAdminMember, type TenantMemberRow } from "./admin-access"; const member = (overrides: Partial<TenantMemberRow> = {}): TenantMemberRow => ({  role: "member",  status: "active",  isCurrentUser: false,  ...overrides,}); describe("isTenantAdminMember", () => {  it("an active admin of the tenant may see the admin sections", () => {    expect(isTenantAdminMember([member({ role: "admin", isCurrentUser: true })])).toBe(true);  });   // Self-host (Better Auth) issues `owner` where cloud (WorkOS) issues `admin`;  // both hosts' admin middleware accept either.  it("self-host's owner role counts too", () => {    expect(isTenantAdminMember([member({ role: "owner", isCurrentUser: true })])).toBe(true);  });   it("a plain member does not", () => {    expect(isTenantAdminMember([member({ role: "member", isCurrentUser: true })])).toBe(false);  });   // A pending invite carries a role but no access yet — treating it as admin  // would show a section the server refuses.  it("a pending admin invite is not yet an admin", () => {    expect(      isTenantAdminMember([member({ role: "admin", status: "pending", isCurrentUser: true })]),    ).toBe(false);  });   it("another member's admin role says nothing about the viewer", () => {    expect(      isTenantAdminMember([        member({ role: "admin", isCurrentUser: false }),        member({ role: "member", isCurrentUser: true }),      ]),    ).toBe(false);  });   it("fails closed when the list has no row for the viewer", () => {    expect(isTenantAdminMember([])).toBe(false);    expect(isTenantAdminMember([member({ role: "admin" })])).toBe(false);  });   it("an unknown role is not an admin", () => {    expect(isTenantAdminMember([member({ role: "billing", isCurrentUser: true })])).toBe(false);  });});