Skip to main content
Glama
index-enhanced-simple.test.ts10.5 kB
/** * @fileoverview Simplified tests for Enhanced MCP server - focusing on code coverage */ import { describe, it, expect, beforeEach, vi } from 'vitest'; import { getToolDiscoveryConfig, defaultToolDiscoveryConfig, productionToolDiscoveryConfig, developmentToolDiscoveryConfig, TOOL_CATEGORIES, TOOL_TAGS, parseToolVersion, compareToolVersions, } from '../../config/tool-discovery.config.js'; describe('Tool Discovery Configuration', () => { let originalEnv: typeof process.env; beforeEach(() => { originalEnv = process.env; vi.clearAllMocks(); }); afterEach(() => { process.env = originalEnv; }); describe('getToolDiscoveryConfig', () => { it('should return production config when NODE_ENV is production', () => { process.env.NODE_ENV = 'production'; const config = getToolDiscoveryConfig(); expect(config.excludeTags).toContain('deprecated'); expect(config.excludeTags).toContain('experimental'); expect(config.excludeTags).toContain('development'); expect(config.excludeTags).toContain('test'); expect(config.includeCategories).toContain('core'); }); it('should return development config when NODE_ENV is development', () => { process.env.NODE_ENV = 'development'; const config = getToolDiscoveryConfig(); expect(config.excludeTags).toContain('deprecated'); expect(config.excludeTags).not.toContain('experimental'); expect(config.directories).toContain('./src/tools/dev'); }); it('should return default config for unknown environment', () => { process.env.NODE_ENV = 'test'; const config = getToolDiscoveryConfig(); expect(config.excludeTags).toContain('deprecated'); expect(config.excludeTags).toContain('experimental'); expect(config.directories).toContain('./src/tools'); }); it('should return default config when NODE_ENV is not set', () => { delete process.env.NODE_ENV; const config = getToolDiscoveryConfig(); expect(config).toBeDefined(); expect(config.directories).toBeDefined(); expect(config.patterns).toBeDefined(); }); }); describe('defaultToolDiscoveryConfig', () => { it('should have required properties', () => { expect(defaultToolDiscoveryConfig.directories).toEqual(['./src/tools', './plugins']); expect(defaultToolDiscoveryConfig.patterns).toEqual([ '*.tool.js', '*.tool.mjs', '*.plugin.js', ]); expect(defaultToolDiscoveryConfig.recursive).toBe(true); expect(defaultToolDiscoveryConfig.excludeTags).toContain('deprecated'); expect(defaultToolDiscoveryConfig.excludeTags).toContain('experimental'); }); }); describe('productionToolDiscoveryConfig', () => { it('should extend default config with production settings', () => { expect(productionToolDiscoveryConfig.directories).toEqual(['./src/tools', './plugins']); expect(productionToolDiscoveryConfig.excludeTags).toContain('deprecated'); expect(productionToolDiscoveryConfig.excludeTags).toContain('experimental'); expect(productionToolDiscoveryConfig.excludeTags).toContain('development'); expect(productionToolDiscoveryConfig.excludeTags).toContain('test'); expect(productionToolDiscoveryConfig.includeCategories).toEqual([ 'core', 'analytics', 'security', 'compliance', ]); }); }); describe('developmentToolDiscoveryConfig', () => { it('should extend default config with development settings', () => { expect(developmentToolDiscoveryConfig.directories).toContain('./src/tools'); expect(developmentToolDiscoveryConfig.directories).toContain('./plugins'); expect(developmentToolDiscoveryConfig.directories).toContain('./src/tools/dev'); expect(developmentToolDiscoveryConfig.excludeTags).toEqual(['deprecated']); }); }); describe('TOOL_CATEGORIES', () => { it('should define all tool categories', () => { expect(TOOL_CATEGORIES.CORE).toBe('core'); expect(TOOL_CATEGORIES.ANALYTICS).toBe('analytics'); expect(TOOL_CATEGORIES.SECURITY).toBe('security'); expect(TOOL_CATEGORIES.COMPLIANCE).toBe('compliance'); expect(TOOL_CATEGORIES.UTILITIES).toBe('utilities'); expect(TOOL_CATEGORIES.INTEGRATION).toBe('integration'); expect(TOOL_CATEGORIES.MONITORING).toBe('monitoring'); }); }); describe('TOOL_TAGS', () => { it('should define all tool tags', () => { expect(TOOL_TAGS.STABLE).toBe('stable'); expect(TOOL_TAGS.BETA).toBe('beta'); expect(TOOL_TAGS.EXPERIMENTAL).toBe('experimental'); expect(TOOL_TAGS.DEPRECATED).toBe('deprecated'); expect(TOOL_TAGS.DEVELOPMENT).toBe('development'); expect(TOOL_TAGS.TEST).toBe('test'); expect(TOOL_TAGS.FAST).toBe('fast'); expect(TOOL_TAGS.SLOW).toBe('slow'); expect(TOOL_TAGS.REQUIRES_AUTH).toBe('requires-auth'); }); }); describe('parseToolVersion', () => { it('should parse version string correctly', () => { const version = parseToolVersion('1.2.3'); expect(version).toEqual({ major: 1, minor: 2, patch: 3, }); }); it('should parse version with prerelease', () => { const version = parseToolVersion('2.0.0-beta'); expect(version).toEqual({ major: 2, minor: 0, patch: 0, prerelease: 'beta', }); }); it('should parse version with complex prerelease', () => { const version = parseToolVersion('1.0.0-alpha.1'); expect(version).toEqual({ major: 1, minor: 0, patch: 0, prerelease: 'alpha.1', }); }); it('should throw error for invalid version format', () => { expect(() => parseToolVersion('invalid')).toThrow('Invalid version format: invalid'); expect(() => parseToolVersion('1.2')).toThrow('Invalid version format: 1.2'); expect(() => parseToolVersion('a.b.c')).toThrow('Invalid version format: a.b.c'); }); }); describe('compareToolVersions', () => { it('should compare major versions correctly', () => { const v1 = { major: 1, minor: 0, patch: 0 }; const v2 = { major: 2, minor: 0, patch: 0 }; expect(compareToolVersions(v1, v2)).toBeLessThan(0); expect(compareToolVersions(v2, v1)).toBeGreaterThan(0); }); it('should compare minor versions correctly', () => { const v1 = { major: 1, minor: 0, patch: 0 }; const v2 = { major: 1, minor: 1, patch: 0 }; expect(compareToolVersions(v1, v2)).toBeLessThan(0); expect(compareToolVersions(v2, v1)).toBeGreaterThan(0); }); it('should compare patch versions correctly', () => { const v1 = { major: 1, minor: 0, patch: 0 }; const v2 = { major: 1, minor: 0, patch: 1 }; expect(compareToolVersions(v1, v2)).toBeLessThan(0); expect(compareToolVersions(v2, v1)).toBeGreaterThan(0); }); it('should consider prerelease versions as lower', () => { const v1 = { major: 1, minor: 0, patch: 0, prerelease: 'beta' }; const v2 = { major: 1, minor: 0, patch: 0 }; expect(compareToolVersions(v1, v2)).toBeLessThan(0); expect(compareToolVersions(v2, v1)).toBeGreaterThan(0); }); it('should compare prerelease versions alphabetically', () => { const v1 = { major: 1, minor: 0, patch: 0, prerelease: 'alpha' }; const v2 = { major: 1, minor: 0, patch: 0, prerelease: 'beta' }; expect(compareToolVersions(v1, v2)).toBeLessThan(0); expect(compareToolVersions(v2, v1)).toBeGreaterThan(0); }); it('should return 0 for equal versions', () => { const v1 = { major: 1, minor: 2, patch: 3 }; const v2 = { major: 1, minor: 2, patch: 3 }; expect(compareToolVersions(v1, v2)).toBe(0); }); it('should return 0 for equal versions with prerelease', () => { const v1 = { major: 1, minor: 0, patch: 0, prerelease: 'beta' }; const v2 = { major: 1, minor: 0, patch: 0, prerelease: 'beta' }; expect(compareToolVersions(v1, v2)).toBe(0); }); }); describe('Configuration validation', () => { it('should have valid directory paths in all configs', () => { const configs = [ defaultToolDiscoveryConfig, productionToolDiscoveryConfig, developmentToolDiscoveryConfig, ]; configs.forEach((config) => { expect(config.directories).toBeDefined(); expect(Array.isArray(config.directories)).toBe(true); config.directories?.forEach((dir) => { expect(typeof dir).toBe('string'); expect(dir.length).toBeGreaterThan(0); }); }); }); it('should have valid file patterns in all configs', () => { const configs = [ defaultToolDiscoveryConfig, productionToolDiscoveryConfig, developmentToolDiscoveryConfig, ]; configs.forEach((config) => { expect(config.patterns).toBeDefined(); expect(Array.isArray(config.patterns)).toBe(true); config.patterns?.forEach((pattern) => { expect(typeof pattern).toBe('string'); expect(pattern).toContain('*'); }); }); }); it('should have recursive flag defined in all configs', () => { const configs = [ defaultToolDiscoveryConfig, productionToolDiscoveryConfig, developmentToolDiscoveryConfig, ]; configs.forEach((config) => { expect(typeof config.recursive).toBe('boolean'); }); }); }); }); describe('Enhanced Server Initialization Coverage', () => { it('should cover registerCoreTools function', async () => { // Import the module to get coverage of the registerCoreTools function const module = await import('../../server/index-enhanced.js'); expect(module.runEnhancedServer).toBeDefined(); }); it('should handle module execution check', () => { // This tests the module execution check at the bottom of index-enhanced.ts const testUrl = 'file:///test/path.js'; const testArgv = ['/different/path.js']; // The condition should be false when URLs don't match expect(testUrl === `file://${testArgv[0]}`).toBe(false); // The condition should be true when URLs match const matchingArgv = ['/test/path.js']; const matchingUrl = `file://${matchingArgv[0]}`; expect(matchingUrl === `file://${matchingArgv[0]}`).toBe(true); }); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sapientpants/deepsource-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server