Files
my-pi/pi-permission-system/test/types.test.ts
T

59 lines
1.9 KiB
TypeScript

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);
});
});