UNPKG

@simonecoelhosfo/optimizely-mcp-server

Version:

Optimizely MCP Server for AI assistants with integrated CLI tools

71 lines 3.37 kB
/** * Definitive test to prove cache invalidation works */ import { CacheOrchestrator } from './cache/CacheOrchestrator.js'; import Database from 'better-sqlite3'; console.log('Testing Cache Invalidation Behavior\n'); async function testInvalidation() { // Setup in-memory database const db = new Database(':memory:'); db.exec(` CREATE TABLE flags ( id TEXT PRIMARY KEY, key TEXT NOT NULL, name TEXT, enabled INTEGER ); INSERT INTO flags VALUES ('1', 'flag_a', 'Flag A', 1); INSERT INTO flags VALUES ('2', 'flag_b', 'Flag B', 0); `); // Create cache orchestrator const cache = new CacheOrchestrator({ enabled: true }); let dbQueryCount = 0; // Mock executor that queries the database const queryExecutor = async (query) => { dbQueryCount++; console.log(`\nDatabase Query #${dbQueryCount}`); // Execute actual SQL query const rows = db.prepare('SELECT key, name FROM flags WHERE enabled = 1').all(); console.log(` Found ${rows.length} enabled flags:`, rows.map((r) => r.key).join(', ')); return { data: rows, metadata: { rowCount: rows.length, executionTime: 10, cacheHit: false } }; }; const query = { find: 'flags', where: [{ field: 'enabled', operator: '=', value: 1 }] }; console.log('=== Step 1: Initial Query ==='); const result1 = await cache.executeWithCache(query, queryExecutor); console.log(`Result: ${result1.data.data.length} flags, Cached: ${result1.cached}`); console.log('\n=== Step 2: Same Query (Should Use Cache) ==='); const result2 = await cache.executeWithCache(query, queryExecutor); console.log(`Result: ${result2.data.data.length} flags, Cached: ${result2.cached}`); console.log(`Database queries so far: ${dbQueryCount} (should be 1)`); console.log('\n=== Step 3: Update Database ==='); db.prepare('UPDATE flags SET enabled = 1 WHERE key = ?').run('flag_b'); console.log(' Updated flag_b to enabled=1'); console.log('\n=== Step 4: Query Again (Still Using Old Cache) ==='); const result3 = await cache.executeWithCache(query, queryExecutor); console.log(` Result: ${result3.data.data.length} flags (WRONG - should be 2)`); console.log(`Database queries so far: ${dbQueryCount} (still 1 - using cache)`); console.log('\n=== Step 5: Invalidate Cache ==='); const invalidated = await cache.invalidate(['iqe:flags:*']); console.log(` Invalidated ${invalidated} cache entries`); console.log('\n=== Step 6: Query After Invalidation ==='); const result4 = await cache.executeWithCache(query, queryExecutor); console.log(`Result: ${result4.data.data.length} flags (CORRECT - fresh from DB)`); console.log(`Database queries total: ${dbQueryCount} (should be 2)`); console.log('\n=== Summary ==='); console.log(`Cache prevented ${1} unnecessary database query`); console.log(`Invalidation forced fresh data fetch when needed`); console.log(`Data consistency maintained after updates`); // Show cache stats const stats = cache.getStats(); console.log(`\nFinal Cache Stats:`, stats); cache.shutdown(); } testInvalidation().catch(console.error); //# sourceMappingURL=test-cache-invalidation-proof.js.map