fix: remove nested .git folders, re-add as normal directories
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
import { describe, test, expect, mock, beforeEach } from "bun:test";
|
||||
|
||||
// Mock the user controller's hasPermission
|
||||
const mockHasPermission = mock(() => Promise.resolve(true));
|
||||
|
||||
const mockUserController = {
|
||||
hasPermission: mockHasPermission,
|
||||
};
|
||||
|
||||
describe("processObjectValuePerms", () => {
|
||||
// Import after mock setup
|
||||
const { processObjectValuePerms, processObjectPermMap } =
|
||||
require("../../src/modules/permission-utils/processObjectPermissions") as typeof import("../../src/modules/permission-utils/processObjectPermissions");
|
||||
|
||||
beforeEach(() => {
|
||||
mockHasPermission.mockReset();
|
||||
});
|
||||
|
||||
test("returns only fields user has permission for", async () => {
|
||||
let callCount = 0;
|
||||
mockHasPermission.mockImplementation(() => {
|
||||
callCount++;
|
||||
// Allow field "name" but deny "secret"
|
||||
return Promise.resolve(callCount === 1);
|
||||
});
|
||||
|
||||
const obj = { name: "Test", secret: "hidden" };
|
||||
const result = await processObjectValuePerms(
|
||||
obj,
|
||||
"scope",
|
||||
mockUserController as any,
|
||||
);
|
||||
// First call: scope.name → true, second: scope.secret → false
|
||||
expect(result.name).toBe("Test");
|
||||
expect(result.secret).toBeUndefined();
|
||||
});
|
||||
|
||||
test("returns empty object when user has no permissions", async () => {
|
||||
mockHasPermission.mockResolvedValue(false);
|
||||
const obj = { a: 1, b: 2, c: 3 };
|
||||
const result = await processObjectValuePerms(
|
||||
obj,
|
||||
"test",
|
||||
mockUserController as any,
|
||||
);
|
||||
expect(Object.keys(result)).toHaveLength(0);
|
||||
});
|
||||
|
||||
test("returns full object when user has all permissions", async () => {
|
||||
mockHasPermission.mockResolvedValue(true);
|
||||
const obj = { x: "hello", y: 42 };
|
||||
const result = await processObjectValuePerms(
|
||||
obj,
|
||||
"test",
|
||||
mockUserController as any,
|
||||
);
|
||||
expect(result).toEqual({ x: "hello", y: 42 });
|
||||
});
|
||||
|
||||
test("checks permission with correct scope.key pattern", async () => {
|
||||
mockHasPermission.mockResolvedValue(true);
|
||||
const obj = { fieldA: 1 };
|
||||
await processObjectValuePerms(obj, "myScope", mockUserController as any);
|
||||
expect(mockHasPermission).toHaveBeenCalledWith("myScope.fieldA");
|
||||
});
|
||||
});
|
||||
|
||||
describe("processObjectPermMap", () => {
|
||||
const { processObjectPermMap } =
|
||||
require("../../src/modules/permission-utils/processObjectPermissions") as typeof import("../../src/modules/permission-utils/processObjectPermissions");
|
||||
|
||||
beforeEach(() => {
|
||||
mockHasPermission.mockReset();
|
||||
});
|
||||
|
||||
test("returns boolean map for each key", async () => {
|
||||
let idx = 0;
|
||||
mockHasPermission.mockImplementation(() => {
|
||||
idx++;
|
||||
return Promise.resolve(idx % 2 === 1); // true, false, true, ...
|
||||
});
|
||||
|
||||
const obj = { a: "x", b: "y", c: "z" };
|
||||
const result = await processObjectPermMap(
|
||||
obj,
|
||||
"scope",
|
||||
mockUserController as any,
|
||||
);
|
||||
expect(result.a).toBe(true);
|
||||
expect(result.b).toBe(false);
|
||||
expect(result.c).toBe(true);
|
||||
});
|
||||
|
||||
test("all true when user has all permissions", async () => {
|
||||
mockHasPermission.mockResolvedValue(true);
|
||||
const obj = { foo: 1, bar: 2 };
|
||||
const result = await processObjectPermMap(
|
||||
obj,
|
||||
"s",
|
||||
mockUserController as any,
|
||||
);
|
||||
expect(result.foo).toBe(true);
|
||||
expect(result.bar).toBe(true);
|
||||
});
|
||||
|
||||
test("all false when user has no permissions", async () => {
|
||||
mockHasPermission.mockResolvedValue(false);
|
||||
const obj = { foo: 1, bar: 2 };
|
||||
const result = await processObjectPermMap(
|
||||
obj,
|
||||
"s",
|
||||
mockUserController as any,
|
||||
);
|
||||
expect(result.foo).toBe(false);
|
||||
expect(result.bar).toBe(false);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user