feat: vendor permission system source

This commit is contained in:
云服务部-叶林立
2026-08-19 14:35:19 +08:00
parent 198584daf8
commit 410c50a3e5
809 changed files with 157793 additions and 139 deletions
+58
View File
@@ -0,0 +1,58 @@
import { describe, expect, test } from "vitest";
import { isDenyWithReason, isPermissionState } from "#src/types";
describe("isPermissionState", () => {
test("returns true for 'allow'", () => {
expect(isPermissionState("allow")).toBe(true);
});
test("returns true for 'deny'", () => {
expect(isPermissionState("deny")).toBe(true);
});
test("returns true for 'ask'", () => {
expect(isPermissionState("ask")).toBe(true);
});
test("returns false for unrecognized strings", () => {
expect(isPermissionState("ALLOW")).toBe(false);
expect(isPermissionState("permit")).toBe(false);
expect(isPermissionState("")).toBe(false);
expect(isPermissionState("block")).toBe(false);
});
test("returns false for non-string types", () => {
expect(isPermissionState(null)).toBe(false);
expect(isPermissionState(undefined)).toBe(false);
expect(isPermissionState(1)).toBe(false);
expect(isPermissionState({})).toBe(false);
});
});
describe("isDenyWithReason", () => {
test("returns true for { action: 'deny' } without a reason", () => {
expect(isDenyWithReason({ action: "deny" })).toBe(true);
});
test("returns true for { action: 'deny', reason: '...' }", () => {
expect(isDenyWithReason({ action: "deny", reason: "Use pnpm" })).toBe(true);
});
test("returns false for non-deny actions", () => {
expect(isDenyWithReason({ action: "allow" })).toBe(false);
expect(isDenyWithReason({ action: "ask" })).toBe(false);
});
test("returns false for a non-string reason", () => {
expect(isDenyWithReason({ action: "deny", reason: 42 })).toBe(false);
expect(isDenyWithReason({ action: "deny", reason: null })).toBe(false);
});
test("returns false for non-object types", () => {
expect(isDenyWithReason(null)).toBe(false);
expect(isDenyWithReason(undefined)).toBe(false);
expect(isDenyWithReason("deny")).toBe(false);
expect(isDenyWithReason(["deny"])).toBe(false);
});
});