UNPKG

@tecafrik/africa-payment-sdk

Version:

A single SDK to integrate all african payment providers seamlessly

222 lines 9.27 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const payment_provider_interface_1 = require("../../payment-provider.interface"); const paydunya_fixtures_1 = require("../fixtures/paydunya.fixtures"); const paydunya_1 = __importDefault(require("../paydunya")); const axios_mock_adapter_1 = __importDefault(require("axios-mock-adapter")); let paydunyaPaymentProvider; let mockApi; jest.mock("apisauce", () => { const realApisauce = jest.requireActual("apisauce"); return Object.assign(Object.assign({}, realApisauce), { create: jest.fn((config) => { const api = realApisauce.create(config); mockApi = new axios_mock_adapter_1.default(api.axiosInstance); return api; }) }); }); beforeEach(() => { paydunyaPaymentProvider = new paydunya_1.default({ masterKey: "masterKey", mode: "live", privateKey: "privateKey", publicKey: "publicKey", store: { name: "store-name", }, token: "token", callbackUrl: "https://example.com/callback", }); }); afterEach(() => { mockApi.reset(); }); test("calls wave API and returns a checkout result on success", () => __awaiter(void 0, void 0, void 0, function* () { mockApi .onPost("/v1/checkout-invoice/create") .replyOnce(200, paydunya_fixtures_1.createInvoiceSuccessResponse); mockApi .onPost("/v1/softpay/wave-senegal") .replyOnce(200, paydunya_fixtures_1.wavePaymentSuccessResponse); const checkoutResult = yield paydunyaPaymentProvider.checkoutMobileMoney({ amount: 100, currency: payment_provider_interface_1.Currency.XOF, customer: { firstName: "Mamadou", lastName: "Diallo", phoneNumber: "+221781234567", }, description: "description", paymentMethod: payment_provider_interface_1.PaymentMethod.WAVE, transactionId: "transactionId", successRedirectUrl: "https://example.com/success", failureRedirectUrl: "https://example.com/failure", metadata: { text_meta: "value", number_meta: 1, boolean_meta: true, }, }); expect(mockApi.history).toMatchSnapshot(); expect(checkoutResult).toMatchSnapshot(); })); test("calls orange money API and returns a checkout result on success", () => __awaiter(void 0, void 0, void 0, function* () { mockApi .onPost("/v1/checkout-invoice/create") .replyOnce(200, paydunya_fixtures_1.createInvoiceSuccessResponse); mockApi .onPost("/v1/softpay/orange-money-senegal") .replyOnce(200, paydunya_fixtures_1.orangeMoneySuccessResponse); const checkoutResult = yield paydunyaPaymentProvider.checkoutMobileMoney({ amount: 100, currency: payment_provider_interface_1.Currency.XOF, customer: { firstName: "Mamadou", lastName: "Diallo", phoneNumber: "+221781234567", }, description: "description", paymentMethod: payment_provider_interface_1.PaymentMethod.ORANGE_MONEY, transactionId: "transactionId", authorizationCode: "12345", successRedirectUrl: "https://example.com/success", failureRedirectUrl: "https://example.com/failure", metadata: { text_meta: "value", number_meta: 1, boolean_meta: true, }, }); expect(mockApi.history).toMatchSnapshot(); expect(checkoutResult).toMatchSnapshot(); })); test("calls paydunya cc API and returns a checkout result on success", () => __awaiter(void 0, void 0, void 0, function* () { mockApi .onPost("/v1/checkout-invoice/create") .replyOnce(200, paydunya_fixtures_1.creditCardInvoiceSuccessResponse); const checkoutResult = yield paydunyaPaymentProvider.checkoutCreditCard({ amount: 100, currency: payment_provider_interface_1.Currency.XOF, customer: { firstName: "Mamadou", lastName: "Diallo", email: "mamadou.diallo@yopmail.com", }, description: "description", paymentMethod: payment_provider_interface_1.PaymentMethod.CREDIT_CARD, transactionId: "transactionId", cardNumber: "4242424242424242", cardExpirationMonth: "12", cardExpirationYear: "2025", cardCvv: "123", successRedirectUrl: "https://example.com/success", failureRedirectUrl: "https://example.com/failure", metadata: { text_meta: "value", number_meta: 1, boolean_meta: true, }, }); expect(mockApi.history).toMatchSnapshot(); expect(checkoutResult).toMatchSnapshot(); })); test("emits a payment initiated event when given an event emitter", () => __awaiter(void 0, void 0, void 0, function* () { const eventEmitter = { emit: jest.fn(), }; paydunyaPaymentProvider.useEventEmitter(eventEmitter); mockApi .onPost("/v1/checkout-invoice/create") .replyOnce(200, paydunya_fixtures_1.createInvoiceSuccessResponse); mockApi .onPost("/v1/softpay/wave-senegal") .replyOnce(200, paydunya_fixtures_1.wavePaymentSuccessResponse); yield paydunyaPaymentProvider.checkoutMobileMoney({ amount: 100, currency: payment_provider_interface_1.Currency.XOF, customer: { firstName: "Mamadou", lastName: "Diallo", phoneNumber: "+221781234567", }, description: "description", paymentMethod: payment_provider_interface_1.PaymentMethod.WAVE, transactionId: "transactionId", metadata: { text_meta: "value", number_meta: 1, boolean_meta: true, }, }); expect(eventEmitter.emit).toMatchSnapshot(); })); test("throws unsupported payment method error when using checkout redirect", () => __awaiter(void 0, void 0, void 0, function* () { yield expect(paydunyaPaymentProvider.checkoutRedirect({ amount: 100, currency: payment_provider_interface_1.Currency.XOF, customer: { firstName: "Mamadou", lastName: "Diallo", email: "mamadou.diallo@yopmail.com", }, description: "description", paymentMethod: payment_provider_interface_1.PaymentMethod.CREDIT_CARD, transactionId: "transactionId", successRedirectUrl: "https://example.com/success", failureRedirectUrl: "https://example.com/failure", })).rejects.toThrowErrorMatchingSnapshot(); })); test("refunds a wave transaction properly", () => __awaiter(void 0, void 0, void 0, function* () { mockApi .onGet(/\/v1\/checkout-invoice\/confirm\/.+/) .reply(200, paydunya_fixtures_1.getWaveInvoiceSuccessResponse); mockApi .onPost("/v2/disburse/get-invoice") .reply(200, paydunya_fixtures_1.createDisburseInvoiceSuccessResponse); mockApi .onPost("/v2/disburse/submit-invoice") .reply(200, paydunya_fixtures_1.submitDisburseInvoiceSuccessResponse); const refundResult = yield paydunyaPaymentProvider.refund({ transactionId: "transactionId", refundedTransactionReference: "wave-transaction-reference", }); expect(mockApi.history).toMatchSnapshot(); expect(refundResult).toMatchSnapshot(); })); test("makes a payout to the provided customer", () => __awaiter(void 0, void 0, void 0, function* () { mockApi .onPost("/v2/disburse/get-invoice") .reply(200, paydunya_fixtures_1.createDisburseInvoiceSuccessResponse); mockApi .onPost("/v2/disburse/submit-invoice") .reply(200, paydunya_fixtures_1.submitDisburseInvoiceSuccessResponse); const payoutResult = yield paydunyaPaymentProvider.payoutMobileMoney({ amount: 150, currency: payment_provider_interface_1.Currency.XOF, paymentMethod: payment_provider_interface_1.PaymentMethod.WAVE, recipient: { phoneNumber: "+221781234567", }, transactionId: "transactionId", transactionReference: "transactionReference", metadata: { text_meta: "value", number_meta: 1, boolean_meta: true, }, }); expect(mockApi.history).toMatchSnapshot(); expect(payoutResult).toMatchSnapshot(); })); //# sourceMappingURL=paydunya.test.js.map