@notbnull/mcp-cursor-taskmaster
Version:
A project-scoped MCP server requiring explicit --project-dir configuration for task management, memory retrieval, and agentic workflows
94 lines • 4.08 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const globals_1 = require("@jest/globals");
const path_1 = __importDefault(require("path"));
const fs_1 = __importDefault(require("fs"));
// Mock the getProjectDirectory function with the new simplified logic
function getProjectDirectory() {
const args = process.argv;
const projectDirIndex = args.findIndex((arg) => arg === "--project-dir");
if (projectDirIndex === -1 || projectDirIndex + 1 >= args.length) {
console.error("Error: --project-dir argument is required");
console.error("Usage: node dist/index.js --project-dir <project-directory> [--enable-approval-ui]");
process.exit(1);
}
const projectDir = args[projectDirIndex + 1];
if (!fs_1.default.existsSync(projectDir)) {
console.error(`Error: Project directory does not exist: ${projectDir}`);
process.exit(1);
}
const resolvedDir = path_1.default.resolve(projectDir);
console.error(`Cursor Taskmaster: Using project directory: ${resolvedDir}`);
return resolvedDir;
}
// Mock the isApprovalUIEnabled function
function isApprovalUIEnabled() {
const args = process.argv;
return args.includes("--enable-approval-ui");
}
(0, globals_1.describe)("Project Directory Detection", () => {
const originalArgv = process.argv;
const originalExit = process.exit;
let exitCode;
(0, globals_1.beforeEach)(() => {
process.argv = [...originalArgv];
exitCode = undefined;
// Mock process.exit to capture exit calls instead of actually exiting
process.exit = jest.fn((code) => {
exitCode = code;
throw new Error(`Process exit called with code ${code}`);
});
});
(0, globals_1.afterEach)(() => {
process.argv = originalArgv;
process.exit = originalExit;
});
(0, globals_1.it)("should require --project-dir argument", () => {
process.argv = ["node", "test.js"];
(0, globals_1.expect)(() => getProjectDirectory()).toThrow("Process exit called with code 1");
(0, globals_1.expect)(exitCode).toBe(1);
});
(0, globals_1.it)("should detect project directory from valid command line argument", () => {
const testDir = path_1.default.join(__dirname, "..", "."); // Use current project directory
process.argv = ["node", "test.js", "--project-dir", testDir];
const result = getProjectDirectory();
(0, globals_1.expect)(result).toBe(path_1.default.resolve(testDir));
});
(0, globals_1.it)("should fail if project directory does not exist", () => {
const nonExistentDir = path_1.default.join(__dirname, "non-existent-dir");
process.argv = ["node", "test.js", "--project-dir", nonExistentDir];
(0, globals_1.expect)(() => getProjectDirectory()).toThrow("Process exit called with code 1");
(0, globals_1.expect)(exitCode).toBe(1);
});
(0, globals_1.it)("should detect approval UI flag when present", () => {
process.argv = [
"node",
"test.js",
"--project-dir",
".",
"--enable-approval-ui",
];
const result = isApprovalUIEnabled();
(0, globals_1.expect)(result).toBe(true);
});
(0, globals_1.it)("should not detect approval UI flag when absent", () => {
process.argv = ["node", "test.js", "--project-dir", "."];
const result = isApprovalUIEnabled();
(0, globals_1.expect)(result).toBe(false);
});
(0, globals_1.it)("should handle approval UI flag in different positions", () => {
process.argv = [
"node",
"test.js",
"--enable-approval-ui",
"--project-dir",
".",
];
const result = isApprovalUIEnabled();
(0, globals_1.expect)(result).toBe(true);
});
});
//# sourceMappingURL=project-detection.test.js.map