fix: resolve type errors across test suite
This commit is contained in:
@@ -0,0 +1,158 @@
|
||||
import { describe, test, expect } from "bun:test";
|
||||
import { permissionValidator } from "../../src/modules/permission-utils/permissionValidator";
|
||||
|
||||
describe("permissionValidator", () => {
|
||||
// -------------------------------------------------------------------
|
||||
// Exact match
|
||||
// -------------------------------------------------------------------
|
||||
describe("exact matches", () => {
|
||||
test("returns true for exact permission match", () => {
|
||||
expect(permissionValidator("company.fetch", ["company.fetch"])).toBe(
|
||||
true,
|
||||
);
|
||||
});
|
||||
|
||||
test("returns false when no match", () => {
|
||||
expect(permissionValidator("company.fetch", ["company.create"])).toBe(
|
||||
false,
|
||||
);
|
||||
});
|
||||
|
||||
test("returns false for empty expressions", () => {
|
||||
expect(permissionValidator("company.fetch", [])).toBe(false);
|
||||
});
|
||||
|
||||
test("handles single string expression", () => {
|
||||
expect(permissionValidator("company.fetch", "company.fetch")).toBe(true);
|
||||
});
|
||||
|
||||
test("handles single string non-match", () => {
|
||||
expect(permissionValidator("company.fetch", "company.create")).toBe(
|
||||
false,
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Wildcard *
|
||||
// -------------------------------------------------------------------
|
||||
describe("wildcard (*)", () => {
|
||||
test("* matches any single-segment permission", () => {
|
||||
expect(permissionValidator("company", ["*"])).toBe(true);
|
||||
});
|
||||
|
||||
test("* matches multi-segment permissions", () => {
|
||||
expect(permissionValidator("company.fetch.many", ["*"])).toBe(true);
|
||||
});
|
||||
|
||||
test("company.* matches company.fetch", () => {
|
||||
expect(permissionValidator("company.fetch", ["company.*"])).toBe(true);
|
||||
});
|
||||
|
||||
test("company.* matches company.fetch.many", () => {
|
||||
expect(permissionValidator("company.fetch.many", ["company.*"])).toBe(
|
||||
true,
|
||||
);
|
||||
});
|
||||
|
||||
test("*.fetch matches company.fetch", () => {
|
||||
expect(permissionValidator("company.fetch", ["*.fetch"])).toBe(true);
|
||||
});
|
||||
|
||||
test("company.fetch.* matches company.fetch.many", () => {
|
||||
expect(
|
||||
permissionValidator("company.fetch.many", ["company.fetch.*"]),
|
||||
).toBe(true);
|
||||
});
|
||||
|
||||
test("company.fetch.* does NOT match company.create", () => {
|
||||
expect(permissionValidator("company.create", ["company.fetch.*"])).toBe(
|
||||
false,
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Single-character wildcard ?
|
||||
// -------------------------------------------------------------------
|
||||
describe("single-character wildcard (?)", () => {
|
||||
test("? matches exactly one character", () => {
|
||||
expect(permissionValidator("company.a", ["company.?"])).toBe(true);
|
||||
});
|
||||
|
||||
test("? does not match multiple characters", () => {
|
||||
expect(permissionValidator("company.ab", ["company.?"])).toBe(false);
|
||||
});
|
||||
|
||||
test("? does not match dot separator", () => {
|
||||
expect(permissionValidator("company.a.b", ["company.?"])).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Bracket groups [a,b,c]
|
||||
// -------------------------------------------------------------------
|
||||
describe("bracket groups [a,b,c]", () => {
|
||||
test("matches first option in group", () => {
|
||||
expect(
|
||||
permissionValidator("company.fetch", ["company.[fetch,create]"]),
|
||||
).toBe(true);
|
||||
});
|
||||
|
||||
test("matches second option in group", () => {
|
||||
expect(
|
||||
permissionValidator("company.create", ["company.[fetch,create]"]),
|
||||
).toBe(true);
|
||||
});
|
||||
|
||||
test("does not match unlisted option", () => {
|
||||
expect(
|
||||
permissionValidator("company.delete", ["company.[fetch,create]"]),
|
||||
).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Multiple expressions
|
||||
// -------------------------------------------------------------------
|
||||
describe("multiple expressions", () => {
|
||||
test("returns true if any expression matches", () => {
|
||||
expect(
|
||||
permissionValidator("role.create", [
|
||||
"company.fetch",
|
||||
"role.create",
|
||||
"user.read",
|
||||
]),
|
||||
).toBe(true);
|
||||
});
|
||||
|
||||
test("returns false if no expression matches", () => {
|
||||
expect(
|
||||
permissionValidator("role.delete", [
|
||||
"company.fetch",
|
||||
"role.create",
|
||||
"user.read",
|
||||
]),
|
||||
).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Complex patterns
|
||||
// -------------------------------------------------------------------
|
||||
describe("complex patterns", () => {
|
||||
test("combined wildcard and bracket", () => {
|
||||
expect(
|
||||
permissionValidator("company.fetch.many", ["company.[fetch,create].*"]),
|
||||
).toBe(true);
|
||||
});
|
||||
|
||||
test("deeply nested permission with wildcard", () => {
|
||||
expect(
|
||||
permissionValidator("unifi.site.wifi.read.passphrase", [
|
||||
"unifi.site.wifi.*",
|
||||
]),
|
||||
).toBe(true);
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user