stock-bot/test-mongodb-multi-db.ts

137 lines
4.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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);