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);  });});

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t