mirror of
https://bitbucket.org/siakitem/my-pi.git
synced 2026-08-28 08:35:57 +00:00
feat: vendor permission system source
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
import { join } from "node:path";
|
||||
import { beforeEach, describe, expect, it, vi } from "vitest";
|
||||
|
||||
const { mockDiscoverGlobalNodeModulesRoot } = vi.hoisted(() => ({
|
||||
mockDiscoverGlobalNodeModulesRoot: vi.fn<() => string | null>(),
|
||||
}));
|
||||
|
||||
vi.mock("../src/node-modules-discovery", () => ({
|
||||
discoverGlobalNodeModulesRoot: mockDiscoverGlobalNodeModulesRoot,
|
||||
}));
|
||||
|
||||
import { getGlobalLogsDir } from "#src/config-paths";
|
||||
import { computeExtensionPaths } from "#src/extension-paths";
|
||||
|
||||
describe("computeExtensionPaths", () => {
|
||||
beforeEach(() => {
|
||||
mockDiscoverGlobalNodeModulesRoot.mockReset();
|
||||
mockDiscoverGlobalNodeModulesRoot.mockReturnValue(
|
||||
"/mock/global/node_modules",
|
||||
);
|
||||
});
|
||||
|
||||
it("sets agentDir from argument", () => {
|
||||
const paths = computeExtensionPaths("/test/agent");
|
||||
expect(paths.agentDir).toBe("/test/agent");
|
||||
});
|
||||
|
||||
it("derives sessionsDir as agentDir/sessions", () => {
|
||||
const paths = computeExtensionPaths("/test/agent");
|
||||
expect(paths.sessionsDir).toBe("/test/agent/sessions");
|
||||
});
|
||||
|
||||
it("derives subagentSessionsDir as agentDir/subagent-sessions", () => {
|
||||
const paths = computeExtensionPaths("/test/agent");
|
||||
expect(paths.subagentSessionsDir).toBe("/test/agent/subagent-sessions");
|
||||
});
|
||||
|
||||
it("derives forwardingDir as sessionsDir/permission-forwarding", () => {
|
||||
const paths = computeExtensionPaths("/test/agent");
|
||||
expect(paths.forwardingDir).toBe(
|
||||
join("/test/agent/sessions", "permission-forwarding"),
|
||||
);
|
||||
});
|
||||
|
||||
it("derives globalLogsDir via getGlobalLogsDir(agentDir)", () => {
|
||||
const paths = computeExtensionPaths("/test/agent");
|
||||
expect(paths.globalLogsDir).toBe(getGlobalLogsDir("/test/agent"));
|
||||
});
|
||||
|
||||
it("includes agentDir in piInfrastructureDirs", () => {
|
||||
const paths = computeExtensionPaths("/test/agent");
|
||||
expect(paths.piInfrastructureDirs).toContain("/test/agent");
|
||||
});
|
||||
|
||||
it("includes agentDir/git in piInfrastructureDirs", () => {
|
||||
const paths = computeExtensionPaths("/test/agent");
|
||||
expect(paths.piInfrastructureDirs).toContain("/test/agent/git");
|
||||
});
|
||||
|
||||
it("includes discovered global node_modules root in piInfrastructureDirs", () => {
|
||||
const paths = computeExtensionPaths("/test/agent");
|
||||
expect(paths.piInfrastructureDirs).toContain("/mock/global/node_modules");
|
||||
});
|
||||
|
||||
it("omits global node_modules from piInfrastructureDirs when discovery returns null", () => {
|
||||
mockDiscoverGlobalNodeModulesRoot.mockReturnValue(null);
|
||||
const paths = computeExtensionPaths("/test/agent");
|
||||
expect(paths.piInfrastructureDirs).toHaveLength(2);
|
||||
expect(paths.piInfrastructureDirs).toContain("/test/agent");
|
||||
expect(paths.piInfrastructureDirs).toContain("/test/agent/git");
|
||||
});
|
||||
|
||||
it("all entries in piInfrastructureDirs are strings (no null)", () => {
|
||||
mockDiscoverGlobalNodeModulesRoot.mockReturnValue(null);
|
||||
const paths = computeExtensionPaths("/test/agent");
|
||||
for (const dir of paths.piInfrastructureDirs) {
|
||||
expect(typeof dir).toBe("string");
|
||||
}
|
||||
});
|
||||
|
||||
it("includes piPackageDir in piInfrastructureDirs when provided", () => {
|
||||
const paths = computeExtensionPaths("/test/agent", "/pi/install");
|
||||
expect(paths.piInfrastructureDirs).toContain("/pi/install");
|
||||
});
|
||||
|
||||
it("omits piPackageDir when not provided (current behavior preserved)", () => {
|
||||
const paths = computeExtensionPaths("/test/agent");
|
||||
expect(paths.piInfrastructureDirs).toEqual([
|
||||
"/test/agent",
|
||||
"/test/agent/git",
|
||||
"/mock/global/node_modules",
|
||||
]);
|
||||
});
|
||||
|
||||
it("omits piPackageDir when given an empty string", () => {
|
||||
const paths = computeExtensionPaths("/test/agent", "");
|
||||
expect(paths.piInfrastructureDirs).not.toContain("");
|
||||
});
|
||||
|
||||
it("two calls with different agentDirs produce independent results", () => {
|
||||
const a = computeExtensionPaths("/agent/a");
|
||||
const b = computeExtensionPaths("/agent/b");
|
||||
expect(a.agentDir).toBe("/agent/a");
|
||||
expect(b.agentDir).toBe("/agent/b");
|
||||
expect(a.sessionsDir).toBe("/agent/a/sessions");
|
||||
expect(b.sessionsDir).toBe("/agent/b/sessions");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user