UNPKG

mtn-momo-client

Version:

A collection of utils to interact with the mtn-momo api

103 lines (91 loc) 3.02 kB
import nock from 'nock'; import { describe, expect, it } from 'vitest'; import { BASE_URL, urlPathFrom } from '../../client'; import { Product } from '../../types'; import { collectionService, disbursementService, remittanceService, } from './services'; import { withAuth } from './testUtils'; import { TRANSACTION_URL_PATHS } from '../common/utils'; describe.concurrent.each([ { product: Product.Disbursement, service: disbursementService }, { product: Product.Remittance, service: remittanceService }, ])('transfer for $product service', ({ product, service }) => { const mockReferenceId = 'mockReferenceId'; const path = urlPathFrom([ `/${product}`, 'v1_0', TRANSACTION_URL_PATHS[product], mockReferenceId, ]); const mockResponse = { amount: 100, currency: 'UGX', financialTransactionId: 23503452, externalId: 947354, payee: { partyIdType: 'MSISDN', partyId: 4656473839.0, }, status: 'SUCCESSFUL', }; const transferStatus = () => service.getTransferStatus({ referenceId: mockReferenceId }); it('should fetch a transaction status', async () => { withAuth(nock(BASE_URL).get(path).reply(200, mockResponse), product); const result = await transferStatus(); expect(result).toEqual(mockResponse); }); it('should throw an error when the api throws an error', async () => { withAuth( nock(BASE_URL).get(path).reply(400, { error: 'Request not understood' }), product ); await expect(transferStatus).rejects.toThrowError(); }); it('should throw an error when authentication fails', async () => { nock(BASE_URL).get(path).reply(200, ''); await expect(transferStatus).rejects.toThrowError(); }); }); describe.concurrent('requestToPayTransactionStatus', () => { const mockReferenceId = 'mockReferenceId'; const path = urlPathFrom([ `/collection`, 'v1_0', TRANSACTION_URL_PATHS.collection, mockReferenceId, ]); const mockResponse = { amount: 100, currency: 'UGX', financialTransactionId: 23503452, externalId: 947354, payer: { partyIdType: 'MSISDN', partyId: 4656473839.0, }, status: 'SUCCESSFUL', }; const requestToPayTransactionStatus = () => collectionService.requestToPayTransactionStatus({ referenceId: mockReferenceId, }); it('should fetch a transaction status', async () => { withAuth(nock(BASE_URL).get(path).reply(200, mockResponse)); const result = await requestToPayTransactionStatus(); expect(result).toEqual(mockResponse); }); it('should throw an error when the api throws an error', async () => { withAuth( nock(BASE_URL).get(path).reply(400, { error: 'Request not understood' }) ); await expect(requestToPayTransactionStatus).rejects.toThrowError(); }); it('should throw an error when authentication fails', async () => { nock(BASE_URL).get(path).reply(200, ''); await expect(requestToPayTransactionStatus).rejects.toThrowError(); }); });