@simonecoelhosfo/optimizely-mcp-server
Version:
Optimizely MCP Server for AI assistants with integrated CLI tools
83 lines ⢠3.44 kB
JavaScript
/**
* Test the full integration stack to understand caching behavior
*/
import { IntelligentQueryEngine } from './IntelligentQueryEngine.js';
import { OptimizelyAdapter } from './adapters/OptimizelyAdapter.js';
import Database from 'better-sqlite3';
console.log('Testing Adapter & Cache Integration...\n');
async function setupDatabase(db) {
db.exec(`
CREATE TABLE IF NOT EXISTS flags (
id TEXT PRIMARY KEY,
key TEXT NOT NULL,
name TEXT,
enabled INTEGER DEFAULT 1,
project_id TEXT
);
`);
const insert = db.prepare('INSERT INTO flags (id, key, name, enabled, project_id) VALUES (?, ?, ?, ?, ?)');
insert.run('1', 'flag_a', 'Flag A', 1, 'proj1');
insert.run('2', 'flag_b', 'Flag B', 0, 'proj1');
insert.run('3', 'flag_c', 'Flag C', 1, 'proj1');
}
async function testAdapterCaching() {
const db = new Database(':memory:');
await setupDatabase(db);
console.log('=== Test 1: Direct Adapter Test ===');
const adapter = new OptimizelyAdapter({ database: db });
// Test field discovery
const fields = await adapter.discoverFields('flags');
console.log('Fields discovered:', fields.map(f => f.name).join(', '));
// Test native query
const nativeResult = await adapter.executeNativeQuery('SELECT * FROM flags WHERE enabled = 1');
console.log('Native query result count:', nativeResult.length);
console.log('\n=== Test 2: Engine with Minimal Query ===');
const engine = new IntelligentQueryEngine({
cache: {
enabled: true,
defaultTTL: 60000,
}
});
engine.registerAdapter(adapter);
// Listen to events
engine.on('query:start', (query) => {
console.log('\nš Event: query:start');
console.log(' Query:', JSON.stringify(query, null, 2));
});
engine.on('query:plan', (plan) => {
console.log('\nš Event: query:plan');
console.log(' Strategy:', plan.strategy);
console.log(' Phases:', plan.phases.length);
});
engine.on('query:complete', (result) => {
console.log('\nš Event: query:complete');
console.log(' Rows:', result.data.length);
console.log(' Cached:', result.metadata.cached);
console.log(' Cache Key:', result.metadata.cacheKey);
});
const query = {
find: 'flags',
select: ['key', 'name'],
where: [{ field: 'enabled', operator: '=', value: 1 }],
};
console.log('\n--- First Query Execution ---');
const result1 = await engine.query(query);
console.log('\nResult 1:');
console.log(' Data:', result1.data);
console.log(' Metadata:', result1.metadata);
console.log('\n--- Second Query Execution (should be cached) ---');
const result2 = await engine.query(query);
console.log('\nResult 2:');
console.log(' Data:', result2.data);
console.log(' Metadata:', result2.metadata);
console.log('\n=== Test 3: Cache Metrics ===');
const metrics = engine.getCacheMetrics();
console.log('Cache Metrics:', metrics);
console.log('\n=== Test 4: Direct CacheOrchestrator Access ===');
// Access the cache orchestrator directly to check its state
const stats = engine.getStatistics();
console.log('Engine Statistics:', JSON.stringify(stats, null, 2));
await engine.shutdown();
}
testAdapterCaching().catch(console.error);
//# sourceMappingURL=test-adapter-caching.js.map