@ikarha/emecef
Version:
Node.js client library for interacting with the Benin e-MCF API for normalized invoicing
100 lines (99 loc) • 4.6 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const info_1 = require("./info");
const axios_1 = __importDefault(require("axios"));
const axios_mock_adapter_1 = __importDefault(require("axios-mock-adapter"));
const api_error_1 = require("../errors/api-error");
describe('InfoService', () => {
let mock;
let infoService;
beforeAll(() => {
mock = new axios_mock_adapter_1.default(axios_1.default);
process.env.EMECEF_BASE_URL = 'https://test-emecef-api.com/emcf/api';
process.env.EMECEF_TOKEN = 'test-token';
infoService = new info_1.InfoService();
});
afterEach(() => {
mock.reset();
});
afterAll(() => {
mock.restore();
});
describe('getEmeCefInfo', () => {
it('should fetch e-MCF info successfully', async () => {
const mockInfo = {
status: true,
version: '1.0',
ifu: '9999900000001',
nim: 'XX01000070',
tokenValid: '2025-12-31T00:00:00+01:00',
serverDateTime: '2025-05-27T12:20:00+01:00',
emcflist: [
{
nim: 'XX01000070',
status: 'Actif',
shopName: 'TEST #70',
address1: 'Boulevard 23',
address2: '',
address3: 'Cotonou',
contact1: '12345678',
contact2: '',
contact3: ''
}
]
};
mock.onGet('/status').reply(200, mockInfo);
const info = await infoService.getEmeCefInfo();
expect(info).toEqual(mockInfo);
});
it('should throw ApiError on failed request', async () => {
mock.onGet('/status').reply(400, { errorCode: '99', errorDesc: api_error_1.errors['99'] });
await expect(infoService.getEmeCefInfo()).rejects.toThrow('99 : Erreur lors du traitement de la demande');
});
});
describe('getTaxGroups', () => {
it('should fetch tax groups successfully', async () => {
const mockTaxGroups = { a: 0, b: 18, c: 0, d: 0, e: 0, f: 0, aibA: 1, aibB: 5 };
mock.onGet('/taxGroups').reply(200, mockTaxGroups);
const taxGroups = await infoService.getTaxGroups();
expect(taxGroups).toEqual(mockTaxGroups);
});
it('should throw ApiError on failed request', async () => {
mock.onGet('/taxGroups').reply(400, { errorCode: '99', errorDesc: api_error_1.errors['99'] });
await expect(infoService.getTaxGroups()).rejects.toThrow('99 : Erreur lors du traitement de la demande');
});
});
describe('getInvoiceTypes', () => {
it('should fetch invoice types successfully', async () => {
const mockInvoiceTypes = [
{ type: 'FV', description: 'Facture de Vente' },
{ type: 'EV', description: 'Facture d\'Entraînement de Vente' }
];
mock.onGet('/invoiceTypes').reply(200, mockInvoiceTypes);
const invoiceTypes = await infoService.getInvoiceTypes();
expect(invoiceTypes).toEqual(mockInvoiceTypes);
});
it('should throw ApiError on failed request', async () => {
mock.onGet('/invoiceTypes').reply(400, { errorCode: '99', errorDesc: api_error_1.errors['99'] });
await expect(infoService.getInvoiceTypes()).rejects.toThrow('99 : Erreur lors du traitement de la demande');
});
});
describe('getPaymentTypes', () => {
it('should fetch payment types successfully', async () => {
const mockPaymentTypes = [
{ type: 'ESPECES', description: 'Espèces' },
{ type: 'VIREMENT', description: 'Virement bancaire' }
];
mock.onGet('/paymentTypes').reply(200, mockPaymentTypes);
const paymentTypes = await infoService.getPaymentTypes();
expect(paymentTypes).toEqual(mockPaymentTypes);
});
it('should throw ApiError on failed request', async () => {
mock.onGet('/paymentTypes').reply(400, { errorCode: '99', errorDesc: api_error_1.errors['99'] });
await expect(infoService.getPaymentTypes()).rejects.toThrow('99 : Erreur lors du traitement de la demande');
});
});
});