Skip to main content
Glama

documcp

by tosin2013
enhanced-manager.test.ts12.7 kB
/** * Advanced unit tests for Enhanced Memory Manager * Tests intelligent memory management with learning and knowledge graph integration * Part of Issue #55 - Advanced Memory Components Unit Tests */ import { promises as fs } from "fs"; import path from "path"; import os from "os"; import { EnhancedMemoryManager, EnhancedRecommendation, IntelligentAnalysis, } from "../../src/memory/enhanced-manager.js"; import { ProjectFeatures } from "../../src/memory/learning.js"; describe("EnhancedMemoryManager", () => { let tempDir: string; let enhancedManager: EnhancedMemoryManager; beforeEach(async () => { // Create unique temp directory for each test tempDir = path.join( os.tmpdir(), `enhanced-memory-test-${Date.now()}-${Math.random() .toString(36) .substr(2, 9)}`, ); await fs.mkdir(tempDir, { recursive: true }); enhancedManager = new EnhancedMemoryManager(tempDir); await enhancedManager.initialize(); }); afterEach(async () => { // Cleanup temp directory try { await fs.rm(tempDir, { recursive: true, force: true }); } catch (error) { // Ignore cleanup errors } }); describe("Enhanced Manager Initialization", () => { test("should create enhanced manager instance", () => { expect(enhancedManager).toBeDefined(); expect(enhancedManager).toBeInstanceOf(EnhancedMemoryManager); }); test("should initialize all subsystems", async () => { // Test that the enhanced manager properly initializes // The initialize() method should complete without throwing await enhancedManager.initialize(); expect(true).toBe(true); }); test("should have learning and knowledge graph capabilities", async () => { // Test that we can get learning statistics (indicating learning system exists) const learningStats = await enhancedManager.getLearningStatistics(); expect(learningStats).toBeDefined(); expect(learningStats.learning).toBeDefined(); expect(learningStats.knowledgeGraph).toBeDefined(); }); }); describe("Enhanced Recommendations", () => { test("should provide enhanced recommendations with multiple data sources", async () => { // Set up test context enhancedManager.setContext({ projectId: "enhanced-rec-test" }); // Add some historical data await enhancedManager.remember("analysis", { language: { primary: "typescript" }, framework: { name: "react" }, stats: { files: 150 }, }); await enhancedManager.remember("recommendation", { recommended: "docusaurus", confidence: 0.9, }); await enhancedManager.remember("deployment", { status: "success", ssg: "docusaurus", }); // Test enhanced recommendation const projectFeatures: ProjectFeatures = { language: "typescript", framework: "react", size: "medium", complexity: "moderate", hasTests: true, hasCI: true, hasDocs: false, isOpenSource: true, }; const baseRecommendation = { recommended: "gatsby", confidence: 0.7, score: 0.75, }; const enhanced = await enhancedManager.getEnhancedRecommendation( "/test/project", baseRecommendation, projectFeatures, ); expect(enhanced).toBeDefined(); expect(enhanced.baseRecommendation).toEqual(baseRecommendation); expect(enhanced.learningEnhanced).toBeDefined(); expect(Array.isArray(enhanced.graphBased)).toBe(true); expect(Array.isArray(enhanced.insights)).toBe(true); expect(typeof enhanced.confidence).toBe("number"); expect(Array.isArray(enhanced.reasoning)).toBe(true); expect(enhanced.metadata).toBeDefined(); expect(typeof enhanced.metadata.usedLearning).toBe("boolean"); expect(typeof enhanced.metadata.usedKnowledgeGraph).toBe("boolean"); }); test("should handle recommendations with insufficient data", async () => { const projectFeatures: ProjectFeatures = { language: "unknown", size: "small", complexity: "simple", hasTests: false, hasCI: false, hasDocs: false, isOpenSource: false, }; const baseRecommendation = { recommended: "jekyll", confidence: 0.5, }; const enhanced = await enhancedManager.getEnhancedRecommendation( "/test/project", baseRecommendation, projectFeatures, ); expect(enhanced).toBeDefined(); expect(enhanced.confidence).toBeGreaterThanOrEqual(0); expect(enhanced.confidence).toBeLessThanOrEqual(1); }); }); describe("Intelligent Analysis", () => { test("should provide intelligent analysis with patterns and predictions", async () => { enhancedManager.setContext({ projectId: "intelligent-analysis-test" }); // Add analysis data await enhancedManager.remember("analysis", { language: { primary: "python" }, framework: { name: "flask" }, dependencies: { count: 25 }, testing: { hasTests: true }, ci: { hasCI: true }, }); const analysisData = { language: "python", framework: "flask", size: "medium", hasTests: true, hasCI: true, }; const intelligentAnalysis = await enhancedManager.getIntelligentAnalysis( "/test/project", analysisData, ); expect(intelligentAnalysis).toBeDefined(); expect(intelligentAnalysis.analysis).toBeDefined(); expect(Array.isArray(intelligentAnalysis.patterns)).toBe(true); expect(Array.isArray(intelligentAnalysis.predictions)).toBe(true); expect(Array.isArray(intelligentAnalysis.recommendations)).toBe(true); expect(intelligentAnalysis.learningData).toBeDefined(); expect(typeof intelligentAnalysis.learningData.similarProjects).toBe( "number", ); expect(typeof intelligentAnalysis.learningData.confidenceLevel).toBe( "number", ); expect(["low", "medium", "high"]).toContain( intelligentAnalysis.learningData.dataQuality, ); // Check prediction structure if (intelligentAnalysis.predictions.length > 0) { const prediction = intelligentAnalysis.predictions[0]; expect(["success_rate", "optimal_ssg", "potential_issues"]).toContain( prediction.type, ); expect(typeof prediction.prediction).toBe("string"); expect(typeof prediction.confidence).toBe("number"); } }); test("should adapt analysis based on historical patterns", async () => { enhancedManager.setContext({ projectId: "adaptive-analysis-test" }); // Create pattern with multiple similar projects for (let i = 0; i < 3; i++) { await enhancedManager.remember("analysis", { language: { primary: "javascript" }, framework: { name: "vue" }, }); await enhancedManager.remember("recommendation", { recommended: "vuepress", confidence: 0.8 + i * 0.05, }); await enhancedManager.remember("deployment", { status: "success", ssg: "vuepress", }); } const analysisData = { language: "javascript", framework: "vue", size: "small", }; const analysis = await enhancedManager.getIntelligentAnalysis( "/test/project", analysisData, ); expect(analysis.learningData.similarProjects).toBeGreaterThan(0); expect(analysis.learningData.dataQuality).toBe("medium"); }); }); describe("Memory Integration", () => { test("should integrate learning feedback into knowledge graph", async () => { enhancedManager.setContext({ projectId: "integration-test" }); // Create initial recommendation const memoryEntry = await enhancedManager.remember("recommendation", { recommended: "hugo", confidence: 0.8, language: { primary: "go" }, }); // Simulate feedback by creating a deployment success record await enhancedManager.remember("deployment", { status: "success", ssg: "hugo", feedback: { rating: 5, helpful: true, comments: "Worked perfectly", }, }); // Verify feedback was processed const stats = await enhancedManager.getLearningStatistics(); expect(stats).toBeDefined(); expect(stats.learning).toBeDefined(); }); test("should synchronize data between subsystems", async () => { enhancedManager.setContext({ projectId: "sync-test" }); // Add data that should propagate between systems await enhancedManager.remember("analysis", { language: { primary: "rust" }, framework: { name: "actix" }, }); await enhancedManager.remember("deployment", { status: "success", ssg: "mdbook", }); // The subsystems should automatically sync through the enhanced manager // Verify data exists in both systems const learningStats = await enhancedManager.getLearningStatistics(); expect(learningStats).toBeDefined(); expect(learningStats.learning).toBeDefined(); expect(learningStats.knowledgeGraph).toBeDefined(); expect(learningStats.combined).toBeDefined(); }); }); describe("Performance and Optimization", () => { test("should handle concurrent enhanced operations", async () => { enhancedManager.setContext({ projectId: "concurrent-enhanced-test" }); const operations = Array.from({ length: 5 }, async (_, i) => { const projectFeatures: ProjectFeatures = { language: "go", size: "medium", complexity: "moderate", hasTests: true, hasCI: true, hasDocs: true, isOpenSource: true, }; const baseRecommendation = { recommended: "hugo", confidence: 0.8 + i * 0.02, }; return enhancedManager.getEnhancedRecommendation( "/test/project", baseRecommendation, projectFeatures, ); }); const results = await Promise.all(operations); expect(results.length).toBe(5); results.forEach((result) => { expect(result).toBeDefined(); expect(result.confidence).toBeGreaterThanOrEqual(0); }); }); test("should provide optimization insights", async () => { enhancedManager.setContext({ projectId: "optimization-test" }); // Add some data await enhancedManager.remember("analysis", { performanceTest: true }); // Test learning statistics as a proxy for optimization insights const stats = await enhancedManager.getLearningStatistics(); expect(stats).toBeDefined(); expect(stats.combined).toBeDefined(); expect(typeof stats.combined.systemMaturity).toBe("string"); expect(["nascent", "developing", "mature"]).toContain( stats.combined.systemMaturity, ); }); }); describe("Error Handling and Edge Cases", () => { test("should handle malformed input gracefully", async () => { const malformedFeatures = { language: null, size: "invalid" as any, complexity: undefined as any, }; const malformedRecommendation = { recommended: "", confidence: -1, }; // Should not throw, but handle gracefully const result = await enhancedManager.getEnhancedRecommendation( "/test/project", malformedRecommendation, malformedFeatures as any, ); expect(result).toBeDefined(); expect(result.confidence).toBeGreaterThanOrEqual(0); expect(result.confidence).toBeLessThanOrEqual(1); }); test("should handle subsystem failures gracefully", async () => { // Test with partial system availability const projectFeatures: ProjectFeatures = { language: "javascript", size: "small", complexity: "simple", hasTests: false, hasCI: false, hasDocs: false, isOpenSource: true, }; const baseRecommendation = { recommended: "gatsby", confidence: 0.6, }; // Should work even if some subsystems have issues const result = await enhancedManager.getEnhancedRecommendation( "/test/project", baseRecommendation, projectFeatures, ); expect(result).toBeDefined(); expect(result.baseRecommendation).toEqual(baseRecommendation); }); }); });

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/tosin2013/documcp'

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