const { hasPermission, resolveEntityPermission, resolvePermissionsForRoles, } = require("../../../src/constants/permissions"); describe("Permission Constants", () => { it("grants leave self-service permissions to employee roles", () => { const employeePermissions = resolvePermissionsForRoles(["employee"]); expect(employeePermissions).toEqual( expect.arrayContaining(["leave.create", "leave.view_own", "leave.submit"]), ); }); it("grants leave approval only to configured approver roles", () => { expect(hasPermission(resolvePermissionsForRoles(["manager"]), "leave.approve")).toBe(true); expect(hasPermission(resolvePermissionsForRoles(["ceo"]), "leave.approve")).toBe(true); expect(hasPermission(resolvePermissionsForRoles(["finance"]), "leave.approve")).toBe(false); expect(hasPermission(resolvePermissionsForRoles(["finance_mgr"]), "leave.approve")).toBe(false); expect(hasPermission(resolvePermissionsForRoles(["hr"]), "leave.approve")).toBe(false); }); it("grants master data permissions to finance and finance manager roles", () => { expect(hasPermission(resolvePermissionsForRoles(["finance"]), "masterdata.view")).toBe(true); expect(hasPermission(resolvePermissionsForRoles(["finance"]), "masterdata.manage")).toBe(false); expect(hasPermission(resolvePermissionsForRoles(["finance_mgr"]), "masterdata.manage")).toBe(true); expect(hasPermission(resolvePermissionsForRoles(["ceo"]), "masterdata.view")).toBe(true); }); it("grants hr leave view-all and manage permissions", () => { const hrPermissions = resolvePermissionsForRoles(["hr"]); expect(hrPermissions).toEqual(expect.arrayContaining(["leave.view_all", "leave.manage"])); }); it("grants procurement permissions to configured roles", () => { expect(hasPermission(resolvePermissionsForRoles(["employee"]), "procurement.create")).toBe(true); expect(hasPermission(resolvePermissionsForRoles(["employee"]), "procurement.view_own")).toBe(true); expect(hasPermission(resolvePermissionsForRoles(["manager"]), "procurement.approve")).toBe(true); expect(hasPermission(resolvePermissionsForRoles(["finance"]), "procurement.approve")).toBe(false); expect(hasPermission(resolvePermissionsForRoles(["finance_mgr"]), "procurement.manage")).toBe(true); expect(hasPermission(resolvePermissionsForRoles(["administration"]), "procurement.manage")).toBe(true); }); it("grants ai.assist only to finance manager and admin", () => { expect(hasPermission(resolvePermissionsForRoles(["finance_mgr"]), "ai.assist")).toBe(true); expect(hasPermission(resolvePermissionsForRoles(["finance"]), "ai.assist")).toBe(false); expect(hasPermission(resolvePermissionsForRoles(["manager"]), "ai.assist")).toBe(false); expect(hasPermission(resolvePermissionsForRoles(["admin"]), "ai.assist")).toBe(true); }); it("grants asset permissions to configured roles", () => { expect(hasPermission(resolvePermissionsForRoles(["employee"]), "asset.view_own")).toBe(true); expect(hasPermission(resolvePermissionsForRoles(["manager"]), "asset.view_all")).toBe(true); expect(hasPermission(resolvePermissionsForRoles(["finance"]), "asset.view_all")).toBe(true); expect(hasPermission(resolvePermissionsForRoles(["administration"]), "asset.manage")).toBe(true); expect(hasPermission(resolvePermissionsForRoles(["administration"]), "asset.transfer")).toBe(true); expect(hasPermission(resolvePermissionsForRoles(["finance_mgr"]), "asset.inventory")).toBe(true); expect(hasPermission(resolvePermissionsForRoles(["employee"]), "asset.manage")).toBe(false); }); it("maps workflow entities to correct permission codes", () => { expect(resolveEntityPermission("reimbursement", "approve")).toBe("expense.approve"); expect(resolveEntityPermission("reimbursement", "transfer")).toBe("expense.transfer"); expect(resolveEntityPermission("leave", "approve")).toBe("leave.approve"); expect(resolveEntityPermission("leave", "submit")).toBe("leave.submit"); expect(resolveEntityPermission("unknown", "approve")).toBe(null); }); });