courseworx/backend/test-currency-simple.js
mmabdalla 5477297914 v2.0.2 - Complete Plugin Architecture System and Multi-Currency Implementation
Major Features Added:
- Complete Plugin Architecture System with financial plugin
- Multi-currency support with exchange rates
- Course type system (online, classroom, hybrid)
- Attendance tracking and QR code scanning
- Classroom sessions management
- Course sections and content management
- Professional video player with authentication
- Secure media serving system
- Shopping cart and checkout system
- Financial dashboard and earnings tracking
- Trainee progress tracking
- User notes and assignments system

Backend Infrastructure:
- Plugin loader and registry system
- Multi-currency database models
- Secure media middleware
- Course access middleware
- Financial plugin with payment processing
- Database migrations for new features
- API endpoints for all new functionality

Frontend Components:
- Course management interface
- Content creation and editing
- Section management with drag-and-drop
- Professional video player
- QR scanner for attendance
- Shopping cart and checkout flow
- Financial dashboard
- Plugin management interface
- Trainee details and progress views

This represents a major evolution of CourseWorx from a basic LMS to a comprehensive educational platform with plugin architecture.
2025-09-14 04:20:37 +03:00

129 lines
5 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 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 };