UNPKG

esnekpos

Version:

Node.js entegrasyon paketi - EsnekPOS ödeme sistemi için resmi olmayan istemci

319 lines (282 loc) 9.33 kB
/** * EsnekPOS API Otomatik Test Koşturucusu * * Bu program bütün API fonksiyonlarını otomatik olarak test eder ve sonuçlarını raporlar. */ const esnekpos = require('../src/index'); const fs = require('fs'); const path = require('path'); // Ana test sınıfı class EsnekPOSTester { constructor(config) { this.client = esnekpos.createClient(config); this.results = { success: 0, fail: 0, total: 0, tests: [] }; this.orderRefs = []; } // Test sonuçlarını konsola ve dosyaya kaydeder logResult(testName, success, data, error) { const result = { testName, success, timestamp: new Date().toISOString(), data: data || null, error: error ? { message: error.message, stack: error.stack } : null }; this.results.tests.push(result); this.results.total++; if (success) { this.results.success++; console.log(`✅ ${testName}: BAŞARILI`); } else { this.results.fail++; console.error(`❌ ${testName}: BAŞARISIZ - ${error.message}`); } return result; } // Sonuç raporunu kaydet saveReport() { const timestamp = new Date().toISOString().replace(/:/g, '-').split('.')[0]; const reportPath = path.join(__dirname, '..', 'test-reports'); // Report dizinini oluştur if (!fs.existsSync(reportPath)) { fs.mkdirSync(reportPath, { recursive: true }); } const fileName = `test-report-${timestamp}.json`; const fullPath = path.join(reportPath, fileName); fs.writeFileSync( fullPath, JSON.stringify({ summary: { total: this.results.total, success: this.results.success, fail: this.results.fail, successRate: (this.results.success / this.results.total * 100).toFixed(2) + '%' }, tests: this.results.tests, timestamp: new Date().toISOString(), environment: this.client.getConfig() }, null, 2) ); console.log(`\nTest raporu kaydedildi: ${fullPath}`); } // 3D Ödeme Testi async test3DPayment() { const testName = '3D Ödeme Testi'; try { const orderRef = `TEST_${Date.now()}`; this.orderRefs.push(orderRef); const result = await this.client.payment.create3DPayment({ Config: { BACK_URL: 'https://example.com/callback', PRICES_CURRENCY: 'TRY', ORDER_REF_NUMBER: orderRef, ORDER_AMOUNT: '100.00' }, CreditCard: { CC_NUMBER: '4159562885391991', EXP_MONTH: '12', EXP_YEAR: '2025', CC_CVV: '123', CC_OWNER: 'Test User', INSTALLMENT_NUMBER: '1' }, Customer: { FIRST_NAME: 'Test', LAST_NAME: 'User', MAIL: 'test@example.com', PHONE: '5321234567', CITY: 'Istanbul', STATE: 'Kadikoy', ADDRESS: 'Test Address', CLIENT_IP: '127.0.0.1' }, Product: [ { PRODUCT_ID: '1', PRODUCT_NAME: 'Test Product', PRODUCT_CATEGORY: 'Electronics', PRODUCT_DESCRIPTION: 'Test Description', PRODUCT_AMOUNT: '100.00' } ] }); const success = result && result.STATUS === 'SUCCESS'; return this.logResult(testName, success, result); } catch (error) { return this.logResult(testName, false, null, error); } } // Ortak Ödeme Sayfası Testi async testCommonPayment() { const testName = 'Ortak Ödeme Sayfası Testi'; try { const orderRef = `TEST_${Date.now()}`; this.orderRefs.push(orderRef); const result = await this.client.payment.createCommonPayment({ Config: { ORDER_REF_NUMBER: orderRef, ORDER_AMOUNT: '150.00', PRICES_CURRENCY: 'TRY', BACK_URL: 'https://example.com/callback', LOCALE: 'tr' }, Customer: { FIRST_NAME: 'Test', LAST_NAME: 'User', MAIL: 'test@example.com', PHONE: '5321234567', CITY: 'Istanbul', STATE: 'Kadikoy', ADDRESS: 'Test Address' }, Product: [ { PRODUCT_ID: '1', PRODUCT_NAME: 'Test Product', PRODUCT_CATEGORY: 'Electronics', PRODUCT_DESCRIPTION: 'Test Description', PRODUCT_AMOUNT: '150.00' } ] }); const success = result && result.STATUS === 'SUCCESS'; return this.logResult(testName, success, result); } catch (error) { return this.logResult(testName, false, null, error); } } // BKM Express Testi async testBkmPayment() { const testName = 'BKM Express Testi'; try { const orderRef = `TEST_${Date.now()}`; this.orderRefs.push(orderRef); const result = await this.client.payment.createBkmPayment({ Config: { ORDER_REF_NUMBER: orderRef, ORDER_AMOUNT: '200.00', PRICES_CURRENCY: 'TRY', BACK_URL: 'https://example.com/callback' }, Customer: { FIRST_NAME: 'Test', LAST_NAME: 'User', MAIL: 'test@example.com', PHONE: '5321234567', CITY: 'Istanbul', STATE: 'Kadikoy', ADDRESS: 'Test Address' }, Product: [ { PRODUCT_ID: '1', PRODUCT_NAME: 'Test Product', PRODUCT_CATEGORY: 'Electronics', PRODUCT_DESCRIPTION: 'Test Description', PRODUCT_AMOUNT: '200.00' } ] }); const success = result && result.STATUS === 'SUCCESS'; return this.logResult(testName, success, result); } catch (error) { return this.logResult(testName, false, null, error); } } // Taksit Seçenekleri Testi async testInstallmentOptions() { const testName = 'Taksit Seçenekleri Testi'; try { const result = await this.client.query.getInstallmentOptions({ amount: '100.00', bin: '510152', commissionForCustomer: 1 }); const success = result && result.STATUS === 'SUCCESS'; return this.logResult(testName, success, result); } catch (error) { return this.logResult(testName, false, null, error); } } // BIN Sorgulama Testi async testBinInfo() { const testName = 'BIN Sorgulama Testi'; try { const result = await this.client.query.getBinInfo('510152'); const success = result && result.Bank_Name; return this.logResult(testName, success, result); } catch (error) { return this.logResult(testName, false, null, error); } } // Üye İşyeri Bakiye Testi async testDealerBalance() { const testName = 'Üye İşyeri Bakiye Testi'; try { const result = await this.client.query.getDealerBalance({ currency: 'TRY' }); const success = result && result.STATUS === 'SUCCESS'; return this.logResult(testName, success, result); } catch (error) { return this.logResult(testName, false, null, error); } } // İşlem Sorgulama Testi async testQueryTransaction() { // Önceki testlerden sipariş referansı kullanıyoruz const testName = 'İşlem Sorgulama Testi'; if (this.orderRefs.length === 0) { return this.logResult(testName, false, null, new Error('Test edilecek sipariş referansı bulunamadı')); } try { const orderRef = this.orderRefs[0]; const result = await this.client.query.queryTransaction(orderRef); // Sipariş bulunamasa bile API yanıt veriyorsa başarılı kabul ediyoruz const success = result && (result.STATUS === 'SUCCESS' || true); return this.logResult(testName, success, result); } catch (error) { return this.logResult(testName, false, null, error); } } // Tüm testleri koştur async runAllTests() { console.log('EsnekPOS API Test Başlıyor...'); console.log('----------------------------'); await this.test3DPayment(); await this.testCommonPayment(); await this.testBkmPayment(); await this.testInstallmentOptions(); await this.testBinInfo(); await this.testDealerBalance(); await this.testQueryTransaction(); console.log('----------------------------'); console.log(`Test Özeti: ${this.results.success} başarılı, ${this.results.fail} başarısız, toplam ${this.results.total} test`); this.saveReport(); } } // Ana çalıştırma fonksiyonu async function run() { const tester = new EsnekPOSTester({ merchant: 'TEST1234', merchantKey: '4oK26hK8MOXrIV1bzTRVPA==', testMode: true }); await tester.runAllTests(); } // Script doğrudan çalıştırılıyorsa testleri başlat if (require.main === module) { run().catch(err => { console.error('Test hatası:', err); process.exit(1); }); } module.exports = EsnekPOSTester;