Skip to main content
Glama
test-command-aliases.js6.48 kB
#!/usr/bin/env node /** * Test suite for Command Aliases */ import { loadCommandAliases, expandCommandAlias, addCommandAlias, removeCommandAlias, listCommandAliases, suggestAliases } from '../src/command-aliases.js'; import assert from 'assert'; import fs from 'fs'; import path from 'path'; import { fileURLToPath } from 'url'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); console.log('🧪 Testing Command Aliases...\n'); const CUSTOM_ALIASES_FILE = path.join(__dirname, '..', '.command-aliases.json'); const backupFile = CUSTOM_ALIASES_FILE + '.backup'; // Backup existing custom aliases if they exist if (fs.existsSync(CUSTOM_ALIASES_FILE)) { fs.copyFileSync(CUSTOM_ALIASES_FILE, backupFile); console.log('📦 Backed up existing custom aliases\n'); } // Test 1: Load command aliases console.log('Test 1: Load command aliases'); try { const aliases = loadCommandAliases(); assert(typeof aliases === 'object', 'loadCommandAliases should return an object'); assert(Object.keys(aliases).length > 0, 'Should have at least some aliases from profile'); console.log(`✅ Loaded ${Object.keys(aliases).length} aliases\n`); } catch (error) { console.error(`❌ Failed to load aliases: ${error.message}\n`); process.exit(1); } // Test 2: Expand command alias console.log('Test 2: Expand command alias'); try { const aliases = loadCommandAliases(); // Test with a known alias from default profile if (aliases['check-memory']) { const expanded = expandCommandAlias('check-memory'); assert(expanded === aliases['check-memory'], 'Should expand check-memory to its full command'); console.log(`✅ Expanded 'check-memory' to '${expanded}'`); } // Test with non-alias command const nonAlias = expandCommandAlias('ls -la'); assert(nonAlias === 'ls -la', 'Non-alias commands should remain unchanged'); console.log('✅ Non-alias commands remain unchanged\n'); } catch (error) { console.error(`❌ Failed to expand aliases: ${error.message}\n`); process.exit(1); } // Test 3: Add custom alias console.log('Test 3: Add custom alias'); try { const testAlias = 'test-alias-' + Date.now(); const testCommand = 'echo "This is a test command"'; addCommandAlias(testAlias, testCommand); const aliases = loadCommandAliases(); assert(aliases[testAlias] === testCommand, 'Custom alias should be added'); const expanded = expandCommandAlias(testAlias); assert(expanded === testCommand, 'Custom alias should expand correctly'); console.log(`✅ Added custom alias: ${testAlias}\n`); // Cleanup removeCommandAlias(testAlias); } catch (error) { console.error(`❌ Failed to add custom alias: ${error.message}\n`); process.exit(1); } // Test 4: Remove custom alias console.log('Test 4: Remove custom alias'); try { const testAlias = 'test-remove-' + Date.now(); const testCommand = 'echo "To be removed"'; // Add then remove addCommandAlias(testAlias, testCommand); removeCommandAlias(testAlias); const aliases = loadCommandAliases(); assert(!aliases[testAlias], 'Alias should be removed'); console.log('✅ Successfully removed custom alias\n'); } catch (error) { console.error(`❌ Failed to remove alias: ${error.message}\n`); process.exit(1); } // Test 5: List command aliases console.log('Test 5: List command aliases'); try { const list = listCommandAliases(); assert(Array.isArray(list), 'listCommandAliases should return an array'); if (list.length > 0) { const firstAlias = list[0]; assert(firstAlias.alias, 'Each alias should have an alias property'); assert(firstAlias.command, 'Each alias should have a command property'); assert(typeof firstAlias.isFromProfile === 'boolean', 'Each alias should have isFromProfile boolean'); assert(typeof firstAlias.isCustom === 'boolean', 'Each alias should have isCustom boolean'); } console.log(`✅ Listed ${list.length} aliases`); // Show some examples const profileAliases = list.filter(a => a.isFromProfile).slice(0, 3); const customAliases = list.filter(a => a.isCustom).slice(0, 3); if (profileAliases.length > 0) { console.log(' Profile aliases:', profileAliases.map(a => a.alias).join(', ')); } if (customAliases.length > 0) { console.log(' Custom aliases:', customAliases.map(a => a.alias).join(', ')); } console.log(); } catch (error) { console.error(`❌ Failed to list aliases: ${error.message}\n`); process.exit(1); } // Test 6: Suggest aliases console.log('Test 6: Suggest aliases'); try { // Add a test alias for suggestion addCommandAlias('test-suggest', 'test suggestion command'); const suggestions = suggestAliases('test'); assert(Array.isArray(suggestions), 'suggestAliases should return an array'); const testSuggestion = suggestions.find(s => s.alias === 'test-suggest'); assert(testSuggestion, 'Should find the test alias in suggestions'); console.log(`✅ Found ${suggestions.length} suggestions for 'test'`); if (suggestions.length > 0) { console.log(` Examples: ${suggestions.slice(0, 3).map(s => s.alias).join(', ')}`); } console.log(); // Cleanup removeCommandAlias('test-suggest'); } catch (error) { console.error(`❌ Failed to suggest aliases: ${error.message}\n`); process.exit(1); } // Test 7: Profile alias protection console.log('Test 7: Profile alias protection'); try { const aliases = loadCommandAliases(); const profileAlias = Object.keys(aliases)[0]; // Get first alias if (profileAlias) { const originalCommand = aliases[profileAlias]; // Try to remove a profile alias (should reset to original) removeCommandAlias(profileAlias); const newAliases = loadCommandAliases(); assert(newAliases[profileAlias] === originalCommand, 'Profile aliases should be reset, not removed'); console.log(`✅ Profile alias '${profileAlias}' is protected from removal\n`); } } catch (error) { console.error(`❌ Failed profile alias protection test: ${error.message}\n`); process.exit(1); } // Restore original custom aliases if (fs.existsSync(backupFile)) { fs.copyFileSync(backupFile, CUSTOM_ALIASES_FILE); fs.unlinkSync(backupFile); console.log('📦 Restored original custom aliases\n'); } else if (fs.existsSync(CUSTOM_ALIASES_FILE)) { fs.unlinkSync(CUSTOM_ALIASES_FILE); } console.log('🎉 All command alias tests passed!');

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/bvisible/mcp-ssh-manager'

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