import priceMonitorService from './lib/price-monitor.js'; import { PriceFetcher } from './lib/price-fetcher.js'; async function testPriceMonitorBasic() { console.log('๐Ÿงช Testing Basic Price Monitor Functionality...\n'); try { // Test 1: Price fetcher integration console.log('1๏ธโƒฃ Testing PriceFetcher integration...'); const priceFetcher = new PriceFetcher(); const solPrice = await priceFetcher.getPrice('SOL'); console.log(`SOL Price: $${solPrice}`); console.log('โœ… PriceFetcher working\n'); // Test 2: Price monitor initialization console.log('2๏ธโƒฃ Testing price monitor initialization...'); const initialStatus = priceMonitorService.isMonitoring(); console.log(`Initial status: ${initialStatus ? 'Active' : 'Inactive'}`); console.log('โœ… Price monitor initialized\n'); // Test 3: Event listener setup console.log('3๏ธโƒฃ Testing event listener setup...'); let eventReceived = false; priceMonitorService.on('test_event', (data) => { console.log('Event received:', data); eventReceived = true; }); priceMonitorService.emit('test_event', { test: 'data' }); // Wait for event await new Promise(resolve => setTimeout(resolve, 100)); console.log(`Event test: ${eventReceived ? 'โœ… Success' : 'โŒ Failed'}\n`); // Test 4: Start monitoring console.log('4๏ธโƒฃ Testing start monitoring...'); await priceMonitorService.startMonitoring(); const monitoringStatus = priceMonitorService.isMonitoring(); console.log(`Monitoring status: ${monitoringStatus ? 'โœ… Active' : 'โŒ Inactive'}\n`); // Test 5: Get monitoring data console.log('5๏ธโƒฃ Testing get monitoring data...'); const monitoringData = await priceMonitorService.getMonitoringData(); console.log('Monitoring data structure:', { hasTradesArray: Array.isArray(monitoringData.trades), hasAlertsArray: Array.isArray(monitoringData.alerts), hasPricesObject: typeof monitoringData.prices === 'object', hasLastUpdated: !!monitoringData.lastUpdated, monitoringActive: monitoringData.monitoringActive }); console.log('โœ… Monitoring data structure valid\n'); // Test 6: Price update simulation console.log('6๏ธโƒฃ Testing price update simulation...'); let priceUpdateReceived = false; priceMonitorService.on('price_update', (data) => { console.log('Price update received:', data.symbol, data.price); priceUpdateReceived = true; }); // Manually trigger a price update for testing priceMonitorService.emit('price_update', { symbol: 'SOLUSD', price: 189.50, timestamp: new Date().toISOString() }); await new Promise(resolve => setTimeout(resolve, 100)); console.log(`Price update test: ${priceUpdateReceived ? 'โœ… Success' : 'โŒ Failed'}\n`); // Test 7: Stop monitoring console.log('7๏ธโƒฃ Testing stop monitoring...'); await priceMonitorService.stopMonitoring(); const stoppedStatus = priceMonitorService.isMonitoring(); console.log(`Stopped status: ${stoppedStatus ? 'โŒ Still active' : 'โœ… Stopped'}\n`); console.log('๐ŸŽ‰ All basic price monitor tests completed successfully!'); return { priceFetcher: !!solPrice, initialization: true, eventListeners: eventReceived, startMonitoring: monitoringStatus, monitoringData: !!monitoringData, priceUpdates: priceUpdateReceived, stopMonitoring: !stoppedStatus }; } catch (error) { console.error('โŒ Basic test failed:', error); console.error('Stack trace:', error.stack); throw error; } } // Run the test if (import.meta.url === `file://${process.argv[1]}`) { testPriceMonitorBasic() .then((results) => { console.log('\n๐Ÿ“Š Test Results Summary:'); Object.entries(results).forEach(([test, passed]) => { console.log(` ${test}: ${passed ? 'โœ…' : 'โŒ'}`); }); const allPassed = Object.values(results).every(result => result); console.log(`\nOverall: ${allPassed ? 'โœ… All tests passed' : 'โŒ Some tests failed'}`); process.exit(allPassed ? 0 : 1); }) .catch((error) => { console.error('\nโŒ Test suite failed:', error.message); process.exit(1); }); } export { testPriceMonitorBasic };