vibe-coder-mcp
Version:
Production-ready MCP server with complete agent integration, multi-transport support, and comprehensive development automation tools for AI-assisted workflows.
158 lines (157 loc) • 7.82 kB
JavaScript
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
import { UnifiedSecurityConfigManager, getUnifiedSecurityConfig } from './unified-security-config.js';
describe('UnifiedSecurityConfigManager', () => {
let configManager;
beforeEach(() => {
configManager = UnifiedSecurityConfigManager.getInstance();
configManager.reset();
});
afterEach(() => {
configManager.reset();
});
describe('MCP Configuration Integration', () => {
it('should initialize from MCP client config', () => {
const mockMCPConfig = {
baseUrl: 'https://openrouter.ai/api/v1',
apiKey: 'test-key',
geminiModel: 'google/gemini-2.5-flash-preview-05-20',
perplexityModel: 'perplexity/llama-3.1-sonar-small-128k-online',
tools: {
'vibe-task-manager': {
allowedReadDirectory: '/test/read/directory',
allowedWriteDirectory: '/test/write/directory',
securityMode: 'strict'
}
},
config: {},
llm_mapping: {}
};
configManager.initializeFromMCPConfig(mockMCPConfig);
const config = configManager.getConfig();
expect(config.allowedReadDirectory).toBe('/test/read/directory');
expect(config.allowedWriteDirectory).toBe('/test/write/directory');
expect(config.securityMode).toBe('strict');
expect(config.allowedDirectories).toContain('/test/read/directory');
expect(config.allowedDirectories).toContain('/test/write/directory');
});
it('should fall back to environment variables when MCP config is not available', () => {
process.env.VIBE_TASK_MANAGER_READ_DIR = '/env/read/directory';
process.env.VIBE_CODER_OUTPUT_DIR = '/env/write/directory';
process.env.VIBE_TASK_MANAGER_SECURITY_MODE = 'permissive';
const mockMCPConfig = {
baseUrl: 'https://openrouter.ai/api/v1',
apiKey: 'test-key',
geminiModel: 'google/gemini-2.5-flash-preview-05-20',
perplexityModel: 'perplexity/llama-3.1-sonar-small-128k-online',
tools: {},
config: {},
llm_mapping: {}
};
configManager.initializeFromMCPConfig(mockMCPConfig);
const config = configManager.getConfig();
expect(config.allowedReadDirectory).toBe('/env/read/directory');
expect(config.allowedWriteDirectory).toBe('/env/write/directory');
expect(config.securityMode).toBe('permissive');
delete process.env.VIBE_TASK_MANAGER_READ_DIR;
delete process.env.VIBE_CODER_OUTPUT_DIR;
delete process.env.VIBE_TASK_MANAGER_SECURITY_MODE;
});
it('should provide component-specific configurations', () => {
const mockMCPConfig = {
baseUrl: 'https://openrouter.ai/api/v1',
apiKey: 'test-key',
geminiModel: 'google/gemini-2.5-flash-preview-05-20',
perplexityModel: 'perplexity/llama-3.1-sonar-small-128k-online',
tools: {
'vibe-task-manager': {
allowedReadDirectory: '/test/read',
allowedWriteDirectory: '/test/write',
securityMode: 'strict'
}
},
config: {},
llm_mapping: {}
};
configManager.initializeFromMCPConfig(mockMCPConfig);
const filesystemConfig = configManager.getFilesystemSecurityConfig();
expect(filesystemConfig.allowedDirectories).toContain('/test/read');
expect(filesystemConfig.allowedDirectories).toContain('/test/write');
expect(filesystemConfig.securityMode).toBe('strict');
const pathValidatorConfig = configManager.getPathValidatorConfig();
expect(pathValidatorConfig.allowedDirectories).toContain('/test/read');
expect(pathValidatorConfig.allowedDirectories).toContain('/test/write');
const securityManagerConfig = configManager.getSecurityManagerConfig();
expect(securityManagerConfig.pathSecurity.allowedDirectories).toContain('/test/read');
expect(securityManagerConfig.pathSecurity.allowedDirectories).toContain('/test/write');
expect(securityManagerConfig.strictMode).toBe(true);
});
});
describe('Path Validation', () => {
beforeEach(() => {
const mockMCPConfig = {
baseUrl: 'https://openrouter.ai/api/v1',
apiKey: 'test-key',
geminiModel: 'gemini-pro',
perplexityModel: 'pplx-7b-online',
tools: {
'vibe-task-manager': {
allowedReadDirectory: '/allowed/read',
allowedWriteDirectory: '/allowed/write',
securityMode: 'strict'
}
},
config: {},
llm_mapping: {}
};
configManager.initializeFromMCPConfig(mockMCPConfig);
});
it('should validate read paths correctly', () => {
expect(configManager.isPathAllowed('/allowed/read/file.txt', 'read')).toBe(true);
expect(configManager.isPathAllowed('/allowed/read/subdir/file.txt', 'read')).toBe(true);
expect(configManager.isPathAllowed('/forbidden/file.txt', 'read')).toBe(false);
});
it('should validate write paths correctly', () => {
expect(configManager.isPathAllowed('/allowed/write/file.txt', 'write')).toBe(true);
expect(configManager.isPathAllowed('/allowed/write/subdir/file.txt', 'write')).toBe(true);
expect(configManager.isPathAllowed('/forbidden/file.txt', 'write')).toBe(false);
});
});
describe('Configuration Status', () => {
it('should report correct status when not initialized', () => {
const status = configManager.getConfigStatus();
expect(status.initialized).toBe(false);
expect(status.mcpConfigPresent).toBe(false);
});
it('should report correct status when initialized', () => {
const mockMCPConfig = {
baseUrl: 'https://openrouter.ai/api/v1',
apiKey: 'test-key',
geminiModel: 'google/gemini-2.5-flash-preview-05-20',
perplexityModel: 'perplexity/llama-3.1-sonar-small-128k-online',
tools: {
'vibe-task-manager': {
allowedReadDirectory: '/test/read',
allowedWriteDirectory: '/test/write',
securityMode: 'strict'
}
},
config: {},
llm_mapping: {}
};
configManager.initializeFromMCPConfig(mockMCPConfig);
const status = configManager.getConfigStatus();
expect(status.initialized).toBe(true);
expect(status.mcpConfigPresent).toBe(true);
expect(status.allowedReadDirectory).toBe('/test/read');
expect(status.allowedWriteDirectory).toBe('/test/write');
expect(status.securityMode).toBe('strict');
});
});
describe('Singleton Pattern', () => {
it('should return the same instance', () => {
const instance1 = getUnifiedSecurityConfig();
const instance2 = getUnifiedSecurityConfig();
expect(instance1).toBe(instance2);
});
});
});