import { describe, expect, test } from "vitest"; import { getUserHasPermission } from "./PermissionsHelper"; import type { DefaultPermission } from "~/application/dtos/shared/DefaultPermissions"; import type { AppOrAdminData } from "../data/useAppOrAdminData"; function permissionsData(patch: Partial = {}): AppOrAdminData { return { user: {} as AppOrAdminData["user"], myTenants: [], currentTenant: null, allRoles: [], permissions: [], entities: [], entityGroups: [], isSuperUser: false, isSuperAdmin: false, myGroups: [], onboardingSession: null, tenantTypes: [], ...patch, }; } describe("getUserHasPermission", () => { test("defaults closed when permission data is missing", () => { expect(getUserHasPermission(permissionsData({ permissions: undefined as unknown as AppOrAdminData["permissions"] }), "app.settings.members.view")).toBe(false); }); test("allows super admins before checking permission payload availability", () => { expect( getUserHasPermission( permissionsData({ isSuperAdmin: true, permissions: undefined as unknown as AppOrAdminData["permissions"] }), "app.settings.members.view" ) ).toBe(true); }); test("checks explicit app and entity permissions", () => { const entityPermission = "entity.contact.read" as DefaultPermission; const data = permissionsData({ permissions: ["app.settings.members.view", entityPermission] }); expect(getUserHasPermission(data, "app.settings.members.view")).toBe(true); expect(getUserHasPermission(data, entityPermission)).toBe(true); expect(getUserHasPermission(data, "app.settings.subscription.view")).toBe(false); }); });