UNPKG

@aashari/mcp-server-atlassian-bitbucket

Version:

Node.js/TypeScript MCP server for Atlassian Bitbucket. Enables AI systems (LLMs) to interact with workspaces, repositories, and pull requests via tools (list, get, comment, search). Connects AI directly to version control workflows through the standard MC

92 lines (91 loc) 3.17 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CliTestUtil = void 0; const child_process_1 = require("child_process"); const path_1 = require("path"); /** * Utility for testing CLI commands with real execution */ class CliTestUtil { /** * Executes a CLI command and returns the result * * @param args - CLI arguments to pass to the command * @param options - Test options * @returns Promise with stdout, stderr, and exit code */ static async runCommand(args, options = {}) { // Default timeout of 30 seconds const timeoutMs = options.timeoutMs || 30000; // CLI execution path - points to the built CLI script const cliPath = (0, path_1.join)(process.cwd(), 'dist', 'index.js'); return new Promise((resolve, reject) => { // Set up timeout handler const timeoutId = setTimeout(() => { child.kill(); reject(new Error(`CLI command timed out after ${timeoutMs}ms`)); }, timeoutMs); // Capture stdout and stderr let stdout = ''; let stderr = ''; // Spawn the process with given arguments const child = (0, child_process_1.spawn)('node', [cliPath, ...args], { env: { ...process.env, ...options.env, }, }); // Collect stdout data child.stdout.on('data', (data) => { stdout += data.toString(); }); // Collect stderr data child.stderr.on('data', (data) => { stderr += data.toString(); }); // Handle process completion child.on('close', (exitCode) => { clearTimeout(timeoutId); resolve({ stdout, stderr, exitCode: exitCode ?? 0, }); }); // Handle process errors child.on('error', (err) => { clearTimeout(timeoutId); reject(err); }); }); } /** * Validates that stdout contains expected strings/patterns */ static validateOutputContains(output, expectedPatterns) { for (const pattern of expectedPatterns) { if (typeof pattern === 'string') { expect(output).toContain(pattern); } else { expect(output).toMatch(pattern); } } } /** * Validates Markdown output format */ static validateMarkdownOutput(output) { // Check for Markdown heading expect(output).toMatch(/^#\s.+/m); // Check for markdown formatting elements like bold text, lists, etc. const markdownElements = [ /\*\*.+\*\*/, // Bold text /-\s.+/, // List items /\|.+\|.+\|/, // Table rows /\[.+\]\(.+\)/, // Links ]; expect(markdownElements.some((pattern) => pattern.test(output))).toBe(true); } } exports.CliTestUtil = CliTestUtil;