UNPKG

esnekpos

Version:

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

438 lines (390 loc) 12.3 kB
/** * EsnekPOS API Entegrasyon Testleri */ const axios = require('axios'); const esnekpos = require('../src/index'); // API yanıtlarını mocklamak için axios mockla jest.mock('axios'); // Test için istemci oluştur const client = esnekpos.createClient({ merchant: 'TEST1234', merchantKey: '4oK26hK8MOXrIV1bzTRVPA==', testMode: true }); describe('EsnekPOS API Entegrasyon Testleri', () => { beforeEach(() => { jest.clearAllMocks(); }); // 3D Ödeme Testi test('3D Ödeme başlatma', async () => { // Mock başarılı yanıt const mockResponse = { data: { ORDER_REF_NUMBER: 'ORDER_123456', STATUS: 'SUCCESS', RETURN_CODE: '0', RETURN_MESSAGE: 'SUCCESS', DATE: '27.07.2023 16:07:08', URL_3DS: 'https://posservicetest.esnekpos.com/api/pay/3DSecurity/order/123456', REFNO: '150840', HASH: '123456' } }; axios.mockResolvedValueOnce(mockResponse); const result = await client.payment.create3DPayment({ Config: { BACK_URL: 'https://example.com/callback', PRICES_CURRENCY: 'TRY', ORDER_REF_NUMBER: 'ORDER_123456', 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' } ] }); expect(result).toEqual(mockResponse.data); expect(axios).toHaveBeenCalledTimes(1); expect(axios).toHaveBeenCalledWith(expect.objectContaining({ method: 'POST', url: 'https://posservicetest.esnekpos.com/api/pay/EYV3DPay' })); }); // Ortak Ödeme Sayfası Testi test('Ortak ödeme sayfası başlatma', async () => { // Mock başarılı yanıt const mockResponse = { data: { ORDER_REF_NUMBER: 'ORDER_123456', STATUS: 'SUCCESS', RETURN_CODE: '0', RETURN_MESSAGE: 'SUCCESS', DATE: '27.07.2023 16:08:08', URL_3DS: 'https://posservicetest.esnekpos.com/Pages/CommonPayment.aspx?hash=123456', REFNO: '150841', HASH: '123456' } }; axios.mockResolvedValueOnce(mockResponse); const result = await client.payment.createCommonPayment({ Config: { ORDER_REF_NUMBER: 'ORDER_123456', ORDER_AMOUNT: '100.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: '100.00' } ] }); expect(result).toEqual(mockResponse.data); expect(axios).toHaveBeenCalledTimes(1); expect(axios).toHaveBeenCalledWith(expect.objectContaining({ method: 'POST', url: 'https://posservicetest.esnekpos.com/api/pay/CommonPaymentDealer' })); }); // İşlem Sorgulama Testi test('İşlem sorgulama', async () => { // Mock başarılı yanıt const mockResponse = { data: { STATUS: 'SUCCESS', RETURN_CODE: '0', RETURN_MESSAGE: 'SUCCESS', DATE: '27.07.2023 16:09:08', PAYMENT_DATE: '27.07.2023 16:07:08', REFNO: '150840', AMOUNT: '100.00', ORDER_REF_NUMBER: 'ORDER_123456', INSTALLMENT: '1', SUCCESS_TRANSACTION_ID: '12345', TRANSACTIONS: [ { TRANSACTION_ID: '12345', STATUS_NAME: 'Ödeme - Başarılı', STATUS_ID: '3', AMOUNT: '100.00', DATE: '27.07.2023 16:07:08' } ] } }; axios.mockResolvedValueOnce(mockResponse); const result = await client.query.queryTransaction('ORDER_123456'); expect(result).toEqual(mockResponse.data); expect(axios).toHaveBeenCalledTimes(1); expect(axios).toHaveBeenCalledWith(expect.objectContaining({ method: 'POST', url: 'https://posservicetest.esnekpos.com/api/services/ProcessQuery' })); }); // İade/İptal İşlemi Testi test('İade/İptal işlemi', async () => { // Mock başarılı yanıt const mockResponse = { data: { RETURN_CODE: '0', RETURN_MESSAGE: 'SUCCESS', STATUS: 'ORDER_CANCEL', ORDER_REF_NUMBER: 'ORDER_123456', REFNO: '150842' } }; axios.mockResolvedValueOnce(mockResponse); const result = await client.refund.refundTransaction({ orderRefNumber: 'ORDER_123456', amount: 100.00, syncWithPos: true }); expect(result).toEqual(mockResponse.data); expect(axios).toHaveBeenCalledTimes(1); expect(axios).toHaveBeenCalledWith(expect.objectContaining({ method: 'POST', url: 'https://posservicetest.esnekpos.com/api/services/OrderReturn' })); }); // Taksit Seçenekleri Testi test('Taksit seçenekleri sorgulama', async () => { // Mock başarılı yanıt const mockResponse = { data: { STATUS: 'SUCCESS', RETURN_CODE: '0', RETURN_MESSAGE: 'SUCCESS', InstallmentList: [ { FAMILY: 'Maximum', INSTALLMENT: 1, RATE: 1.75, AMOUNT_PER_INSTALLMENT: 101.75, AMOUNT_TOTAL: 101.75, AMOUNT_BE_SEND_TO_DEALER: 100.00 }, { FAMILY: 'Maximum', INSTALLMENT: 2, RATE: 2.75, AMOUNT_PER_INSTALLMENT: 51.38, AMOUNT_TOTAL: 102.75, AMOUNT_BE_SEND_TO_DEALER: 100.00 } ] } }; axios.mockResolvedValueOnce(mockResponse); const result = await client.query.getInstallmentOptions({ amount: '100.00', bin: '510152', commissionForCustomer: 1 }); expect(result).toEqual(mockResponse.data); expect(axios).toHaveBeenCalledTimes(1); expect(axios).toHaveBeenCalledWith(expect.objectContaining({ method: 'POST', url: 'https://posservicetest.esnekpos.com/api/services/GetInstallments' })); }); // BIN Sorgulama Testi test('BIN sorgulama', async () => { // Mock başarılı yanıt const mockResponse = { data: { Bank_Name: 'IS BANK', Bank_Brand: 'MASTERCARD', Card_Type: 'CREDIT', Card_Family: 'Maximum', Card_Kind: 'BİREYSEL KART' } }; axios.mockResolvedValueOnce(mockResponse); const result = await client.query.getBinInfo('510152'); expect(result).toEqual(mockResponse.data); expect(axios).toHaveBeenCalledTimes(1); expect(axios).toHaveBeenCalledWith(expect.objectContaining({ method: 'POST', url: 'https://posservicetest.esnekpos.com/api/services/EYVBinService' })); }); // Alt Üye İşyeri Tanımlama Testi test('Alt üye işyeri tanımlama', async () => { // Mock başarılı yanıt const mockResponse = { data: { Data: null, ResultCode: '00', ResultMessage: 'SUCCESS', Exception: null } }; axios.mockResolvedValueOnce(mockResponse); const result = await client.marketplace.setSubMerchant({ NAME: 'Test Mağaza', OWNER_NAME: 'Test', OWNER_SURNAME: 'User', OWNER_IDENTITY_NUMBER: '12345678901', EMAIL: 'teststore@example.com', GSM: '5321234567', COMPANY_NAME: 'Test Store Ltd', TAX_OFFICE: 'Test Tax Office', TAX_NUMBER: '1234567890', BANK_NAME: 'Test Bank', EXTERNAL_ID: 'MERCHANT_123456', TYPE: 'PERSONAL_COMPANY', BANK_ACCOUNTS: [ { IBAN: 'TR330006100519786457841326', CURRENCY: 'TRY' } ] }); expect(result).toEqual(mockResponse.data); expect(axios).toHaveBeenCalledTimes(1); expect(axios).toHaveBeenCalledWith(expect.objectContaining({ method: 'POST', url: 'https://posservicetest.esnekpos.com/api/services/SubMerchantSet' })); }); // Tekrarlayan Ödeme Testi test('Tekrarlayan ödeme başlatma', async () => { // Mock başarılı yanıt const mockResponse = { data: { STATUS: 'SUCCESS', RETURN_CODE: '0', RETURN_MESSAGE: 'SUCCESS' } }; axios.mockResolvedValueOnce(mockResponse); const result = await client.recurring.createRecurringPayment({ Config: { ORDER_REF_NUMBER: 'RECUR_123456', BACK_URL: 'https://example.com/callback', PRICES_CURRENCY: 'TRY', ORDER_AMOUNT: '50.00', REPEAT: '3', TRIES_COUNT: '3', START_DATE: '2023-07-28' }, Cards: [ { CC_NUMBER: '4159562885391991', EXP_MONTH: '12', EXP_YEAR: '2025', CC_CVV: '123', CC_OWNER: 'Test User' } ], 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' } }); expect(result).toEqual(mockResponse.data); expect(axios).toHaveBeenCalledTimes(1); expect(axios).toHaveBeenCalledWith(expect.objectContaining({ method: 'POST', url: 'https://posservicetest.esnekpos.com/api/pay/RecurringPayment' })); }); // Fiziksel POS Listesi Testi test('Fiziksel POS listesi alma', async () => { // Mock başarılı yanıt const mockResponse = { data: { RETURN_CODE: '0', RETURN_MESSAGE: 'SUCCESS', POST_LIST: [ { ID: 1, TITLE: 'Test POS 1', CONNECTED: true }, { ID: 2, TITLE: 'Test POS 2', CONNECTED: false } ] } }; axios.mockResolvedValueOnce(mockResponse); const result = await client.physicalPos.listPhysicalPos(); expect(result).toEqual(mockResponse.data); expect(axios).toHaveBeenCalledTimes(1); expect(axios).toHaveBeenCalledWith(expect.objectContaining({ method: 'POST', url: 'https://posservicetest.esnekpos.com/api/services/ListPhysicalPos' })); }); // Hata Durumu Testi test('API hatası işleme', async () => { // Mock hata yanıtı const errorResponse = { response: { status: 400, statusText: 'Bad Request', data: { RETURN_CODE: '101', RETURN_MESSAGE: 'Field Error' } } }; axios.mockRejectedValueOnce(errorResponse); await expect(client.query.queryTransaction('INVALID_ORDER')).rejects.toThrow(/HTTP Hatası/); }); // Ağ Hatası Testi test('Ağ hatası işleme', async () => { // Mock network hatası const networkError = { request: {} }; axios.mockRejectedValueOnce(networkError); await expect(client.query.queryTransaction('ORDER_123456')).rejects.toThrow(/Ağ hatası/); }); });