/** * Simple Currency System Test * * This script tests the basic currency functionality without requiring existing courses */ const { Currency, ExchangeRate } = require('./plugins/financial-plugin/models'); const CurrencyService = require('./plugins/financial-plugin/utils/currencyService'); async function testBasicCurrencyFunctionality() { console.log('๐Ÿงช Testing Basic Multi-Currency Functionality...\n'); try { // Test 1: Check if currencies exist console.log('1๏ธโƒฃ Testing Currency Data...'); const currencies = await Currency.findAll(); console.log(`โœ… Found ${currencies.length} currencies:`); currencies.forEach(currency => { console.log(` - ${currency.name} (${currency.code}) - ${currency.symbol}`); }); // Test 2: Check exchange rates console.log('\n2๏ธโƒฃ Testing Exchange Rates...'); const exchangeRates = await ExchangeRate.findAll({ include: [ { model: Currency, as: 'fromCurrency' }, { model: Currency, as: 'toCurrency' } ] }); console.log(`โœ… Found ${exchangeRates.length} exchange rates:`); exchangeRates.slice(0, 5).forEach(rate => { console.log(` - ${rate.fromCurrency.code} โ†’ ${rate.toCurrency.code}: ${rate.rate}`); }); // Test 3: Test currency conversion console.log('\n3๏ธโƒฃ Testing Currency Conversion...'); const usd = await Currency.findOne({ where: { code: 'USD' } }); const eur = await Currency.findOne({ where: { code: 'EUR' } }); const egp = await Currency.findOne({ where: { code: 'EGP' } }); if (usd && eur) { const conversion = await CurrencyService.convertAmount(100, usd.id, eur.id); console.log(`โœ… 100 ${usd.code} = ${conversion.convertedAmount} ${eur.code} (Rate: ${conversion.exchangeRate})`); } if (usd && egp) { const conversion = await CurrencyService.convertAmount(100, usd.id, egp.id); console.log(`โœ… 100 ${usd.code} = ${conversion.convertedAmount} ${egp.code} (Rate: ${conversion.exchangeRate})`); } // Test 4: Test currency formatting console.log('\n4๏ธโƒฃ Testing Currency Formatting...'); if (usd) console.log(`โœ… USD: ${CurrencyService.formatCurrency(99.99, usd)}`); if (eur) console.log(`โœ… EUR: ${CurrencyService.formatCurrency(85.50, eur)}`); if (egp) console.log(`โœ… EGP: ${CurrencyService.formatCurrency(3050.00, egp)}`); // Test 5: Test currency service methods console.log('\n5๏ธโƒฃ Testing Currency Service Methods...'); const activeCurrencies = await CurrencyService.getActiveCurrencies(); console.log(`โœ… Active currencies: ${activeCurrencies.length}`); const baseCurrency = await CurrencyService.getBaseCurrency(); console.log(`โœ… Base currency: ${baseCurrency ? baseCurrency.name : 'None'}`); const usdByCode = await CurrencyService.getCurrencyByCode('USD'); console.log(`โœ… USD by code: ${usdByCode ? usdByCode.name : 'Not found'}`); // Test 6: Test exchange rate retrieval console.log('\n6๏ธโƒฃ Testing Exchange Rate Retrieval...'); if (usd && eur) { const rate = await CurrencyService.getExchangeRate(usd.id, eur.id); console.log(`โœ… USD โ†’ EUR rate: ${rate ? rate.rate : 'Not found'}`); } // Test 7: Test reverse conversion console.log('\n7๏ธโƒฃ Testing Reverse Conversion...'); if (eur && usd) { try { const reverseConversion = await CurrencyService.convertAmount(85, eur.id, usd.id); console.log(`โœ… 85 ${eur.code} = ${reverseConversion.convertedAmount} ${usd.code}`); } catch (error) { console.log(`โš ๏ธ Reverse conversion not available: ${error.message}`); } } console.log('\n๐ŸŽ‰ Basic currency tests completed successfully!'); console.log('\n๐Ÿ“‹ System Status:'); console.log('โœ… Database tables created'); console.log('โœ… Initial currencies seeded'); console.log('โœ… Exchange rates configured'); console.log('โœ… Currency conversion working'); console.log('โœ… Currency formatting working'); console.log('โœ… Currency service methods working'); console.log('\n๐Ÿš€ Ready for API testing!'); console.log('\n๐Ÿ“– Next Steps:'); console.log('1. Start your CourseWorx server'); console.log('2. Test API endpoints with curl or Postman'); console.log('3. Navigate to /admin/currencies in the frontend'); console.log('4. Create a course and test currency configuration'); return true; } catch (error) { console.error('โŒ Test failed:', error.message); console.error('Stack trace:', error.stack); return false; } } // Run tests if this script is executed directly if (require.main === module) { testBasicCurrencyFunctionality() .then((success) => { if (success) { console.log('\nโœ… All basic tests passed!'); process.exit(0); } else { console.log('\n๐Ÿ’ฅ Tests failed!'); process.exit(1); } }) .catch((error) => { console.error('\n๐Ÿ’ฅ Tests failed:', error); process.exit(1); }); } module.exports = { testBasicCurrencyFunctionality };