137 lines
4.8 KiB
TypeScript
137 lines
4.8 KiB
TypeScript
#!/usr/bin/env bun
|
||
/**
|
||
* Test script for MongoDB Client with Multiple Database Support
|
||
*/
|
||
import { MongoDBClient } from './libs/mongodb-client/src/client';
|
||
|
||
interface TestDocument {
|
||
_id?: string;
|
||
name: string;
|
||
value: number;
|
||
created_at?: Date;
|
||
updated_at?: Date;
|
||
}
|
||
|
||
async function testMultiDatabaseSupport() {
|
||
const client = MongoDBClient.getInstance();
|
||
|
||
try {
|
||
console.log('🔌 Connecting to MongoDB...');
|
||
await client.connect();
|
||
console.log('✅ Connected successfully!');
|
||
|
||
// Test 1: Check default database
|
||
console.log('\n📊 Testing Default Database Operations');
|
||
console.log(`Default database: ${client.getDefaultDatabase()}`);
|
||
|
||
// Test 2: Insert into default database (stock)
|
||
const stockData: TestDocument[] = [
|
||
{ name: 'AAPL', value: 150.25 },
|
||
{ name: 'GOOGL', value: 2750.8 },
|
||
{ name: 'MSFT', value: 305.15 },
|
||
];
|
||
|
||
console.log('\n💾 Inserting into default database (stock)...');
|
||
const stockResult = await client.batchUpsert('test_symbols', stockData, 'name');
|
||
console.log('Stock database result:', stockResult);
|
||
|
||
// Test 3: Change default database
|
||
console.log('\n🔄 Changing default database to analytics...');
|
||
client.setDefaultDatabase('analytics');
|
||
console.log(`New default database: ${client.getDefaultDatabase()}`);
|
||
|
||
// Test 4: Insert into new default database
|
||
const analyticsData: TestDocument[] = [
|
||
{ name: 'daily_volume', value: 1000000 },
|
||
{ name: 'avg_price', value: 125.5 },
|
||
{ name: 'volatility', value: 0.25 },
|
||
];
|
||
|
||
console.log('\n📈 Inserting into new default database (analytics)...');
|
||
const analyticsResult = await client.batchUpsert('test_metrics', analyticsData, 'name');
|
||
console.log('Analytics database result:', analyticsResult);
|
||
|
||
// Test 5: Explicitly specify database (override default)
|
||
const tradingData: TestDocument[] = [
|
||
{ name: 'NYSE', value: 1 },
|
||
{ name: 'NASDAQ', value: 2 },
|
||
{ name: 'LSE', value: 3 },
|
||
];
|
||
|
||
console.log('\n🏦 Inserting into specific database (trading_documents)...');
|
||
const tradingResult = await client.batchUpsert('test_exchanges', tradingData, 'name', {
|
||
database: 'trading_documents',
|
||
});
|
||
console.log('Trading documents database result:', tradingResult);
|
||
|
||
// Test 6: Use convenience methods
|
||
console.log('\n🚀 Testing convenience methods...');
|
||
|
||
// Stock convenience method
|
||
const stockConvenienceResult = await client.batchUpsertStock(
|
||
'test_prices',
|
||
[{ name: 'TSLA', value: 800.25 }],
|
||
'name'
|
||
);
|
||
console.log('Stock convenience method result:', stockConvenienceResult);
|
||
|
||
// Analytics convenience method
|
||
const analyticsConvenienceResult = await client.batchUpsertAnalytics(
|
||
'test_performance',
|
||
[{ name: 'sharpe_ratio', value: 1.25 }],
|
||
'name'
|
||
);
|
||
console.log('Analytics convenience method result:', analyticsConvenienceResult);
|
||
|
||
// Trading convenience method
|
||
const tradingConvenienceResult = await client.batchUpsertTrading(
|
||
'test_orders',
|
||
[{ name: 'order_001', value: 100 }],
|
||
'name'
|
||
);
|
||
console.log('Trading convenience method result:', tradingConvenienceResult);
|
||
|
||
// Test 7: Direct database access
|
||
console.log('\n🎯 Testing direct database access...');
|
||
const stockDb = client.getDatabase('stock');
|
||
const analyticsDb = client.getDatabase('analytics');
|
||
const tradingDb = client.getDatabase('trading_documents');
|
||
|
||
console.log('Available databases:', {
|
||
stock: stockDb.databaseName,
|
||
analytics: analyticsDb.databaseName,
|
||
trading: tradingDb.databaseName,
|
||
});
|
||
|
||
// Test 8: Collection operations with database override
|
||
console.log('\n📋 Testing collection operations with database override...');
|
||
|
||
const stockCollection = client.getCollection('test_symbols', 'stock');
|
||
const stockCount = await stockCollection.countDocuments();
|
||
console.log(`Stock test_symbols count: ${stockCount}`);
|
||
|
||
const analyticsCollection = client.getCollection('test_metrics', 'analytics');
|
||
const analyticsCount = await analyticsCollection.countDocuments();
|
||
console.log(`Analytics test_metrics count: ${analyticsCount}`);
|
||
|
||
// Test 9: InsertOne with database override
|
||
console.log('\n➕ Testing insertOne with database override...');
|
||
const insertResult = await client.insertOne(
|
||
'test_single',
|
||
{ name: 'single_test', value: 999 },
|
||
'stock'
|
||
);
|
||
console.log('InsertOne result:', insertResult);
|
||
|
||
console.log('\n🎉 All multi-database tests completed successfully!');
|
||
} catch (error) {
|
||
console.error('❌ Test failed:', error);
|
||
} finally {
|
||
console.log('\n🔌 Disconnecting from MongoDB...');
|
||
await client.disconnect();
|
||
console.log('✅ Disconnected successfully!');
|
||
}
|
||
}
|
||
|
||
// Run the test
|
||
testMultiDatabaseSupport().catch(console.error);
|