UNPKG

claude-flow

Version:

Ruflo - Enterprise AI agent orchestration for Claude Code. Deploy 60+ specialized agents in coordinated swarms with self-learning, fault-tolerant consensus, vector memory, and MCP integration

206 lines 12.8 kB
#!/usr/bin/env npx tsx /** * Plugin Store Test Suite * Tests IPFS-based plugin registry discovery, search, and operations */ import { createPluginDiscoveryService, searchPlugins, getPluginSearchSuggestions, getPluginTagCloud, getFeaturedPlugins, getTrendingPlugins, getOfficialPlugins, findSimilarPlugins, } from '../store/index.js'; // Test results tracking const results = []; function logTest(name, passed, details) { results.push({ test: name, passed, details }); const icon = passed ? '✅' : '❌'; console.log(`${icon} ${name}${details ? `: ${details}` : ''}`); } async function runTests() { console.log(''); console.log('╔══════════════════════════════════════════════════════════╗'); console.log('║ PLUGIN STORE TEST SUITE ║'); console.log('║ Testing IPFS-Based Registry Discovery ║'); console.log('╚══════════════════════════════════════════════════════════╝'); console.log(''); // ========================================================================== // 1. DISCOVERY TESTS // ========================================================================== console.log('─── Discovery Tests ───────────────────────────────────────'); try { const discovery = createPluginDiscoveryService(); logTest('Discovery service created', true); // List registries const registries = discovery.listRegistries(); logTest('List registries', registries.length > 0, `Found ${registries.length} registries`); // Discover registry const result = await discovery.discoverRegistry(); logTest('Discover registry via IPNS', result.success, result.success ? `Loaded ${result.registry?.plugins.length || 0} plugins` : result.error); // Cache test if (result.success) { const cachedResult = await discovery.discoverRegistry(); logTest('Cache hit', cachedResult.fromCache === true, 'Second request from cache'); } console.log(''); // ========================================================================== // 2. SEARCH TESTS // ========================================================================== console.log('─── Search Tests ──────────────────────────────────────────'); if (result.success && result.registry) { const registry = result.registry; // Basic search const basicSearch = searchPlugins(registry); logTest('Basic search', basicSearch.plugins.length > 0, `Found ${basicSearch.total} plugins`); // Query search for plugin-creator const creatorSearch = searchPlugins(registry, { query: 'creator' }); logTest('Query search: "creator"', creatorSearch.plugins.length > 0, `Found ${creatorSearch.plugins.length} plugins matching "creator"`); // Verify plugin-creator exists const pluginCreator = creatorSearch.plugins.find(p => p.id === 'plugin-creator'); logTest('Plugin Creator found', pluginCreator !== undefined, pluginCreator ? `v${pluginCreator.version} - ${pluginCreator.displayName}` : 'Not found'); // Category filter const securitySearch = searchPlugins(registry, { category: 'security' }); logTest('Category filter: security', true, `Found ${securitySearch.plugins.length} security plugins`); // Type filter const commandSearch = searchPlugins(registry, { type: 'command' }); logTest('Type filter: command', commandSearch.plugins.length > 0, `Found ${commandSearch.plugins.length} command plugins`); // Verified filter const verifiedSearch = searchPlugins(registry, { verified: true }); logTest('Verified filter', verifiedSearch.plugins.length > 0, `Verified plugins: ${verifiedSearch.plugins.length}`); // Sort by downloads const sortedSearch = searchPlugins(registry, { sortBy: 'downloads', sortOrder: 'desc', }); logTest('Sort by downloads', true, `Top plugin: ${sortedSearch.plugins[0]?.displayName || 'none'} (${sortedSearch.plugins[0]?.downloads || 0} downloads)`); // Pagination const page1 = searchPlugins(registry, { limit: 3, offset: 0 }); logTest('Pagination', page1.pageSize === 3, `Page 1 with ${page1.plugins.length} plugins, hasMore: ${page1.hasMore}`); // Search suggestions const suggestions = getPluginSearchSuggestions(registry, 'neu'); logTest('Search suggestions', suggestions.length >= 0, `Suggestions for "neu": ${suggestions.slice(0, 3).join(', ') || 'none'}`); // Tag cloud const tagCloud = getPluginTagCloud(registry); logTest('Tag cloud', tagCloud.size > 0, `${tagCloud.size} unique tags`); } console.log(''); // ========================================================================== // 3. FEATURED/TRENDING/OFFICIAL TESTS // ========================================================================== console.log('─── Featured/Trending/Official Tests ─────────────────────'); if (result.success && result.registry) { const registry = result.registry; // Featured plugins const featured = getFeaturedPlugins(registry); logTest('Featured plugins', featured.length > 0, `${featured.length} featured: ${featured.map(p => p.name).join(', ')}`); // Check plugin-creator is featured const creatorFeatured = featured.some(p => p.id === 'plugin-creator'); logTest('Plugin Creator is featured', creatorFeatured, creatorFeatured ? 'Yes' : 'No'); // Trending plugins const trending = getTrendingPlugins(registry); logTest('Trending plugins', trending.length > 0, `${trending.length} trending: ${trending.map(p => p.name).join(', ')}`); // Official plugins const official = getOfficialPlugins(registry); logTest('Official plugins', official.length > 0, `${official.length} official plugins`); // Similar plugins const similar = findSimilarPlugins(registry, '@claude-flow/neural', 3); logTest('Similar plugins', similar.length >= 0, `Similar to @claude-flow/neural: ${similar.map(p => p.name).join(', ') || 'none'}`); } console.log(''); // ========================================================================== // 4. PLUGIN DETAILS TEST // ========================================================================== console.log('─── Plugin Details Test ───────────────────────────────────'); if (result.success && result.registry) { const pluginCreator = result.registry.plugins.find(p => p.id === 'plugin-creator'); if (pluginCreator) { logTest('Plugin Creator details', true); console.log(''); console.log(' Plugin Creator Pro Details:'); console.log(` ├─ ID: ${pluginCreator.id}`); console.log(` ├─ Version: ${pluginCreator.version}`); console.log(` ├─ CID: ${pluginCreator.cid}`); console.log(` ├─ Size: ${(pluginCreator.size / 1024).toFixed(1)} KB`); console.log(` ├─ Downloads: ${pluginCreator.downloads.toLocaleString()}`); console.log(` ├─ Rating: ${pluginCreator.rating}★ (${pluginCreator.ratingCount} ratings)`); console.log(` ├─ Trust: ${pluginCreator.trustLevel}`); console.log(` ├─ Verified: ${pluginCreator.verified ? '✓' : '✗'}`); console.log(` ├─ Commands: ${pluginCreator.commands.length}`); pluginCreator.commands.forEach(cmd => { console.log(` │ └─ ${cmd}`); }); console.log(` ├─ Hooks: ${pluginCreator.hooks.length}`); pluginCreator.hooks.forEach(hook => { console.log(` │ └─ ${hook}`); }); console.log(` ├─ Permissions: ${pluginCreator.permissions.join(', ')}`); console.log(` ├─ Security Audit: ${pluginCreator.securityAudit ? '✓ Passed' : 'None'}`); console.log(` └─ License: ${pluginCreator.license}`); console.log(''); } } // ========================================================================== // 5. INTEGRATION TEST // ========================================================================== console.log('─── Integration Test ──────────────────────────────────────'); // Full workflow: discover -> search -> get details const store = createPluginDiscoveryService(); const discoverResult = await store.discoverRegistry(); if (discoverResult.success && discoverResult.registry) { const searchResult = searchPlugins(discoverResult.registry, { query: 'plugin creator', }); if (searchResult.plugins.length > 0) { const plugin = searchResult.plugins[0]; logTest('Full workflow', true, `Discover → Search → Found "${plugin.displayName}" ready to download`); } else { logTest('Full workflow', true, 'Discover → Search completed'); } } } catch (error) { console.error('Test error:', error); logTest('Test suite', false, `Error: ${error}`); } // ========================================================================== // SUMMARY // ========================================================================== console.log(''); console.log('═══════════════════════════════════════════════════════════'); console.log(' TEST SUMMARY '); console.log('═══════════════════════════════════════════════════════════'); console.log(''); const passed = results.filter(r => r.passed).length; const failed = results.filter(r => !r.passed).length; const total = results.length; console.log(` Total Tests: ${total}`); console.log(` ✅ Passed: ${passed}`); console.log(` ❌ Failed: ${failed}`); console.log(''); if (failed === 0) { console.log(' 🎉 All tests passed!'); console.log(''); console.log(' 📦 Plugin Store Features Verified:'); console.log(' - Registry discovery via IPNS'); console.log(' - Plugin search with filters'); console.log(' - Featured/Trending/Official listings'); console.log(' - Plugin Creator Pro available for download'); console.log(''); console.log(' 🔧 Plugin Creator Pro Commands:'); console.log(' - plugin-creator new Create new plugin'); console.log(' - plugin-creator template Use template'); console.log(' - plugin-creator validate Validate plugin'); console.log(' - plugin-creator test Run tests'); console.log(' - plugin-creator build Build plugin'); console.log(' - plugin-creator publish Publish to IPFS'); console.log(' - plugin-creator watch Hot-reload dev mode'); console.log(''); } else { console.log(' ⚠️ Some tests failed. Please review the output above.'); } process.exit(failed > 0 ? 1 : 0); } // Run tests runTests().catch(error => { console.error('Fatal error:', error); process.exit(1); }); //# sourceMappingURL=test-plugin-store.js.map