diff --git a/__tests__/core/contractVerification.spec.js b/__tests__/core/contractVerification.spec.js index 12eddf0f97b82756aa96b042deb7764ee9a185cd..33b2ab7d1950e406ccbc693e7c873e51e031da85 100644 --- a/__tests__/core/contractVerification.spec.js +++ b/__tests__/core/contractVerification.spec.js @@ -6,8 +6,10 @@ const mockSoapRequest = jest.fn() jest.mock('easy-soap-request', () => async () => mockSoapRequest()) const mockParseContracts = jest.fn() +const mockCheckContractExists = jest.fn() jest.mock('../../src/helpers/parsing', () => ({ parseContracts: () => mockParseContracts(), + checkContractExists: () => mockCheckContractExists(), })) const responseMock = { @@ -33,6 +35,7 @@ describe('verifyContract', () => { 'Collecte de la courbe de charge au pas 30 min avec transmission quotidienne des données brutes en soutirage', }, ]) + mockCheckContractExists.mockReturnValueOnce(true) jest.spyOn(xml2js, 'parseStringPromise').mockResolvedValue( { @@ -84,6 +87,7 @@ describe('verifyContract', () => { serviceSouscritLibelle: 'Collecte de la courbe de charge au pas 30 min avec transmission quotidienne des données brutes en soutirage', }) + mockCheckContractExists.mockReturnValueOnce(true) jest.spyOn(xml2js, 'parseStringPromise').mockResolvedValue( { @@ -143,6 +147,7 @@ describe('verifyContract', () => { 'Collecte de la courbe de charge au pas 30 min avec transmission quotidienne des données brutes en soutirage', }, ]) + mockCheckContractExists.mockReturnValueOnce(true) jest.spyOn(xml2js, 'parseStringPromise').mockResolvedValue( { @@ -212,6 +217,7 @@ describe('verifyContract', () => { }, }, }) + mockCheckContractExists.mockReturnValueOnce(true) try { await verifyContract( @@ -226,4 +232,28 @@ describe('verifyContract', () => { expect(error).toBe(errors.LOGIN_FAILED) } }) + it('should return NULL if no contract are found 🚫', async () => { + mockSoapRequest.mockResolvedValue(responseMock) + jest.spyOn(xml2js, 'parseStringPromise').mockResolvedValueOnce({ + Envelope: { + Body: { + rechercherServicesSouscritsMesuresResponse: {}, + }, + }, + }) + + try { + const serviceId = await verifyContract( + 'http://test.com', + '111', + 'login@log.com', + '1234567', + '1111111111111' + ) + expect(serviceId).toBe(null) + } catch (error) { + expect(true).toBe(false) + } + mockParseContracts.mockRestore() + }) }) diff --git a/src/core/contractVerification.js b/src/core/contractVerification.js index 6df8b9c45cd697fa211106ba002a4347212d4091..c53cf4e82f6ca94db46b57e4ef25c88e702bf3e9 100644 --- a/src/core/contractVerification.js +++ b/src/core/contractVerification.js @@ -1,7 +1,12 @@ // @ts-check const { log, errors } = require('cozy-konnector-libs') const soapRequest = require('easy-soap-request') -const { parseTags, parseValue, parseContracts } = require('../helpers/parsing') +const { + parseTags, + parseValue, + parseContracts, + checkContractExists, +} = require('../helpers/parsing') const { rechercherServicesSouscritsMesures } = require('../requests/sge') const xml2js = require('xml2js') const { contractState, contractLibelle } = require('./types/enum') @@ -49,6 +54,7 @@ async function verifyContract(url, apiAuthKey, appLogin, contractId, pointId) { } else { currentContract = parseContracts(parsedReply) } + console.log(currentContract) if ( (currentContract.etatCode === contractState.ACTIF || currentContract.etatCode === contractState.DEMANDE) && @@ -66,15 +72,4 @@ async function verifyContract(url, apiAuthKey, appLogin, contractId, pointId) { } } -/** - * @param {string} parsedReply - * @return {boolean} - */ -function checkContractExists(parsedReply) { - const json = JSON.stringify(parsedReply) - return JSON.parse(json)['Envelope']['Body'][ - 'rechercherServicesSouscritsMesuresResponse' - ]['servicesSouscritsMesures'] -} - module.exports = { verifyContract } diff --git a/src/helpers/parsing.js b/src/helpers/parsing.js index a1f9e8ff3669f1823a252557cae16b5770c169a9..1d10a743d4072eb4de884392df68f5fa876e6a70 100644 --- a/src/helpers/parsing.js +++ b/src/helpers/parsing.js @@ -89,6 +89,18 @@ async function formateDataForDoctype(data) { }) } +/** + * Check if response contains contracts + * @param {string} parsedReply + * @return {boolean} + */ +function checkContractExists(parsedReply) { + const json = JSON.stringify(parsedReply) + return JSON.parse(json)['Envelope']['Body'][ + 'rechercherServicesSouscritsMesuresResponse' + ]['servicesSouscritsMesures'] +} + /** * Format tag in order to be manipulated easly * @param {string} name @@ -124,4 +136,5 @@ module.exports = { parseContracts, parseContractStartDate, parseServiceId, + checkContractExists, }