@tecafrik/africa-payment-sdk
Version:
A single SDK to integrate all african payment providers seamlessly
222 lines • 9.27 kB
JavaScript
"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