UNPKG

hikma-engine

Version:

Code Knowledge Graph Indexer - A sophisticated TypeScript-based indexer that transforms Git repositories into multi-dimensional knowledge stores for AI agents

203 lines (202 loc) 10 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const api_config_1 = require("./api-config"); describe('ApiConfigService', () => { beforeEach(() => { // Clear environment variables delete process.env.HIKMA_API_PORT; delete process.env.HIKMA_API_HOST; delete process.env.HIKMA_API_CORS_ENABLED; delete process.env.HIKMA_API_RATE_LIMIT_MAX_REQUESTS; }); describe('Configuration Loading', () => { it('should load default configuration', () => { const config = api_config_1.apiConfig.getConfig(); expect(config.server.port).toBe(3000); expect(config.server.host).toBe('localhost'); expect(config.cors.enabled).toBe(true); expect(config.rateLimit.maxRequests).toBe(100); expect(config.cache.enabled).toBe(true); expect(config.monitoring.enabled).toBe(true); }); it('should override configuration with environment variables', () => { process.env.HIKMA_API_PORT = '4000'; process.env.HIKMA_API_HOST = '0.0.0.0'; process.env.HIKMA_API_CORS_ENABLED = 'false'; process.env.HIKMA_API_RATE_LIMIT_MAX_REQUESTS = '200'; // Create new instance to test environment variable loading const testConfig = require('./api-config').apiConfig; const config = testConfig.getConfig(); expect(config.server.port).toBe(4000); expect(config.server.host).toBe('0.0.0.0'); expect(config.cors.enabled).toBe(false); expect(config.rateLimit.maxRequests).toBe(200); }); it('should handle array environment variables', () => { process.env.HIKMA_API_CORS_ORIGINS = 'http://localhost:3000,https://example.com'; process.env.HIKMA_API_SEARCH_ALLOWED_FILE_TYPES = '.ts,.js,.py'; const testConfig = require('./api-config').apiConfig; const config = testConfig.getConfig(); expect(config.cors.origins).toEqual(['http://localhost:3000', 'https://example.com']); expect(config.search.filters.allowedFileTypes).toEqual(['.ts', '.js', '.py']); }); }); describe('Configuration Validation', () => { it('should validate valid configuration', () => { expect(api_config_1.apiConfig.validateConfiguration()).toBe(true); }); it('should reject invalid port numbers', () => { expect(() => { api_config_1.apiConfig.updateConfig({ server: { ...api_config_1.apiConfig.getServerConfig(), port: 99999, // Invalid port }, }); }).toThrow(); }); it('should reject invalid similarity thresholds', () => { expect(() => { api_config_1.apiConfig.updateConfig({ search: { ...api_config_1.apiConfig.getSearchConfig(), thresholds: { ...api_config_1.apiConfig.getSearchConfig().thresholds, minSimilarity: 1.5, // Invalid similarity }, }, }); }).toThrow(); }); }); describe('Configuration Access Methods', () => { it('should provide server configuration', () => { const serverConfig = api_config_1.apiConfig.getServerConfig(); expect(serverConfig).toHaveProperty('port'); expect(serverConfig).toHaveProperty('host'); expect(serverConfig).toHaveProperty('timeout'); expect(serverConfig).toHaveProperty('maxRequestSize'); }); it('should provide cache configuration', () => { const cacheConfig = api_config_1.apiConfig.getCacheConfig(); expect(cacheConfig).toHaveProperty('enabled'); expect(cacheConfig).toHaveProperty('ttl'); expect(cacheConfig).toHaveProperty('maxSize'); }); it('should provide search configuration', () => { const searchConfig = api_config_1.apiConfig.getSearchConfig(); expect(searchConfig).toHaveProperty('limits'); expect(searchConfig).toHaveProperty('thresholds'); expect(searchConfig).toHaveProperty('filters'); expect(searchConfig).toHaveProperty('enhancement'); }); it('should provide monitoring configuration', () => { const monitoringConfig = api_config_1.apiConfig.getMonitoringConfig(); expect(monitoringConfig).toHaveProperty('enabled'); expect(monitoringConfig).toHaveProperty('healthCheck'); expect(monitoringConfig).toHaveProperty('metrics'); expect(monitoringConfig).toHaveProperty('alerts'); }); it('should provide security configuration', () => { const securityConfig = api_config_1.apiConfig.getSecurityConfig(); expect(securityConfig).toHaveProperty('apiKey'); expect(securityConfig).toHaveProperty('jwt'); expect(securityConfig).toHaveProperty('headers'); }); }); describe('Configuration Updates', () => { it('should update configuration at runtime', () => { const originalPort = api_config_1.apiConfig.getServerConfig().port; api_config_1.apiConfig.updateConfig({ server: { ...api_config_1.apiConfig.getServerConfig(), port: 4000, }, }); expect(api_config_1.apiConfig.getServerConfig().port).toBe(4000); // Restore original configuration api_config_1.apiConfig.updateConfig({ server: { ...api_config_1.apiConfig.getServerConfig(), port: originalPort, }, }); }); it('should validate updates', () => { expect(() => { api_config_1.apiConfig.updateConfig({ server: { ...api_config_1.apiConfig.getServerConfig(), port: -1, // Invalid port }, }); }).toThrow(); }); }); describe('Configuration Summary', () => { it('should provide configuration summary', () => { const summary = api_config_1.apiConfig.getConfigSummary(); expect(summary).toHaveProperty('server'); expect(summary).toHaveProperty('cache'); expect(summary).toHaveProperty('security'); expect(summary).toHaveProperty('monitoring'); expect(summary).toHaveProperty('rateLimit'); expect(summary.server).toHaveProperty('port'); expect(summary.server).toHaveProperty('host'); expect(summary.cache).toHaveProperty('enabled'); expect(summary.security).toHaveProperty('apiKey'); expect(summary.monitoring).toHaveProperty('enabled'); expect(summary.rateLimit).toHaveProperty('enabled'); }); }); describe('Environment Variable Parsing', () => { it('should parse boolean environment variables correctly', () => { process.env.HIKMA_API_CACHE_ENABLED = 'true'; process.env.HIKMA_API_MONITORING_ENABLED = 'false'; const testConfig = require('./api-config').apiConfig; const config = testConfig.getConfig(); expect(config.cache.enabled).toBe(true); expect(config.monitoring.enabled).toBe(false); }); it('should parse number environment variables correctly', () => { process.env.HIKMA_API_CACHE_TTL_SEMANTIC = '1200'; process.env.HIKMA_API_SEARCH_MAX_RESULTS = '50'; const testConfig = require('./api-config').apiConfig; const config = testConfig.getConfig(); expect(config.cache.ttl.semantic).toBe(1200); expect(config.search.limits.maxResults).toBe(50); }); it('should handle empty array environment variables', () => { process.env.HIKMA_API_CORS_ORIGINS = ''; const testConfig = require('./api-config').apiConfig; const config = testConfig.getConfig(); expect(config.cors.origins).toEqual([]); }); it('should trim array values', () => { process.env.HIKMA_API_CORS_ORIGINS = ' http://localhost:3000 , https://example.com '; const testConfig = require('./api-config').apiConfig; const config = testConfig.getConfig(); expect(config.cors.origins).toEqual(['http://localhost:3000', 'https://example.com']); }); }); describe('Default Values', () => { it('should use default values when environment variables are not set', () => { const config = api_config_1.apiConfig.getConfig(); expect(config.server.port).toBe(3000); expect(config.server.timeout).toBe(30000); expect(config.rateLimit.windowMs).toBe(60000); expect(config.cache.ttl.semantic).toBe(900); expect(config.search.limits.maxResults).toBe(100); expect(config.monitoring.healthCheck.interval).toBe(30000); }); it('should use default arrays for file types and excluded directories', () => { const config = api_config_1.apiConfig.getConfig(); expect(config.search.filters.allowedFileTypes).toContain('.ts'); expect(config.search.filters.allowedFileTypes).toContain('.js'); expect(config.search.filters.allowedFileTypes).toContain('.py'); expect(config.search.filters.excludedDirectories).toContain('node_modules'); expect(config.search.filters.excludedDirectories).toContain('dist'); expect(config.search.filters.excludedDirectories).toContain('.git'); }); }); });