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

214 lines 11.7 kB
#!/usr/bin/env npx tsx /** * Pattern Store Test Suite * Tests list, search, download, and publish functionality */ import { createDiscoveryService } from '../store/discovery.js'; import { searchPatterns, getSearchSuggestions, getTagCloud } from '../store/search.js'; import { createDownloader } from '../store/download.js'; import { createPublisher } from '../store/publish.js'; import { createSeraphineGenesis } from '../models/seraphine.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('║ PATTERN STORE TEST SUITE ║'); console.log('║ Testing List, Search, Download, Publish ║'); console.log('╚══════════════════════════════════════════════════════════╝'); console.log(''); // ========================================================================== // 1. DISCOVERY TESTS // ========================================================================== console.log('─── Discovery Tests ───────────────────────────────────────'); try { const discovery = createDiscoveryService(); 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', result.success, result.success ? `Loaded ${result.registry?.patterns.length || 0} patterns` : result.error); // Cache test if (result.success) { const cachedResult = await discovery.discoverRegistry(); logTest('Cache hit', cachedResult.fromCache, '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 = searchPatterns(registry); logTest('Basic search', basicSearch.patterns.length > 0, `Found ${basicSearch.total} patterns`); // Query search const querySearch = searchPatterns(registry, { query: 'routing' }); logTest('Query search', true, `Query "routing" found ${querySearch.patterns.length} patterns`); // Category filter const categorySearch = searchPatterns(registry, { category: 'routing' }); logTest('Category filter', true, `Category "routing" found ${categorySearch.patterns.length} patterns`); // Tag search const tagSearch = searchPatterns(registry, { tags: ['genesis'] }); logTest('Tag search', true, `Tag "genesis" found ${tagSearch.patterns.length} patterns`); // Verified filter const verifiedSearch = searchPatterns(registry, { verified: true }); logTest('Verified filter', true, `Verified patterns: ${verifiedSearch.patterns.length}`); // Sort by downloads const sortedSearch = searchPatterns(registry, { sortBy: 'downloads', sortOrder: 'desc', }); logTest('Sort by downloads', true, `Top pattern: ${sortedSearch.patterns[0]?.displayName || 'none'}`); // Pagination const page1 = searchPatterns(registry, { limit: 5, offset: 0 }); logTest('Pagination', page1.pageSize === 5, `Page 1 with ${page1.patterns.length} patterns, hasMore: ${page1.hasMore}`); // Search suggestions const suggestions = getSearchSuggestions(registry, 'rou'); logTest('Search suggestions', suggestions.length >= 0, `Suggestions for "rou": ${suggestions.slice(0, 3).join(', ')}`); // Tag cloud const tagCloud = getTagCloud(registry); logTest('Tag cloud', tagCloud.size > 0, `${tagCloud.size} unique tags`); } console.log(''); // ========================================================================== // 3. DOWNLOAD TESTS // ========================================================================== console.log('─── Download Tests ────────────────────────────────────────'); if (result.success && result.registry && result.registry.patterns.length > 0) { const pattern = result.registry.patterns[0]; const downloader = createDownloader(); logTest('Downloader created', true); // Download with progress let progressCalled = false; const downloadResult = await downloader.downloadPattern(pattern, { verify: true, }, (progress) => { progressCalled = true; }); logTest('Download pattern', downloadResult.success, downloadResult.success ? `Downloaded ${downloadResult.size} bytes` : 'Failed'); logTest('Progress callback', progressCalled, progressCalled ? 'Progress events received' : 'No progress events'); logTest('Checksum verification', downloadResult.verified !== undefined, `Verified: ${downloadResult.verified}`); // Cache stats const cacheStats = downloader.getCacheStats(); logTest('Cache statistics', cacheStats.count >= 0, `${cacheStats.count} items, ${cacheStats.totalSize} bytes`); } console.log(''); // ========================================================================== // 4. PUBLISH TESTS // ========================================================================== console.log('─── Publish Tests ─────────────────────────────────────────'); const cfp = createSeraphineGenesis(); const publisher = createPublisher(); logTest('Publisher created', true); // Validation const validation = publisher.validateForPublish(cfp, { name: 'test-pattern', displayName: 'Test Pattern', description: 'A test pattern for validation', categories: ['testing'], tags: ['test', 'validation', 'demo'], license: 'MIT', anonymize: 'standard', }); logTest('Publish validation', validation.length === 0, validation.length === 0 ? 'All validations passed' : validation.join(', ')); // Preview const preview = publisher.createPreview(cfp, { name: 'seraphine-genesis', displayName: 'Seraphine Genesis', description: 'The foundational pattern model', categories: ['routing', 'coordination'], tags: ['genesis', 'foundational'], license: 'MIT', anonymize: 'standard', }); logTest('Publish preview', preview !== null, `Preview created for ${preview.name}`); // Publish (mock) const publishResult = await publisher.publishPattern(cfp, { name: 'test-pattern', displayName: 'Test Pattern', description: 'A test pattern published to IPFS', categories: ['testing'], tags: ['test', 'demo', 'hello-world'], license: 'MIT', anonymize: 'standard', }); logTest('Publish to IPFS', publishResult.success, publishResult.success ? `CID: ${publishResult.cid.slice(0, 20)}...` : publishResult.message); console.log(''); // ========================================================================== // 5. INTEGRATION TEST // ========================================================================== console.log('─── Integration Test ──────────────────────────────────────'); // Full workflow: discover -> search -> download const store = createDiscoveryService(); const discoverResult = await store.discoverRegistry(); if (discoverResult.success && discoverResult.registry) { const searchResult = searchPatterns(discoverResult.registry, { query: 'seraphine', }); if (searchResult.patterns.length > 0) { const dl = createDownloader(); const dlResult = await dl.downloadPattern(searchResult.patterns[0], { verify: true, }); logTest('Full workflow', dlResult.success, 'Discover → Search → Download completed'); } else { logTest('Full workflow', true, 'Discover → Search completed (no download)'); } } } 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(' 📦 Store Features Verified:'); console.log(' - Registry discovery via IPNS'); console.log(' - Pattern search with filters'); console.log(' - Download with verification'); console.log(' - Publish with anonymization'); 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-store.js.map