esnekpos
Version:
Node.js entegrasyon paketi - EsnekPOS ödeme sistemi için resmi olmayan istemci
319 lines (282 loc) • 9.33 kB
JavaScript
/**
* 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;