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