Skip to main content
Glama
e2e-test.template.ts7.58 kB
/** * End-to-End Test Template * * This template demonstrates the structure for end-to-end tests. * E2E tests verify complete user workflows from start to finish. * * Key Characteristics: * - Test complete user scenarios * - Use real system components * - Simulate user interactions * - Slowest tests (acceptable) */ import { describe, it, expect, beforeAll, afterAll } from "vitest"; import { createTestDatabase, cleanupTestDatabase, type TestDatabase } from "../utils/test-database"; import { createTestMemory, createTestReasoningContext } from "../utils/test-fixtures"; describe("Complete User Workflow E2E", () => { let testDb: TestDatabase; beforeAll(async () => { // Setup complete test environment testDb = await createTestDatabase({ name: "e2e_test", setupSchema: true, seedData: true, }); }); afterAll(async () => { await cleanupTestDatabase(testDb); }); describe("Memory Lifecycle Workflow", () => { it("should complete full memory lifecycle", async () => { // This test simulates a complete user workflow: // 1. User creates a memory // 2. System generates embeddings // 3. System creates waypoint connections // 4. User searches for memory // 5. System retrieves and ranks results // 6. User accesses memory (reinforcement) // 7. System applies temporal decay // 8. User deletes memory // Step 1: Create memory const memory = createTestMemory({ content: "Important project meeting notes", sector: "episodic", }); // const created = await cognitiveSystem.createMemory(memory); // expect(created.id).toBeDefined(); // expect(created.embeddings).toBeDefined(); // Step 2: Verify embeddings generated // expect(created.embeddings.episodic).toBeDefined(); // expect(created.embeddings.semantic).toBeDefined(); // Step 3: Verify waypoint connections // const connections = await cognitiveSystem.getConnections(created.id); // expect(connections.length).toBeGreaterThan(0); // expect(connections.length).toBeLessThanOrEqual(3); // Step 4: Search for memory // const searchResults = await cognitiveSystem.searchMemories({ // text: 'project meeting', // limit: 10, // }); // expect(searchResults.length).toBeGreaterThan(0); // expect(searchResults[0].id).toBe(created.id); // Step 5: Access memory (triggers reinforcement) // const accessed = await cognitiveSystem.accessMemory(created.id); // expect(accessed.strength).toBeGreaterThan(created.strength); // Step 6: Simulate time passage and decay // await cognitiveSystem.applyTemporalDecay(); // const decayed = await cognitiveSystem.getMemory(created.id); // expect(decayed.strength).toBeLessThan(accessed.strength); // Step 7: Delete memory // await cognitiveSystem.deleteMemory(created.id); // const deleted = await cognitiveSystem.getMemory(created.id); // expect(deleted).toBeNull(); // Placeholder assertion expect(memory).toBeDefined(); }, 60000); // 60s timeout for E2E test }); describe("Reasoning Workflow", () => { it("should complete full reasoning workflow", async () => { // This test simulates a complete reasoning workflow: // 1. User submits problem // 2. System classifies problem // 3. System selects framework // 4. System executes parallel reasoning // 5. System synthesizes results // 6. System assesses confidence // 7. System detects biases // 8. User receives results // Step 1: Submit problem const context = createTestReasoningContext({ problem: "How should we prioritize features for next release?", evidence: [ "User feedback indicates need for performance improvements", "Market analysis shows competitors launching similar features", "Technical debt is accumulating in core modules", ], constraints: ["Limited development resources", "Q4 deadline approaching"], goals: [ "Maximize user satisfaction", "Maintain competitive position", "Ensure system stability", ], }); // Step 2: Classify problem // const classification = await cognitiveSystem.classifyProblem(context); // expect(classification.complexity).toBe('moderate'); // expect(classification.uncertainty).toBe('medium'); // Step 3: Select framework // const framework = await cognitiveSystem.selectFramework(classification); // expect(framework.name).toBeDefined(); // Step 4: Execute parallel reasoning // const reasoning = await cognitiveSystem.executeParallelReasoning(context); // expect(reasoning.analyticalResult).toBeDefined(); // expect(reasoning.creativeResult).toBeDefined(); // expect(reasoning.criticalResult).toBeDefined(); // expect(reasoning.syntheticResult).toBeDefined(); // Step 5: Synthesize results // expect(reasoning.synthesis).toBeDefined(); // expect(reasoning.synthesis.recommendations).toBeDefined(); // Step 6: Assess confidence // const confidence = await cognitiveSystem.assessConfidence(reasoning); // expect(confidence.overall).toBeGreaterThan(0); // expect(confidence.overall).toBeLessThanOrEqual(1); // Step 7: Detect biases // const biases = await cognitiveSystem.detectBiases(reasoning); // expect(Array.isArray(biases)).toBe(true); // Step 8: Format results for user // const response = await cognitiveSystem.formatResponse(reasoning, confidence, biases); // expect(response.conclusion).toBeDefined(); // expect(response.recommendations).toBeDefined(); // Placeholder assertion expect(context).toBeDefined(); }, 60000); // 60s timeout for E2E test }); describe("MCP Tool Workflow", () => { it("should handle MCP tool invocation workflow", async () => { // This test simulates MCP tool usage: // 1. LLM invokes MCP tool // 2. System validates parameters // 3. System executes cognitive operation // 4. System formats response // 5. LLM receives structured result // Step 1: Invoke MCP tool // const toolRequest = { // name: 'create_memory', // parameters: { // content: 'Test memory from MCP', // sector: 'semantic', // }, // }; // Step 2: Validate parameters // const validated = await mcpServer.validateRequest(toolRequest); // expect(validated.valid).toBe(true); // Step 3: Execute operation // const result = await mcpServer.executeTool(toolRequest); // expect(result.success).toBe(true); // Step 4: Format response // expect(result.data).toBeDefined(); // expect(result.metadata).toBeDefined(); // Step 5: Verify response structure // expect(result.metadata.timestamp).toBeDefined(); // expect(result.metadata.processingTime).toBeDefined(); // Placeholder assertion expect(true).toBe(true); }, 30000); // 30s timeout }); }); /** * E2E Test Best Practices: * * 1. Test complete user workflows * 2. Use realistic scenarios * 3. Test happy path and error paths * 4. Verify system behavior end-to-end * 5. Use longer timeouts (30-60s) * 6. Test with real data and components * 7. Verify user-facing outputs * 8. Test performance under realistic load */

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/keyurgolani/ThoughtMcp'

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