48 lines
1.7 KiB
TypeScript
48 lines
1.7 KiB
TypeScript
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> = {}): 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);
|
|
});
|
|
});
|